This is an autogenerated patch header for a single-debian-patch file. The
delta against upstream is either kept as a single patch, or maintained
in some VCS, and exported as a single patch instead of more manageable
atomic patches.

--- webcamoid-9.0.0.orig/.github/FUNDING.yml
+++ webcamoid-9.0.0/.github/FUNDING.yml
@@ -1,4 +1,4 @@
 patreon: hipersayanx
 ko_fi: hipersayanx
 liberapay: hipersayanx
-custom: ["https://www.paypal.me/WebcamoidDonations", "https://commerce.coinbase.com/checkout/e5396fdc-119a-4287-bab9-383ea6332cdc", "https://gist.github.com/hipersayanX/0d575fc7b9b36a2e9817027fb50258bd"]
+custom: ["https://www.paypal.me/WebcamoidDonations", "https://webcamoid.github.io/donations#crypto"]
--- /dev/null
+++ webcamoid-9.0.0/.github/workflows/flatpak.yml
@@ -0,0 +1,51 @@
+name: Flatpak
+
+on: [push, pull_request]
+
+env:
+  RUNTIME_VERSION: 5.15-21.08
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v2
+    - name: Install dependencies
+      run: |
+        chmod +x ports/ci/flatpak/install_deps.sh
+        ./ports/ci/flatpak/install_deps.sh
+    - name: Release Build
+      if: ${{ startsWith(github.ref, 'refs/tags/') }}
+      run: |
+        chmod +x ports/ci/flatpak/build.sh
+        ./ports/ci/flatpak/build.sh
+    - name: Release Deploy
+      if: ${{ startsWith(github.ref, 'refs/tags/') }}
+      run: |
+        chmod +x ports/ci/flatpak/deploy.sh
+        ./ports/ci/flatpak/deploy.sh
+    - name: Daily Build
+      if: ${{ !startsWith(github.ref, 'refs/tags/') }}
+      env:
+        DAILY_BUILD: 1
+      run: |
+        chmod +x ports/ci/flatpak/build.sh
+        ./ports/ci/flatpak/build.sh
+    - name: Daily Deploy
+      if: ${{ !startsWith(github.ref, 'refs/tags/') }}
+      env:
+        DAILY_BUILD: 1
+      run: |
+        chmod +x ports/ci/flatpak/deploy.sh
+        ./ports/ci/flatpak/deploy.sh
+    - name: Daily Build Upload
+      uses: softprops/action-gh-release@v1
+      if: ${{ !startsWith(github.ref, 'refs/tags/') }}
+      with:
+        body: "${{ github.event.head_commit.message }} (commit: ${{ github.sha }})<hr>**Note**: Ignore the commit information of the tag, the files in the release keep updating with every new build, these packages were built from ${{ github.sha }} commit."
+        prerelease: true
+        files: webcamoid-packages/linux/*
+        name: Daily Build
+        tag_name: daily-build
+      env:
+        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
--- webcamoid-9.0.0.orig/.github/workflows/linux-arch.yml
+++ webcamoid-9.0.0/.github/workflows/linux-arch.yml
@@ -3,7 +3,7 @@ name: Arch Linux
 on: [push, pull_request]
 
 env:
-  QTIFWVER: 4.2.0
+  QTIFWVER: 4.5.1
   APPIMAGEVER: 13
   DOCKERIMG: archlinux:latest
   ARCH_ROOT_URL: https://mirror.rackspace.com/archlinux
--- webcamoid-9.0.0.orig/.github/workflows/linux-debian.yml
+++ webcamoid-9.0.0/.github/workflows/linux-debian.yml
@@ -3,7 +3,7 @@ name: Debian
 on: [push, pull_request]
 
 env:
-  QTIFWVER: 4.2.0
+  QTIFWVER: 4.5.1
   APPIMAGEVER: 13
   DOCKERIMG: debian:testing
   NJOBS: 4
--- webcamoid-9.0.0.orig/.github/workflows/linux-fedora.yml
+++ webcamoid-9.0.0/.github/workflows/linux-fedora.yml
@@ -3,12 +3,10 @@ name: Fedora
 on: [push, pull_request]
 
 env:
-  QTIFWVER: 4.2.0
+  QTIFWVER: 4.5.1
   APPIMAGEVER: 13
-#  DOCKERIMG: fedora:rawhide
-#  FEDORAVER: rawhide
-  DOCKERIMG: fedora:34
-  FEDORAVER: 34
+  DOCKERIMG: fedora:rawhide
+  FEDORAVER: rawhide
   NJOBS: 4
 
 jobs:
--- webcamoid-9.0.0.orig/.github/workflows/linux-mageia.yml
+++ webcamoid-9.0.0/.github/workflows/linux-mageia.yml
@@ -3,7 +3,7 @@ name: Mageia
 on: [push, pull_request]
 
 env:
-  QTIFWVER: 4.2.0
+  QTIFWVER: 4.5.1
   APPIMAGEVER: 13
   DOCKERIMG: mageia:latest
   NJOBS: 4
--- webcamoid-9.0.0.orig/.github/workflows/linux-opensuse.yml
+++ webcamoid-9.0.0/.github/workflows/linux-opensuse.yml
@@ -3,10 +3,9 @@ name: OpenSUSE
 on: [push, pull_request]
 
 env:
-  QTIFWVER: 4.2.0
+  QTIFWVER: 4.5.1
   APPIMAGEVER: 13
-  #DOCKERIMG: opensuse/tumbleweed
-  DOCKERIMG: opensuse/leap:15.3
+  DOCKERIMG: opensuse/tumbleweed
   NJOBS: 4
 
 jobs:
--- webcamoid-9.0.0.orig/.github/workflows/linux-ubuntu.yml
+++ webcamoid-9.0.0/.github/workflows/linux-ubuntu.yml
@@ -5,7 +5,7 @@ on: [push, pull_request]
 env:
   APPIMAGEVER: 13
   PPAQTVER: 515
-  QTIFWVER: 4.2.0
+  QTIFWVER: 4.5.1
   QTVER: 5.15.2
   NJOBS: 4
 
--- webcamoid-9.0.0.orig/.github/workflows/windows-msvc.yml
+++ webcamoid-9.0.0/.github/workflows/windows-msvc.yml
@@ -4,8 +4,8 @@ on: [push, pull_request]
 
 env:
   QTVER: 5.15.2
-  FFMPEG_VERSION: 4.4.1
-  GSTREAMER_VERSION: 1.18.5
+  FFMPEG_VERSION: 5.1.2
+  GSTREAMER_VERSION: 1.20.5
   CMAKE_GENERATOR: Visual Studio 16 2019
   NJOBS: 4
 
--- webcamoid-9.0.0.orig/CMakeLists.txt
+++ webcamoid-9.0.0/CMakeLists.txt
@@ -394,4 +394,5 @@ endif ()
 
 if (UNIX AND NOT ANDROID AND NOT MACX)
     install(FILES webcamoid.desktop DESTINATION ${DATAROOTDIR}/applications)
+    install(FILES io.github.webcamoid.Webcamoid.metainfo.xml DESTINATION ${DATAROOTDIR}/metainfo)
 endif ()
--- webcamoid-9.0.0.orig/README.md
+++ webcamoid-9.0.0/README.md
@@ -2,7 +2,7 @@
 
 [Webcamoid](https://webcamoid.github.io/) is a full featured and multiplatform webcam suite.
 
-<a target="_blank" href="https://webcamoid.github.io/"><img src="https://webcamoid.github.io/theme/images/screenshots/Main.png" style="height: 240px;" /></a>
+<a target="_blank" href="https://webcamoid.github.io/"><img src="https://webcamoid.github.io/theme/images/screenshots/Main.webp" style="height: 240px;" /></a>
 
 ## Features ##
 
@@ -31,14 +31,7 @@ Visit the [wiki](https://github.com/webc
 
 ## Donations ##
 
-Any donation amount is welcome and very appreciated.
-
-[![Patreon](https://img.shields.io/badge/Donate-Patreon-7f7f00.svg)](https://www.patreon.com/hipersayanx)
-[![Ko-fi](https://img.shields.io/badge/Donate-Ko%20fi-7f7f00.svg)](https://ko-fi.com/hipersayanx)
-[![Liberapay](https://img.shields.io/badge/Donate-Liberapay-7f7f00.svg)](https://liberapay.com/hipersayanx)
-[![Paypal](https://img.shields.io/badge/Donate-Paypal-7f7f00.svg)](https://www.paypal.me/WebcamoidDonations)
-[![Coinbase](https://img.shields.io/badge/Donate-Coinbase-7f7f00.svg)](https://commerce.coinbase.com/checkout/e5396fdc-119a-4287-bab9-383ea6332cdc)
-[![Monero](https://img.shields.io/badge/Donate-Monero-7f7f00.svg)](https://gist.github.com/hipersayanX/0d575fc7b9b36a2e9817027fb50258bd)
+If you are interested in donating to the project you can look at all available methods in the [donations page](https://webcamoid.github.io/donations).
 
 ## Status ##
 
@@ -50,6 +43,7 @@ Any donation amount is welcome and very
 [![Linux MinGW](https://github.com/webcamoid/webcamoid/actions/workflows/linux-mingw.yml/badge.svg)](https://github.com/webcamoid/webcamoid/actions/workflows/linux-mingw.yml)
 [![OpenSUSE](https://github.com/webcamoid/webcamoid/actions/workflows/linux-opensuse.yml/badge.svg)](https://github.com/webcamoid/webcamoid/actions/workflows/linux-opensuse.yml)
 [![Ubuntu](https://github.com/webcamoid/webcamoid/actions/workflows/linux-ubuntu.yml/badge.svg)](https://github.com/webcamoid/webcamoid/actions/workflows/linux-ubuntu.yml)
+[![Flatpak](https://github.com/webcamoid/webcamoid/actions/workflows/flatpak.yml/badge.svg)](https://github.com/webcamoid/webcamoid/actions/workflows/flatpak.yml)
 [![Mac](https://github.com/webcamoid/webcamoid/actions/workflows/mac.yml/badge.svg)](https://github.com/webcamoid/webcamoid/actions/workflows/mac.yml)
 [![Windows MSYS](https://github.com/webcamoid/webcamoid/actions/workflows/windows-msys.yml/badge.svg)](https://github.com/webcamoid/webcamoid/actions/workflows/windows-msys.yml)
 [![Build status](https://ci.appveyor.com/api/projects/status/1ecp839l0nnnya9l?svg=true)](https://ci.appveyor.com/project/hipersayanX/webcamoid)
--- webcamoid-9.0.0.orig/StandAlone/DefaultTheme.qrc
+++ webcamoid-9.0.0/StandAlone/DefaultTheme.qrc
@@ -14,6 +14,7 @@
         <file>share/themes/WebcamoidTheme/Drawer.qml</file>
         <file>share/themes/WebcamoidTheme/Frame.qml</file>
         <file>share/themes/WebcamoidTheme/GroupBox.qml</file>
+        <file>share/themes/WebcamoidTheme/HorizontalHeaderView.qml</file>
         <file>share/themes/WebcamoidTheme/ItemDelegate.qml</file>
         <file>share/themes/WebcamoidTheme/Label.qml</file>
         <file>share/themes/WebcamoidTheme/Menu.qml</file>
@@ -35,6 +36,7 @@
         <file>share/themes/WebcamoidTheme/ScrollView.qml</file>
         <file>share/themes/WebcamoidTheme/Slider.qml</file>
         <file>share/themes/WebcamoidTheme/SpinBox.qml</file>
+        <file>share/themes/WebcamoidTheme/SplitView.qml</file>
         <file>share/themes/WebcamoidTheme/StackView.qml</file>
         <file>share/themes/WebcamoidTheme/SwipeDelegate.qml</file>
         <file>share/themes/WebcamoidTheme/SwipeView.qml</file>
@@ -49,6 +51,7 @@
         <file>share/themes/WebcamoidTheme/ToolSeparator.qml</file>
         <file>share/themes/WebcamoidTheme/ToolTip.qml</file>
         <file>share/themes/WebcamoidTheme/Tumbler.qml</file>
+        <file>share/themes/WebcamoidTheme/VerticalHeaderView.qml</file>
         <file>share/themes/WebcamoidTheme/Private/qmldir</file>
         <file>share/themes/WebcamoidTheme/Private/IconLabel.qml</file>
     </qresource>
--- webcamoid-9.0.0.orig/StandAlone/ManPages/CMakeLists.txt
+++ webcamoid-9.0.0/StandAlone/ManPages/CMakeLists.txt
@@ -35,5 +35,5 @@ if (GZIP_TOOL)
                       VERBATIM
                       SOURCES src/webcamoid.1.in)
 
-    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/src/webcamoid.1.gz DESTINATION ${CMAKE_INSTALL_MANDIR})
+    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/src/webcamoid.1.gz DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
 endif ()
--- webcamoid-9.0.0.orig/StandAlone/Webcamoid.qrc
+++ webcamoid-9.0.0/StandAlone/Webcamoid.qrc
@@ -10,6 +10,7 @@
         <file>share/qml/AboutDialog.qml</file>
         <file>share/qml/AddVideoFormat.qml</file>
         <file>share/qml/AudioCodecOptions.qml</file>
+        <file>share/qml/AudioDeviceItem.qml</file>
         <file>share/qml/AudioDeviceOptions.qml</file>
         <file>share/qml/AudioInputs.qml</file>
         <file>share/qml/AudioOptions.qml</file>
@@ -17,7 +18,6 @@
         <file>share/qml/AudioVideoPanel.qml</file>
         <file>share/qml/Commons.qml</file>
         <file>share/qml/Contributors.qml</file>
-        <file>share/qml/DialogBox.qml</file>
         <file>share/qml/DownloadDialog.qml</file>
         <file>share/qml/DownloadFailedDialog.qml</file>
         <file>share/qml/DownloadSucceededDialog.qml</file>
@@ -28,6 +28,8 @@
         <file>share/qml/OptionList.qml</file>
         <file>share/qml/OptionsPanel.qml</file>
         <file>share/qml/PluginConfig.qml</file>
+        <file>share/qml/PluginItem.qml</file>
+        <file>share/qml/PluginsPathItem.qml</file>
         <file>share/qml/RecordingNotice.qml</file>
         <file>share/qml/SettingsDialog.qml</file>
         <file>share/qml/SettingsMenu.qml</file>
@@ -38,10 +40,13 @@
         <file>share/qml/VCamInstallSucceededDialog.qml</file>
         <file>share/qml/VCamManualDownloadDialog.qml</file>
         <file>share/qml/VideoCodecOptions.qml</file>
+        <file>share/qml/VideoDeviceItem.qml</file>
+        <file>share/qml/VideoEffectItem.qml</file>
         <file>share/qml/VideoEffectOptions.qml</file>
         <file>share/qml/VideoEffectsDialog.qml</file>
         <file>share/qml/VideoEffectsList.qml</file>
         <file>share/qml/VideoEffectsPanel.qml</file>
+        <file>share/qml/VideoFormatItem.qml</file>
         <file>share/qml/VideoFormatOptions.qml</file>
         <file>share/qml/VideoInputAddEdit.qml</file>
         <file>share/qml/VideoInputOptions.qml</file>
--- webcamoid-9.0.0.orig/StandAlone/WebcamoidInfo.plist
+++ webcamoid-9.0.0/StandAlone/WebcamoidInfo.plist
@@ -21,7 +21,7 @@
         <key>CFBundleSignature</key>
         <string>????</string>
         <key>LSMinimumSystemVersion</key>
-        <string>10.11</string>
+        <string>${CMAKE_OSX_DEPLOYMENT_TARGET}</string>
         <key>NSHumanReadableCopyright</key>
         <string>${MACOSX_BUNDLE_COPYRIGHT}</string>
         <key>NSPrincipalClass</key>
--- webcamoid-9.0.0.orig/StandAlone/icons.qrc
+++ webcamoid-9.0.0/StandAlone/icons.qrc
@@ -14,6 +14,7 @@
         <file>share/themes/WebcamoidTheme/icons/hicolor/128x128/mic.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/128x128/minus.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/128x128/no.png</file>
+        <file>share/themes/WebcamoidTheme/icons/hicolor/128x128/paperclip.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/128x128/photo.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/128x128/picture.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/128x128/play.png</file>
@@ -48,6 +49,7 @@
         <file>share/themes/WebcamoidTheme/icons/hicolor/16x16/mic.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/16x16/minus.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/16x16/no.png</file>
+        <file>share/themes/WebcamoidTheme/icons/hicolor/16x16/paperclip.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/16x16/photo.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/16x16/picture.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/16x16/play.png</file>
@@ -82,6 +84,7 @@
         <file>share/themes/WebcamoidTheme/icons/hicolor/22x22/mic.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/22x22/minus.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/22x22/no.png</file>
+        <file>share/themes/WebcamoidTheme/icons/hicolor/22x22/paperclip.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/22x22/photo.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/22x22/picture.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/22x22/play.png</file>
@@ -116,6 +119,7 @@
         <file>share/themes/WebcamoidTheme/icons/hicolor/256x256/mic.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/256x256/minus.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/256x256/no.png</file>
+        <file>share/themes/WebcamoidTheme/icons/hicolor/256x256/paperclip.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/256x256/photo.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/256x256/picture.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/256x256/play.png</file>
@@ -150,6 +154,7 @@
         <file>share/themes/WebcamoidTheme/icons/hicolor/32x32/mic.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/32x32/minus.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/32x32/no.png</file>
+        <file>share/themes/WebcamoidTheme/icons/hicolor/32x32/paperclip.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/32x32/photo.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/32x32/picture.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/32x32/play.png</file>
@@ -184,6 +189,7 @@
         <file>share/themes/WebcamoidTheme/icons/hicolor/48x48/mic.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/48x48/minus.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/48x48/no.png</file>
+        <file>share/themes/WebcamoidTheme/icons/hicolor/48x48/paperclip.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/48x48/photo.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/48x48/picture.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/48x48/play.png</file>
@@ -218,6 +224,7 @@
         <file>share/themes/WebcamoidTheme/icons/hicolor/64x64/mic.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/64x64/minus.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/64x64/no.png</file>
+        <file>share/themes/WebcamoidTheme/icons/hicolor/64x64/paperclip.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/64x64/photo.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/64x64/picture.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/64x64/play.png</file>
@@ -252,6 +259,7 @@
         <file>share/themes/WebcamoidTheme/icons/hicolor/8x8/mic.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/8x8/minus.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/8x8/no.png</file>
+        <file>share/themes/WebcamoidTheme/icons/hicolor/8x8/paperclip.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/8x8/photo.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/8x8/picture.png</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/8x8/play.png</file>
@@ -287,6 +295,7 @@
         <file>share/themes/WebcamoidTheme/icons/hicolor/scalable/mic.svg</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/scalable/minus.svg</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/scalable/no.svg</file>
+        <file>share/themes/WebcamoidTheme/icons/hicolor/scalable/paperclip.svg</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/scalable/photo.svg</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/scalable/picture.svg</file>
         <file>share/themes/WebcamoidTheme/icons/hicolor/scalable/play.svg</file>
--- webcamoid-9.0.0.orig/StandAlone/share/android/AndroidManifest.xml
+++ webcamoid-9.0.0/StandAlone/share/android/AndroidManifest.xml
@@ -18,6 +18,12 @@
                 <action android:name="android.intent.action.MAIN"/>
                 <category android:name="android.intent.category.LAUNCHER"/>
             </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW"/>
+                <category android:name="android.intent.category.BROWSABLE"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+                <data android:scheme="file"/>
+            </intent-filter>
 
             <!-- Application arguments -->
             <!-- meta-data android:name="android.app.arguments" android:value="arg1 arg2 arg3"/ -->
--- webcamoid-9.0.0.orig/StandAlone/share/qml/About.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/About.qml
@@ -68,6 +68,10 @@ Page {
                         Button {
                             text: mediaTools.projectGitShortCommit
                             flat: true
+                            Accessible.name:
+                                qsTr("Built from %1").arg(mediaTools.projectGitShortCommit)
+                            Accessible.description:
+                                qsTr("Open the commit in your web browser")
 
                             onClicked: Qt.openUrlExternally(mediaTools.projectGitCommitUrl)
                         }
@@ -79,6 +83,9 @@ Page {
                     Button {
                         text: qsTr("Website")
                         icon.source: "image://icons/internet"
+                        Accessible.name: text
+                        Accessible.description:
+                            qsTr("Go to %1 website").arg(mediaTools.applicationName)
 
                         onClicked: Qt.openUrlExternally(mediaTools.projectUrl)
                     }
--- webcamoid-9.0.0.orig/StandAlone/share/qml/AboutDialog.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/AboutDialog.qml
@@ -26,11 +26,13 @@ import Webcamoid 1.0
 Dialog {
     id: aboutDialog
     standardButtons: Dialog.Close
-    width: AkUnit.create(640 * AkTheme.controlScale, "dp").pixels
-    height: AkUnit.create(400 * AkTheme.controlScale, "dp").pixels
+    width: wdgMainWidget.width * 0.75
+    height: wdgMainWidget.height * 0.75
     modal: true
     title: qsTr("About %1").arg(mediaTools.applicationName)
 
+    onVisibleChanged: tabBar.currentItem.forceActiveFocus()
+
     ColumnLayout {
         anchors.fill: parent
 
@@ -39,7 +41,7 @@ Dialog {
             Layout.fillWidth: true
 
             TabButton {
-                /*: Information of the program, like name, description, vesion,
+                /*: Information of the program, like name, description, version,
                     etc..
                  */
                 text: qsTr("About")
--- webcamoid-9.0.0.orig/StandAlone/share/qml/AddVideoFormat.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/AddVideoFormat.qml
@@ -35,6 +35,8 @@ Dialog {
     signal changeFormat(int index, variant caps)
     signal removeFormat(int index)
 
+    onVisibleChanged: pixelFormats.forceActiveFocus()
+
     function openOptions(formatIndex=-1, caps={})
     {
         addFormat.formatIndex = formatIndex
@@ -103,15 +105,18 @@ Dialog {
                 }
             }
             Label {
+                id: txtFormat
                 text: qsTr("Format")
             }
             ComboBox {
                 id: pixelFormats
+                Accessible.description: txtFormat.text
                 textRole: "description"
                 model: ListModel {}
                 Layout.fillWidth: true
             }
             Label {
+                id: txtWidth
                 text: qsTr("Width")
             }
             SpinBox {
@@ -121,8 +126,10 @@ Dialog {
                 to: 4096
                 stepSize: 1
                 editable: true
+                Accessible.name: txtWidth.text
             }
             Label {
+                id: txtHeight
                 text: qsTr("Height")
             }
             SpinBox {
@@ -132,8 +139,10 @@ Dialog {
                 to: 4096
                 stepSize: 1
                 editable: true
+                Accessible.name: txtHeight.text
             }
             Label {
+                id: txtFrameRate
                 text: qsTr("Frame rate")
             }
             SpinBox {
@@ -143,6 +152,7 @@ Dialog {
                 to: 250
                 stepSize: 1
                 editable: true
+                Accessible.name: txtFrameRate.text
             }
         }
     }
--- webcamoid-9.0.0.orig/StandAlone/share/qml/AudioCodecOptions.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/AudioCodecOptions.qml
@@ -33,6 +33,8 @@ Dialog {
     property variant controlValues: ({})
     property int startChildren: 2
 
+    onVisibleChanged: bitrate.forceActiveFocus()
+
     function updateOptions() {
         for (let i = mainLayout.children.length - 1; i >= startChildren; i--)
             mainLayout.children[i].destroy()
@@ -161,11 +163,13 @@ Dialog {
             width: scrollView.width
 
             Label {
+                id: txtBitrate
                 text: qsTr("Bitrate")
             }
             TextField {
                 id: bitrate
                 placeholderText: qsTr("Bitrate (bits/secs)")
+                Accessible.name: txtBitrate.text
                 selectByMouse: true
                 validator: RegExpValidator {
                     regExp: /\d+/
@@ -224,6 +228,7 @@ Dialog {
         TextField {
             selectByMouse: true
             Layout.fillWidth: true
+            Accessible.name: key
 
             property string key: ""
             property variant defaultValue: null
@@ -255,6 +260,7 @@ Dialog {
                 regExp: /-?\d+\/\d+/
             }
             Layout.fillWidth: true
+            Accessible.name: key
 
             property string key: ""
             property variant defaultValue: null
@@ -313,6 +319,7 @@ Dialog {
                 to: parent.to
                 stepSize: parent.stepSize
                 Layout.fillWidth: true
+                Accessible.name: rangeLayout.key
 
                 onValueChanged: {
                     spbRange.value = spbRange.multiplier * value
@@ -330,6 +337,7 @@ Dialog {
                     bottom: Math.min(spbRange.from, spbRange.to)
                     top:  Math.max(spbRange.from, spbRange.to)
                 }
+                Accessible.name: rangeLayout.key
 
                 readonly property int decimals: parent.stepSize < 1? 2: 0
                 readonly property int multiplier: Math.pow(10, decimals)
@@ -353,6 +361,7 @@ Dialog {
                 regExp: /[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?/
             }
             Layout.fillWidth: true
+            Accessible.name: key
 
             property string key: ""
             property variant defaultValue: null
@@ -380,6 +389,7 @@ Dialog {
 
         Switch {
             Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
+            Accessible.name: key
 
             property string key: ""
             property variant defaultValue: null
@@ -410,6 +420,7 @@ Dialog {
             }
             textRole: "description"
             Layout.fillWidth: true
+            Accessible.description: key
 
             property string key: ""
             property variant defaultValue: null
@@ -488,6 +499,7 @@ Dialog {
         GroupBox {
             Layout.columnSpan: 2
             Layout.fillWidth: true
+            Accessible.name: key
 
             property string key: ""
             property variant defaultValue: null
--- /dev/null
+++ webcamoid-9.0.0/StandAlone/share/qml/AudioDeviceItem.qml
@@ -0,0 +1,28 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+import QtQuick 2.12
+import QtQuick.Controls 2.5
+
+ItemDelegate {
+    Accessible.name: text
+    Accessible.role: Accessible.MenuItem
+
+    property string device: ""
+}
--- webcamoid-9.0.0.orig/StandAlone/share/qml/AudioDeviceOptions.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/AudioDeviceOptions.qml
@@ -32,6 +32,8 @@ Dialog {
 
     property string device: ""
 
+    onVisibleChanged: cbxSampleFormats.forceActiveFocus()
+
     function bound(min, value, max)
     {
         return Math.max(min, Math.min(value, max))
@@ -120,6 +122,7 @@ Dialog {
                     AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
             }
             Label {
+                id: txtSampleFormat
                 /*: An sample represents the strength of the wave at a certain
                     time.
                     A sample can be expressed as the number of bits defining it
@@ -135,6 +138,7 @@ Dialog {
             }
             ComboBox {
                 id: cbxSampleFormats
+                Accessible.description: txtSampleFormat.text
                 model: ListModel { }
                 textRole: "description"
                 Layout.columnSpan: 2
@@ -153,10 +157,12 @@ Dialog {
                 }
             }
             Label {
+                id: txtChannelLayouts
                 text: qsTr("Channels")
             }
             ComboBox {
                 id: cbxChannelLayouts
+                Accessible.description: txtChannelLayouts.text
                 model: ListModel { }
                 textRole: "description"
                 Layout.columnSpan: 2
@@ -175,11 +181,13 @@ Dialog {
                 }
             }
             Label {
+                id: txtSampleRate
                 //: Number of audio samples per channel to be played per second.
                 text: qsTr("Sample Rate")
             }
             ComboBox {
                 id: cbxSampleRates
+                Accessible.description: txtSampleRate.text
                 model: ListModel { }
                 textRole: "description"
                 Layout.columnSpan: 2
@@ -198,6 +206,7 @@ Dialog {
                 }
             }
             Label {
+                id: txtLatency
                 /*: The latency is the amount of accumulated audio ready to
                     play, measured in time.
                     Higher latency == smoother audio playback, but more
@@ -216,6 +225,7 @@ Dialog {
                 to: 2048
                 Layout.fillWidth: true
                 visible: true
+                Accessible.name: txtLatency.text
 
                 function reset()
                 {
@@ -232,6 +242,7 @@ Dialog {
                 stepSize: sldLatency.stepSize
                 visible: true
                 editable: true
+                Accessible.name: txtLatency.text
 
                 onValueModified: sldLatency.value = value
             }
@@ -259,6 +270,7 @@ Dialog {
             audioCaps =
                     AkAudioCaps.create(cbxSampleFormats.model.get(sampleFormatsCI).format,
                                        cbxChannelLayouts.model.get(channelLayoutsCI).layout,
+                                       false,
                                        cbxSampleRates.model.get(sampleRatesCI).sampleRate)
         }
 
--- webcamoid-9.0.0.orig/StandAlone/share/qml/AudioInputs.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/AudioInputs.qml
@@ -24,95 +24,78 @@ import QtQuick.Layouts 1.3
 ScrollView {
     id: view
 
-    ListView {
-        id: devicesList
-        model: ListModel {}
-        width: view.width
-        implicitWidth: childrenRect.width
-        implicitHeight: childrenRect.height
-        clip: true
+    Component.onCompleted: devicesList.update()
+    onVisibleChanged: devicesList.forceActiveFocus()
 
-        function updateDevices() {
-            let devices = audioLayer.inputs
-            model.clear()
-
-            for (let i in devices) {
-                let device = devices[i]
-                let description = audioLayer.description(device)
-
-                model.append({
-                    device: device,
-                    description: description})
-            }
-
-            let input = audioLayer.audioInput.length < 1?
-                            "":
-                            audioLayer.audioInput[0]
-            let index = devices.indexOf(input)
-
-            if (index < 0) {
-                if (devices.length == 1)
-                    index = 0
-                else if (devices.length >= 2)
-                    index = 1
-            }
+    Connections {
+        target: audioLayer
 
-            currentIndex = index
+        function onInputsChanged()
+        {
+            devicesList.update()
         }
+    }
 
-        delegate: ItemDelegate {
-            text: index < 0 && index >= devicesList.count?
-                      "":
-                  devicesList.model.get(index)?
-                      devicesList.model.get(index)["description"]:
-                      ""
-            width: devicesList.width
-            height: implicitHeight
-            highlighted: devicesList.currentItem == this
-
-            onClicked: {
-                if (devicesList.currentIndex == index) {
-                    if (index < 0)
-                        return
-
-                    let deviceElement = devicesList.model.get(index)
-
-                    if (!deviceElement)
-                        return
+    ColumnLayout {
+        width: view.width
+        clip: true
 
-                    let device = deviceElement["device"]
+        Button {
+            text: qsTr("Configure input")
+            icon.source: "image://icons/settings"
+            flat: true
+            visible: devicesList.count > 0
 
-                    if (!device)
-                        return
+            onClicked: deviceOptions.openOptions(audioLayer.audioInput[0])
+        }
+        OptionList {
+            id: devicesList
+            Layout.fillWidth: true
+
+            property bool updating: false
+
+            function update() {
+                let devices = audioLayer.inputs
+
+                for (let i = count - 1; i >= 0; i--)
+                    removeItem(itemAt(i))
+
+                let input = audioLayer.audioInput.length < 1?
+                                "":
+                                audioLayer.audioInput[0]
+                let index = devices.indexOf(input)
+
+                if (index < 0) {
+                    if (devices.length == 1)
+                        index = 0
+                    else if (devices.length >= 2)
+                        index = 1
+                }
 
-                    deviceOptions.openOptions(device)
-                } else {
-                    let deviceElement = devicesList.model.get(index)
+                updating = true
 
-                    if (!deviceElement)
-                        return
+                for (let i in devices) {
+                    let component = Qt.createComponent("AudioDeviceItem.qml")
 
-                    let device = deviceElement["device"]
+                    if (component.status !== Component.Ready)
+                        continue
 
-                    if (!device)
-                        return
+                    let obj = component.createObject(devicesList)
+                    obj.text = audioLayer.description(devices[i])
+                    obj.device = devices[i]
+                    obj.highlighted = i == index
 
-                    audioLayer.audioInput = [device]
-                    devicesList.currentIndex = index
+                    obj.Keys.onSpacePressed.connect(() => deviceOptions.openOptions(audioLayer.audioInput[0]))
                 }
-            }
-        }
-
-        Connections {
-            target: audioLayer
 
-            function onInputsChanged()
-            {
-                devicesList.updateDevices()
+                updating = false
+                setCurrentIndex(index)
             }
-        }
 
-        Component.onCompleted: devicesList.updateDevices()
+            onCurrentIndexChanged:
+                if (!updating && itemAt(currentIndex))
+                    audioLayer.audioInput = [itemAt(currentIndex).device]
+        }
     }
 
     AudioDeviceOptions {
--- webcamoid-9.0.0.orig/StandAlone/share/qml/AudioOutputs.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/AudioOutputs.qml
@@ -24,93 +24,75 @@ import QtQuick.Layouts 1.3
 ScrollView {
     id: view
 
-    ListView {
-        id: devicesList
-        model: ListModel {}
-        width: view.width
-        implicitWidth: childrenRect.width
-        implicitHeight: childrenRect.height
-        clip: true
+    Component.onCompleted: devicesList.update()
+    onVisibleChanged: devicesList.forceActiveFocus()
 
-        function updateDevices() {
-            let devices = audioLayer.outputs
-            model.clear()
-
-            for (let i in devices) {
-                let device = devices[i]
-                let description = audioLayer.description(device)
-
-                model.append({
-                    device: device,
-                    description: description})
-            }
+    Connections {
+        target: audioLayer
+
+        function onOutputsChanged()
+        {
+            devicesList.update()
+        }
+    }
 
-            let index = devices.indexOf(audioLayer.audioOutput)
+    ColumnLayout {
+        width: view.width
+        clip: true
 
-            if (index < 0) {
-                if (devices.length == 1)
-                    index = 0
-                else if (devices.length >= 2)
-                    index = 1
-            }
+        Button {
+            text: qsTr("Configure output")
+            icon.source: "image://icons/settings"
+            flat: true
+            visible: devicesList.count > 0
 
-            currentIndex = index
+            onClicked: deviceOptions.openOptions(audioLayer.audioOutput)
         }
+        OptionList {
+            id: devicesList
+            Layout.fillWidth: true
+
+            property bool updating: false
 
-        delegate: ItemDelegate {
-            text: index < 0 && index >= devicesList.count?
-                      "":
-                  devicesList.model.get(index)?
-                      devicesList.model.get(index)["description"]:
-                      ""
-            anchors.right: parent.right
-            anchors.left: parent.left
-            height: implicitHeight
-            highlighted: devicesList.currentItem == this
-
-            onClicked: {
-                if (devicesList.currentIndex == index) {
-                    if (index < 0)
-                        return
-
-                    let deviceElement = devicesList.model.get(index)
-
-                    if (!deviceElement)
-                        return
-
-                    let device = deviceElement["device"]
-
-                    if (!device)
-                        return
-
-                    deviceOptions.openOptions(device)
-                } else {
-                    let deviceElement = devicesList.model.get(index)
-
-                    if (!deviceElement)
-                        return
+            function update() {
+                let devices = audioLayer.outputs
 
-                    let device = deviceElement["device"]
+                for (let i = count - 1; i >= 0; i--)
+                    removeItem(itemAt(i))
 
-                    if (!device)
-                        return
+                let index = devices.indexOf(audioLayer.audioOutput)
 
-                    audioLayer.audioOutput = device
-                    devicesList.currentIndex = index
+                if (index < 0) {
+                    if (devices.length == 1)
+                        index = 0
+                    else if (devices.length >= 2)
+                        index = 1
                 }
-            }
-        }
 
-        Connections {
-            target: audioLayer
+                updating = true
+
+                for (let i in devices) {
+                    let component = Qt.createComponent("AudioDeviceItem.qml")
+
+                    if (component.status !== Component.Ready)
+                        continue
+
+                    let obj = component.createObject(devicesList)
+                    obj.text = audioLayer.description(devices[i])
+                    obj.device = devices[i]
+                    obj.highlighted = i == index
 
-            function onOutputsChanged()
-            {
-                devicesList.updateDevices()
+                    obj.Keys.onSpacePressed.connect(() => deviceOptions.openOptions(audioLayer.audioOutput))
+                }
+
+                updating = false
+                setCurrentIndex(index)
             }
-        }
 
-        Component.onCompleted: devicesList.updateDevices()
+            onCurrentIndexChanged:
+                if (!updating && itemAt(currentIndex))
+                    audioLayer.audioOutput = itemAt(currentIndex).device
+        }
     }
 
     AudioDeviceOptions {
--- webcamoid-9.0.0.orig/StandAlone/share/qml/DialogBox.qml
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2015  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-import QtQuick 2.12
-import QtQuick.Controls 2.5
-
-Rectangle {
-    id: recDialogBox
-    width: 128
-    height: 56
-    color: Qt.rgba(0, 0, 0, 0)
-
-    property color backgroundUp: Qt.rgba(0.25, 0.25, 0.25, 1)
-    property color backgroundDown: Qt.rgba(0, 0, 0, 1)
-    property color dialogBorder: Qt.rgba(0.12, 0.12, 0.12, 1)
-    property color textColor:  Qt.rgba(1, 1, 1, 1)
-    property real markSize: 8
-    property string text: ""
-
-    onTextChanged: {
-        txtTitle.text = recDialogBox.text
-        recDialogBox.width = txtTitle.width + recDialogBox.height - txtTitle.height
-    }
-
-    SystemPalette {
-        id: palette
-    }
-
-    Rectangle {
-        id: recMark
-        width: recDialogBox.markSize * Math.SQRT2
-        height: recDialogBox.markSize * Math.SQRT2
-        color: recDialogBox.dialogBorder
-        anchors.bottom: parent.bottom
-        anchors.horizontalCenter: parent.horizontalCenter
-        rotation: 45
-    }
-
-    Rectangle {
-        id: recTitle
-        radius: 16
-        anchors.bottomMargin: -recDialogBox.markSize * Math.SQRT1_2
-        anchors.bottom: recMark.top
-        anchors.top: parent.top
-        anchors.right: parent.right
-        anchors.left: parent.left
-        border.width: 4
-        border.color: recDialogBox.dialogBorder
-
-        gradient: Gradient {
-            GradientStop {
-                position: 0
-                color: recDialogBox.backgroundUp
-            }
-
-            GradientStop {
-                position: 1
-                color: recDialogBox.backgroundDown
-            }
-        }
-
-        Label {
-            id: txtTitle
-            text: recDialogBox.text
-            color: recDialogBox.textColor
-            anchors.horizontalCenter: parent.horizontalCenter
-            anchors.verticalCenter: parent.verticalCenter
-        }
-    }
-}
--- webcamoid-9.0.0.orig/StandAlone/share/qml/DownloadDialog.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/DownloadDialog.qml
@@ -52,6 +52,8 @@ Dialog {
     signal downloadSucceeded(string installerFile)
     signal downloadFailed(string error)
 
+    onVisibleChanged: showNextTime.forceActiveFocus()
+
     function unit(value)
     {
         let units = ["", "K", "M", "G", "T", "P", "E", "Z", "Y"]
--- webcamoid-9.0.0.orig/StandAlone/share/qml/DownloadFailedDialog.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/DownloadFailedDialog.qml
@@ -34,6 +34,7 @@ Dialog {
     {
         reason.text = error
         open()
+        forceActiveFocus()
     }
 
     ScrollView {
--- webcamoid-9.0.0.orig/StandAlone/share/qml/DownloadSucceededDialog.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/DownloadSucceededDialog.qml
@@ -36,6 +36,7 @@ Dialog {
     {
         installerFile = installer
         open()
+        forceActiveFocus()
     }
 
     ScrollView {
--- webcamoid-9.0.0.orig/StandAlone/share/qml/GeneralConfig.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/GeneralConfig.qml
@@ -66,12 +66,14 @@ Page {
             }
 
             Label {
+                id: txtPlaySources
                 /*: Start playing the webcam and other sources right after
                  *  opening Webcamoid.
                  */
                 text: qsTr("Play sources on start")
             }
             Switch {
+                Accessible.name: txtPlaySources.text
                 checked: videoLayer.playOnStart
                 Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
 
@@ -88,9 +90,11 @@ Page {
             }
 
             Label {
+                id: txtVideoCacture
                 text: qsTr("Video capture")
             }
             ComboBox {
+                Accessible.description: txtVideoCacture.text
                 Layout.fillWidth: true
                 textRole: "description"
                 model: ListModel {
@@ -105,9 +109,11 @@ Page {
                                          model.get(currentIndex).plugin)
             }
             Label {
-                text: qsTr("Desktop capture")
+                id: txtScreenSources
+                text: qsTr("Screen capture")
             }
             ComboBox {
+                Accessible.description: txtScreenSources.text
                 Layout.fillWidth: true
                 textRole: "description"
                 model: ListModel {
@@ -122,9 +128,11 @@ Page {
                                          model.get(currentIndex).plugin)
             }
             Label {
-                text: qsTr("Audio capture/play")
+                id: txtAudioCapturePlayback
+                text: qsTr("Audio capture/playback")
             }
             ComboBox {
+                Accessible.description: txtAudioCapturePlayback.text
                 Layout.fillWidth: true
                 textRole: "description"
                 model: ListModel {
@@ -139,9 +147,11 @@ Page {
                                          model.get(currentIndex).plugin)
             }
             Label {
+                id: txtVideoConvert
                 text: qsTr("Video convert")
             }
             ComboBox {
+                Accessible.description: txtVideoConvert.text
                 Layout.fillWidth: true
                 textRole: "description"
                 model: ListModel {
@@ -156,9 +166,11 @@ Page {
                                          model.get(currentIndex).plugin)
             }
             Label {
+                id: txtVideoPlayback
                 text: qsTr("Video playback")
             }
             ComboBox {
+                Accessible.description: txtVideoPlayback.text
                 Layout.fillWidth: true
                 textRole: "description"
                 model: ListModel {
@@ -173,9 +185,11 @@ Page {
                                          model.get(currentIndex).plugin)
             }
             Label {
+                id: txtVideoRecording
                 text: qsTr("Video record")
             }
             ComboBox {
+                Accessible.description: txtVideoRecording.text
                 Layout.fillWidth: true
                 textRole: "description"
                 model: ListModel {
@@ -190,9 +204,11 @@ Page {
                                          model.get(currentIndex).plugin)
             }
             Label {
+                id: txtVcamDriver
                 text: qsTr("Virtual camera driver")
             }
             ComboBox {
+                Accessible.description: txtVcamDriver.text
                 Layout.fillWidth: true
                 textRole: "description"
                 model: ListModel {
@@ -207,6 +223,7 @@ Page {
                                          model.get(currentIndex).plugin)
             }
             Label {
+                id: txtRootMethod
                 /*: The preferred method for executing commands with elevated
                     privileges in the system.
                  */
@@ -216,6 +233,7 @@ Page {
                 Layout.fillWidth: true
                 model: videoLayer.availableRootMethods
                 currentIndex: model.indexOf(videoLayer.rootMethod)
+                Accessible.description: txtRootMethod.text
 
                 onCurrentIndexChanged: videoLayer.rootMethod = model[currentIndex]
             }
--- webcamoid-9.0.0.orig/StandAlone/share/qml/ImageCapture.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/ImageCapture.qml
@@ -36,10 +36,12 @@ Page {
             columns: 3
 
             Label {
+                id: txtImagesDirectory
                 text: qsTr("Images directory")
             }
             TextField {
                 text: recording.imagesDirectory
+                Accessible.name: txtImagesDirectory.text
                 selectByMouse: true
                 Layout.fillWidth: true
 
@@ -47,6 +49,7 @@ Page {
             }
             Button {
                 text: qsTr("Search")
+                Accessible.description: qsTr("Search directory to save images")
 
                 onClicked: {
                     mediaTools.makedirs(recording.imagesDirectory)
@@ -54,9 +57,11 @@ Page {
                 }
             }
             Label {
+                id: txtFileFormat
                 text: qsTr("File format")
             }
             ComboBox {
+                Accessible.description: txtFileFormat.text
                 textRole: "description"
                 Layout.fillWidth: true
                 Layout.columnSpan: 2
@@ -83,6 +88,7 @@ Page {
                         recording.availableImageFormats[currentIndex]
             }
             Label {
+                id: txtQuality
                 text: qsTr("Quality")
             }
             Slider {
@@ -92,6 +98,7 @@ Page {
                 value: recording.imageSaveQuality
                 stepSize: spbQuality.stepSize
                 Layout.fillWidth: true
+                Accessible.name: txtQuality.text
 
                 onValueChanged: recording.imageSaveQuality = value
             }
@@ -101,6 +108,7 @@ Page {
                 to: 100
                 value: recording.imageSaveQuality
                 stepSize: 1
+                Accessible.name: txtQuality.text
 
                 onValueChanged: recording.imageSaveQuality = value
             }
--- webcamoid-9.0.0.orig/StandAlone/share/qml/OptionList.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/OptionList.qml
@@ -20,48 +20,67 @@
 import QtQuick 2.12
 import QtQuick.Controls 2.5
 
-ListView {
-    id: lsvOptionList
-    implicitWidth: childrenRect.width
-    implicitHeight: childrenRect.height
+Container {
+    id: container
+    implicitWidth: contentItem.childrenRect.width
+    implicitHeight: contentItem.childrenRect.height
+    focusPolicy: Qt.StrongFocus
     clip: true
+    Accessible.name: currentItem? currentItem.text: ""
+    Accessible.role: Accessible.MenuBar
 
-    property string filter: ""
-    property string textRole: ""
+    property bool enableHighlight: true
 
-    function optionValues(index)
-    {
-        if (index < 0 || index >= lsvOptionList.count)
-            return []
-
-        var values = []
-        var option = lstOptions.get(index)
-
-        for (var key in option)
-            if (option[key] && typeof option[key] != "function")
-                values.push(String(option[key]))
+    function setupChildrens() {
+        for (var i in contentChildren) {
+            contentChildren[i].parent = container
 
-        return values
+            if (enableHighlight && contentChildren[i].highlighted != null)
+                contentChildren[i].highlighted = i == currentIndex
+
+            contentChildren[i].width = container.width
+
+            if (contentChildren[i].onClicked != null)
+                contentChildren[i].onClicked.connect((i => () => setCurrentIndex(i))(i))
+
+            onCurrentIndexChanged.connect((i => function () {
+                let item = itemAt(i)
+
+                if (enableHighlight && item && item.highlighted != null)
+                    item.highlighted = i == currentIndex
+            })(i))
+            container.onWidthChanged.connect((i => function () {
+                var obj = itemAt(i)
+
+                if (obj)
+                    obj.width = container.width
+            })(i))
+        }
     }
 
-    model: ListModel {
-        id: lstOptions
+    Keys.onUpPressed: {
+        if (currentIndex <= 0)
+            setCurrentIndex(count - 1)
+        else
+            decrementCurrentIndex()
     }
-    delegate: ItemDelegate {
-        text: index < 0 && index >= lsvOptionList.count?
-                  "":
-              lsvOptionList.textRole?
-                  lsvOptionList.model.get(index)[lsvOptionList.textRole]:
-                  lsvOptionList.model[index]
-        anchors.right: parent.right
-        anchors.left: parent.left
-        visible: mediaTools.matches(filter, optionValues(index))
-        height: visible? implicitHeight: 0
-        highlighted: lsvOptionList.currentItem == this
-
-        onClicked: {
-            lsvOptionList.currentIndex = index
-            lsvOptionList.positionViewAtIndex(index, ListView.Contain)
-        }
+    Keys.onDownPressed: {
+        if (currentIndex >= count - 1)
+            setCurrentIndex(0)
+        else
+            incrementCurrentIndex()
+    }
+
+    Component.onCompleted: setupChildrens()
+    onContentChildrenChanged: setupChildrens()
+    onCurrentItemChanged:
+        if (currentItem)
+            currentItem.forceActiveFocus()
+
+    contentItem: ListView {
+        id: optionList
+        model: container.contentModel
+        snapMode: ListView.SnapOneItem
+        currentIndex: container.currentIndex
     }
 }
--- webcamoid-9.0.0.orig/StandAlone/share/qml/OptionsPanel.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/OptionsPanel.qml
@@ -196,6 +196,7 @@ Pane {
                     AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
             Layout.column: 1
             Layout.row: edge == Qt.TopEdge? 1: 0
+            Accessible.name: qsTr("Close %1 panel").arg(optionsPanel.title)
 
             onClicked: optionsPanel.actionClicked()
         }
--- webcamoid-9.0.0.orig/StandAlone/share/qml/PluginConfig.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/PluginConfig.qml
@@ -46,19 +46,48 @@ Page {
 
             function fillSearchPaths()
             {
-                searchPathsTable.model.clear()
+                for (let i = searchPathsTable.count - 1; i >= 0; i--)
+                    searchPathsTable.removeItem(searchPathsTable.itemAt(i))
+
                 let searchPaths = AkPluginManager.searchPaths
 
                 for (let path in searchPaths) {
-                    searchPathsTable.model.append({
-                        path: searchPaths[path]
+                    let component = Qt.createComponent("PluginsPathItem.qml")
+
+                    if (component.status !== Component.Ready)
+                        continue
+
+                    let obj = component.createObject(searchPathsTable)
+                    obj.text = searchPaths[path]
+                    obj.onPathRemoved.connect(function (item) {
+                        let index = -1
+
+                        for (let i in searchPathsTable.contentChildren)
+                            if (searchPathsTable.contentChildren[i] == item) {
+                                index = i
+
+                                break
+                            }
+
+                        let searchPaths = AkPluginManager.searchPaths
+                        let sp = []
+
+                        for (let i in searchPaths)
+                            if (i != index)
+                                sp.push(searchPaths[i])
+
+                        AkPluginManager.setSearchPaths(sp)
+                        searchPathsTable.removeItem(item)
+                        stack.refreshCache()
                     })
                 }
             }
 
             function fillPluginList()
             {
-                pluginsTable.model.clear()
+                for (let i = pluginsTable.count - 1; i >= 0; i--)
+                    pluginsTable.removeItem(pluginsTable.itemAt(i))
+
                 let plugins = AkPluginManager.listPlugins()
                 plugins.sort(function(a, b) {
                     if (a < b)
@@ -70,10 +99,35 @@ Page {
                 })
 
                 for (let plugin in plugins) {
-                    pluginsTable.model.append({
-                        pluginId: plugins[plugin],
-                        pluginEnabled: AkPluginManager.pluginStatus(plugins[plugin]) == AkPluginManager.Enabled
-                    })
+                    let component = Qt.createComponent("PluginItem.qml")
+
+                    if (component.status !== Component.Ready)
+                        continue
+
+                    let obj = component.createObject(pluginsTable)
+                    obj.text = plugins[plugin]
+                    obj.pluginId = plugins[plugin]
+                    obj.checked = AkPluginManager.pluginStatus(plugins[plugin]) == AkPluginManager.Enabled
+
+                    obj.onToggled.connect((item => function () {
+                        let disabledPlugins =
+                            AkPluginManager.listPlugins("",
+                                                        [],
+                                                        AkPluginManager.FilterDisabled)
+
+                        if (item.checked) {
+                            let index = disabledPlugins.indexOf(item.pluginId)
+
+                            if (index >= 0)
+                                disabledPlugins.splice(index, 1)
+                        } else {
+                            disabledPlugins.push(item.pluginId)
+                        }
+
+                        AkPluginManager.setPluginStatus(disabledPlugins,
+                                                        AkPluginManager.Disabled)
+                        pluginConfigs.saveProperties()
+                    })(obj))
                 }
             }
 
@@ -122,62 +176,23 @@ Page {
 
                         onClicked: fileDialog.open()
                     }
-                    ListView {
+                    OptionList {
                         id: searchPathsTable
+                        enableHighlight: false
                         Layout.fillWidth: true
-                        implicitWidth: childrenRect.width
-                        implicitHeight: childrenRect.height
                         clip: true
 
-                        model: ListModel {
-                            id: searchPathsModel
-                        }
-                        delegate: SwipeDelegate {
-                            id: swipeDelegate
-                            text: path
-                            anchors.right: parent.right
-                            anchors.left: parent.left
-
-                            ListView.onRemove: SequentialAnimation {
-                                PropertyAction {
-                                    target: swipeDelegate
-                                    property: "ListView.delayRemove"
-                                    value: true
-                                }
-                                NumberAnimation {
-                                    target: swipeDelegate
-                                    property: "height"
-                                    to: 0
-                                    easing.type: Easing.InOutQuad
-                                }
-                                PropertyAction {
-                                    target: swipeDelegate
-                                    property: "ListView.delayRemove"
-                                    value: false
-                                }
-                            }
-
-                            swipe.right: Button {
-                                id: deleteLabel
-                                text: qsTr("Remove")
-                                flat: true
-                                height: parent.height
-                                anchors.right: parent.right
-
-                                onClicked: {
-                                    let searchPaths = AkPluginManager.searchPaths();
-                                    let sp = []
-
-                                    for (let path in searchPaths)
-                                        if (path != index)
-                                            sp.push(searchPaths[path])
-
-                                    AkPluginManager.setSearchPaths(sp)
-                                    searchPathsModel.remove(index)
-                                    stack.refreshCache()
-                                }
-                            }
-                        }
+                        onActiveFocusChanged:
+                            if (activeFocus && count > 0)
+                                itemAt(currentIndex).forceActiveFocus()
+                        Keys.onUpPressed:
+                            itemAt(currentIndex).forceActiveFocus()
+                        Keys.onDownPressed:
+                            itemAt(currentIndex).forceActiveFocus()
+                        Keys.onLeftPressed:
+                            itemAt(currentIndex).swipe.open(SwipeDelegate.Right)
+                        Keys.onRightPressed:
+                            itemAt(currentIndex).swipe.close()
                     }
                 }
             }
@@ -194,47 +209,25 @@ Page {
 
                     Button {
                         text: qsTr("Update")
+                        Accessible.description: qsTr("Update plugins list")
                         icon.source: "image://icons/reset"
                         flat: true
 
                         onClicked: stack.refreshCache()
                     }
-                    ListView {
+                    OptionList {
                         id: pluginsTable
+                        enableHighlight: false
                         Layout.fillWidth: true
-                        implicitWidth: childrenRect.width
-                        implicitHeight: childrenRect.height
                         clip: true
 
-                        model: ListModel {
-                            id: pluginsModel
-                        }
-
-                        delegate: CheckDelegate {
-                            text: pluginId
-                            width: pluginsScrollView.width
-                            checked: pluginEnabled
-
-                            onToggled: {
-                                let disabledPlugins =
-                                    AkPluginManager.listPlugins("",
-                                                                [],
-                                                                AkPluginManager.FilterDisabled)
-
-                                if (checked) {
-                                    let index = disabledPlugins.indexOf(pluginId)
-
-                                    if (index >= 0)
-                                        disabledPlugins.splice(index, 1)
-                                } else {
-                                    disabledPlugins.push(pluginId)
-                                }
-
-                                AkPluginManager.setPluginStatus(disabledPlugins,
-                                                                   AkPluginManager.Disabled)
-                                pluginConfigs.saveProperties()
-                            }
-                        }
+                        onActiveFocusChanged:
+                            if (activeFocus && count > 0)
+                                itemAt(currentIndex).forceActiveFocus()
+                        Keys.onUpPressed:
+                            itemAt(currentIndex).forceActiveFocus()
+                        Keys.onDownPressed:
+                            itemAt(currentIndex).forceActiveFocus()
                     }
                 }
             }
--- /dev/null
+++ webcamoid-9.0.0/StandAlone/share/qml/PluginItem.qml
@@ -0,0 +1,29 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+import QtQuick 2.12
+import QtQuick.Controls 2.5
+
+CheckDelegate {
+    Accessible.name: text
+    Accessible.role: Accessible.CheckBox
+    Accessible.checked: checked
+
+    property string pluginId: ""
+}
--- /dev/null
+++ webcamoid-9.0.0/StandAlone/share/qml/PluginsPathItem.qml
@@ -0,0 +1,59 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+import QtQuick 2.12
+import QtQuick.Controls 2.5
+import Ak 1.0
+
+SwipeDelegate {
+    id: swipeDelegate
+    Accessible.name: text
+    Accessible.role: Accessible.MenuItem
+
+    signal pathRemoved(variant item)
+
+    ListView.onRemove: SequentialAnimation {
+        PropertyAction {
+            target: swipeDelegate
+            property: "ListView.delayRemove"
+            value: true
+        }
+        NumberAnimation {
+            target: swipeDelegate
+            property: "height"
+            to: 0
+            easing.type: Easing.InOutQuad
+        }
+        PropertyAction {
+            target: swipeDelegate
+            property: "ListView.delayRemove"
+            value: false
+        }
+    }
+
+    swipe.right: Button {
+        id: deleteLabel
+        text: qsTr("Remove")
+        flat: true
+        height: parent.height
+        anchors.right: parent.right
+
+        onClicked: swipeDelegate.pathRemoved(swipeDelegate)
+    }
+}
--- webcamoid-9.0.0.orig/StandAlone/share/qml/SettingsDialog.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/SettingsDialog.qml
@@ -41,10 +41,6 @@ Dialog {
     readonly property color activeDark: AkTheme.palette.active.dark
     readonly property color disabledDark: AkTheme.palette.disabled.dark
 
-    signal openVideoFormatDialog()
-    signal openVideoCodecDialog()
-    signal openAudioCodecDialog()
-
     onWidthChanged: {
         if (settingsDialog.visible)
             optionsItem.implicitWidth =
@@ -52,6 +48,7 @@ Dialog {
                                       optionsItem.implicitWidth),
                              settingsDialog.maximumWidth)
     }
+    onVisibleChanged: options.forceActiveFocus()
 
     RowLayout {
         anchors.fill: parent
@@ -72,13 +69,21 @@ Dialog {
                     id: options
                     width: optionsView.width
 
-                    model: [
-                        qsTr("Image Capture"),
-                        qsTr("Video Recording"),
-                        qsTr("General Options"),
-                        qsTr("Plugins"),
-                        qsTr("Updates")
-                    ]
+                    ItemDelegate {
+                        text: qsTr("Image Capture")
+                    }
+                    ItemDelegate {
+                        text: qsTr("Video Recording")
+                    }
+                    ItemDelegate {
+                        text: qsTr("General Options")
+                    }
+                    ItemDelegate {
+                        text: qsTr("Plugins")
+                    }
+                    ItemDelegate {
+                        text: qsTr("Updates")
+                    }
                 }
             }
             Rectangle {
@@ -115,11 +120,7 @@ Dialog {
             Layout.fillHeight: true
 
             ImageCapture { }
-            VideoRecording {
-                onOpenVideoFormatDialog: settingsDialog.openVideoFormatDialog()
-                onOpenVideoCodecDialog: settingsDialog.openVideoCodecDialog()
-                onOpenAudioCodecDialog: settingsDialog.openAudioCodecDialog()
-            }
+            VideoRecording {}
             GeneralConfig { }
             PluginConfig { }
             UpdatesConfig { }
--- webcamoid-9.0.0.orig/StandAlone/share/qml/SettingsMenu.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/SettingsMenu.qml
@@ -70,6 +70,7 @@ Menu {
     SwitchDelegate {
         text: qsTr("Play sources")
         checked: videoLayer.state == AkElement.ElementStatePlaying
+        focusPolicy: Qt.StrongFocus
 
         onToggled: {
             if (checked) {
--- webcamoid-9.0.0.orig/StandAlone/share/qml/ThirdPartyLicenses.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/ThirdPartyLicenses.qml
@@ -37,11 +37,13 @@ Page {
                 text: "The followings are the Licenses for 3rd-party work incorporated into Webcamoid. <b>These Licenses DOES NOT applies to Webcamoid itself.</b>"
                 wrapMode: Text.WordWrap
                 Layout.fillWidth: true
+                Layout.maximumWidth: parent.width
             }
             Label {
                 text: "License for resources taken from openclipart.org:"
                 wrapMode: Text.WordWrap
                 Layout.fillWidth: true
+                Layout.maximumWidth: parent.width
             }
             TextArea {
                 text: mediaTools.readFile(":/Webcamoid/share/3rd-party/licenses/openclipart.txt")
@@ -52,6 +54,7 @@ Page {
                 text: "License for code taken from OpenCV:"
                 wrapMode: Text.WordWrap
                 Layout.fillWidth: true
+                Layout.maximumWidth: parent.width
             }
             TextArea {
                 text: mediaTools.readFile(":/Webcamoid/share/3rd-party/licenses/OpenCV.txt")
@@ -62,6 +65,7 @@ Page {
                 text: "License for code and algorithms used in Temperature plugin:"
                 wrapMode: Text.WordWrap
                 Layout.fillWidth: true
+                Layout.maximumWidth: parent.width
             }
             TextArea {
                 text: mediaTools.readFile(":/Webcamoid/share/3rd-party/licenses/TemperatureAlgorithm.txt")
@@ -72,6 +76,7 @@ Page {
                 text: "License for the usb.ids file:"
                 wrapMode: Text.WordWrap
                 Layout.fillWidth: true
+                Layout.maximumWidth: parent.width
             }
             TextArea {
                 text: mediaTools.readFile(":/Webcamoid/share/3rd-party/licenses/UsbIds.txt")
--- webcamoid-9.0.0.orig/StandAlone/share/qml/UpdatesConfig.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/UpdatesConfig.qml
@@ -80,28 +80,34 @@ Page {
             }
 
             Label {
+                id: txtNotifyNewVersions
                 text: qsTr("Notify about new versions")
             }
             Switch {
                 id: newVersion
+                Accessible.name: txtNotifyNewVersions.text
                 checked: true
                 Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
 
                 onCheckedChanged: updates.notifyNewVersion = checked
             }
             Label {
+                id: txtShowUpdatesDialog
                 text: qsTr("Show updates dialog")
             }
             Switch {
                 id: showUpdatesDialog
+                Accessible.name: txtShowUpdatesDialog.text
                 checked: true
                 Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
             }
             Label {
+                id: txtCheckNewVersions
                 text: qsTr("Check new versions")
             }
             ComboBox {
                 id: cbxCheckInterval
+                Accessible.description: txtCheckNewVersions.text
                 Layout.fillWidth: true
                 textRole: "description"
                 model: ListModel {
--- webcamoid-9.0.0.orig/StandAlone/share/qml/UpdatesDialog.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/UpdatesDialog.qml
@@ -46,6 +46,7 @@ Dialog {
 
     Component.onCompleted: notifyUpdate()
     onWebcamoidLatestVersionChanged: notifyUpdate()
+    onVisibleChanged: forceActiveFocus()
 
     Connections {
         target: updates
--- webcamoid-9.0.0.orig/StandAlone/share/qml/VCamInstallFailedDialog.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/VCamInstallFailedDialog.qml
@@ -30,6 +30,8 @@ Dialog {
     modal: true
     title: qsTr("Installation failed")
 
+    onVisibleChanged: forceActiveFocus()
+
     function openWithError(error)
     {
         reason.text = error
--- webcamoid-9.0.0.orig/StandAlone/share/qml/VCamInstallSucceededDialog.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/VCamInstallSucceededDialog.qml
@@ -30,6 +30,8 @@ Dialog {
     modal: true
     title: qsTr("Installation succeeded")
 
+    onVisibleChanged: forceActiveFocus()
+
     ScrollView {
         id: view
         anchors.fill: parent
--- webcamoid-9.0.0.orig/StandAlone/share/qml/VCamManualDownloadDialog.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/VCamManualDownloadDialog.qml
@@ -30,6 +30,8 @@ Dialog {
     modal: true
     title: qsTr("Can't get latest version")
 
+    onVisibleChanged: forceActiveFocus()
+
     ScrollView {
         id: view
         anchors.fill: parent
--- webcamoid-9.0.0.orig/StandAlone/share/qml/VideoCodecOptions.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/VideoCodecOptions.qml
@@ -33,6 +33,8 @@ Dialog {
     property variant controlValues: ({})
     property int startChildren: 4
 
+    onVisibleChanged: bitrate.forceActiveFocus()
+
     function updateOptions() {
         for (let i = mainLayout.children.length - 1; i >= startChildren; i--)
             mainLayout.children[i].destroy()
@@ -164,11 +166,13 @@ Dialog {
             width: scrollView.width
 
             Label {
+                id: txtBitrate
                 text: qsTr("Bitrate")
             }
             TextField {
                 id: bitrate
                 placeholderText: qsTr("Bitrate (bits/secs)")
+                Accessible.name: txtBitrate.text
                 selectByMouse: true
                 validator: RegExpValidator {
                     regExp: /\d+/
@@ -179,11 +183,13 @@ Dialog {
                     text = recording.videoCodecParams.bitrate
             }
             Label {
+                id: txtGOP
                 text: qsTr("Keyframes stride")
             }
             TextField {
                 id: videoGOP
                 placeholderText: qsTr("Keyframes stride")
+                Accessible.name: txtGOP.text
                 selectByMouse: true
                 validator: RegExpValidator {
                     regExp: /\d+/
@@ -249,6 +255,7 @@ Dialog {
         TextField {
             selectByMouse: true
             Layout.fillWidth: true
+            Accessible.name: key
 
             property string key: ""
             property variant defaultValue: null
@@ -280,6 +287,7 @@ Dialog {
                 regExp: /-?\d+\/\d+/
             }
             Layout.fillWidth: true
+            Accessible.name: key
 
             property string key: ""
             property variant defaultValue: null
@@ -338,6 +346,7 @@ Dialog {
                 to: parent.to
                 stepSize: parent.stepSize
                 Layout.fillWidth: true
+                Accessible.name: rangeLayout.key
 
                 onValueChanged: {
                     spbRange.value = spbRange.multiplier * value
@@ -355,6 +364,7 @@ Dialog {
                     bottom: Math.min(spbRange.from, spbRange.to)
                     top:  Math.max(spbRange.from, spbRange.to)
                 }
+                Accessible.name: rangeLayout.key
 
                 readonly property int decimals: parent.stepSize < 1? 2: 0
                 readonly property int multiplier: Math.pow(10, decimals)
@@ -378,6 +388,7 @@ Dialog {
                 regExp: /[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?/
             }
             Layout.fillWidth: true
+            Accessible.name: key
 
             property string key: ""
             property variant defaultValue: null
@@ -405,6 +416,7 @@ Dialog {
 
         Switch {
             Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
+            Accessible.name: key
 
             property string key: ""
             property variant defaultValue: null
@@ -431,6 +443,7 @@ Dialog {
         id: controlMenu
 
         ComboBox {
+            Accessible.description: key
             model: ListModel {
             }
             textRole: "description"
@@ -513,6 +526,7 @@ Dialog {
         GroupBox {
             Layout.columnSpan: 2
             Layout.fillWidth: true
+            Accessible.name: key
 
             property string key: ""
             property variant defaultValue: null
--- /dev/null
+++ webcamoid-9.0.0/StandAlone/share/qml/VideoDeviceItem.qml
@@ -0,0 +1,28 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+import QtQuick 2.12
+import QtQuick.Controls 2.5
+
+ItemDelegate {
+    Accessible.name: text
+    Accessible.role: Accessible.MenuItem
+
+    property string device: ""
+}
--- /dev/null
+++ webcamoid-9.0.0/StandAlone/share/qml/VideoEffectItem.qml
@@ -0,0 +1,28 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+import QtQuick 2.12
+import QtQuick.Controls 2.5
+
+ItemDelegate {
+    Accessible.name: text
+    Accessible.role: Accessible.MenuItem
+
+    property string effect: ""
+}
--- webcamoid-9.0.0.orig/StandAlone/share/qml/VideoEffectOptions.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/VideoEffectOptions.qml
@@ -33,7 +33,7 @@ ScrollView {
 
     function description(effectIndex)
     {
-        if (effectIndex < 0 || effectIndex >= videoEffects.effects.lenght)
+        if (effectIndex < 0 || effectIndex >= videoEffects.effects.length)
             return ""
 
         let effect = videoEffects.effects[effectIndex]
@@ -55,6 +55,7 @@ ScrollView {
             flat: true
             Layout.leftMargin: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
             Layout.rightMargin: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+            Accessible.description: qsTr("Remove %1 video effect").arg(view.effectDescription)
 
             onClicked: {
                 videoEffects.removeInterface("itmEffectControls")
@@ -74,7 +75,7 @@ ScrollView {
     onEffectIndexChanged: {
         videoEffects.removeInterface("itmEffectControls")
 
-        if (effectIndex < 0 || effectIndex >= videoEffects.effects.lenght)
+        if (effectIndex < 0 || effectIndex >= videoEffects.effects.length)
             return
 
         videoEffects.embedControls("itmEffectControls", effectIndex)
--- webcamoid-9.0.0.orig/StandAlone/share/qml/VideoEffectsDialog.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/VideoEffectsDialog.qml
@@ -51,6 +51,24 @@ Dialog {
                              videoEffectsDialog.maximumWidth)
     }
 
+    Connections {
+        target: mediaTools
+
+        function onInterfaceLoaded()
+        {
+            videoEffects.setPreview("")
+        }
+    }
+
+    Connections {
+        target: videoEffects
+
+        function onAvailableEffectsChanged()
+        {
+            options.update()
+        }
+    }
+
     RowLayout {
         anchors.fill: parent
 
@@ -67,6 +85,7 @@ Dialog {
                 TextField {
                     id: searchEffect
                     placeholderText: qsTr("Search effect")
+                    Accessible.description: qsTr("Search video effect")
                     selectByMouse: true
                     Layout.fillWidth: true
                 }
@@ -80,22 +99,37 @@ Dialog {
                     OptionList {
                         id: options
                         width: optionsView.width
-                        textRole: "description"
-                        filter: searchEffect.text
 
                         function update() {
                             var effects = videoEffects.availableEffects
-                            model.clear()
+
+                            for (let i = count - 1; i >= 0; i--)
+                                removeItem(itemAt(i))
 
                             for (let effect in effects) {
+                                let component = Qt.createComponent("VideoEffectItem.qml")
+
+                                if (component.status !== Component.Ready)
+                                    continue
+
+                                let obj = component.createObject(options)
                                 let effectInfo =
                                     AkPluginInfo.create(videoEffects.effectInfo(effects[effect]))
-                                model.append({
-                                    effect: effects[effect],
-                                    description: effectInfo.description})
+                                obj.text = effectInfo.description
+                                obj.effect = effects[effect]
+
+                                obj.Keys.onSpacePressed.connect(() => videoEffectsDialog.accept())
+                                searchEffect.onTextChanged.connect((i => function () {
+                                    var obj = itemAt(i)
+                                    obj.visible =
+                                            mediaTools.matches(searchEffect.text,
+                                                               [obj.text, obj.effect])
+                                    obj.height = obj.visible?
+                                                 obj.implicitHeight: 0
+                                })(effect))
                             }
 
-                            currentIndex = count > 0? 0: -1
+                            setCurrentIndex(count > 0? 0: -1)
                         }
 
                         function updatePreview() {
@@ -108,7 +142,7 @@ Dialog {
                             let index =
                                 Math.min(Math.max(0, currentIndex), count - 1)
 
-                            var option = model.get(currentIndex)
+                            var option = itemAt(currentIndex)
 
                             if (option)
                                 videoEffects.setPreview(option.effect)
@@ -116,24 +150,6 @@ Dialog {
                                 videoEffects.setPreview("")
                         }
 
-                        Connections {
-                            target: mediaTools
-
-                            function onInterfaceLoaded()
-                            {
-                                videoEffects.setPreview("")
-                            }
-                        }
-
-                        Connections {
-                            target: videoEffects
-
-                            function onAvailableEffectsChanged()
-                            {
-                                options.update()
-                            }
-                        }
-
                         onCurrentIndexChanged: {
                             updatePreview()
                             searchEffect.text = ""
@@ -195,10 +211,12 @@ Dialog {
     }
 
     onVisibleChanged: {
-        if (visible)
+        if (visible) {
             options.updatePreview()
-        else
+            options.forceActiveFocus()
+        } else {
             videoEffects.setPreview("")
+        }
     }
     onAccepted: videoEffects.applyPreview()
     onRejected: videoEffects.setPreview("")
--- webcamoid-9.0.0.orig/StandAlone/share/qml/VideoEffectsList.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/VideoEffectsList.qml
@@ -28,6 +28,18 @@ ScrollView {
     signal openVideoEffectsDialog()
     signal openVideoEffectOptions(int effectIndex)
 
+    Component.onCompleted: effectsList.update()
+    onVisibleChanged: effectsList.forceActiveFocus()
+
+    Connections {
+        target: videoEffects
+
+        function onEffectsChanged()
+        {
+            effectsList.update()
+        }
+    }
+
     ColumnLayout {
         width: effectsView.width
 
@@ -45,54 +57,43 @@ ScrollView {
 
             onClicked: videoEffects.removeAllEffects()
         }
-        ListView {
+        OptionList {
             id: effectsList
-            model: ListModel {}
-            implicitWidth: childrenRect.width
-            implicitHeight: childrenRect.height
+            enableHighlight: false
             Layout.fillWidth: true
-            Layout.fillHeight: true
 
-            function updateEffectList() {
+            function update() {
                 let effects = videoEffects.effects
-                model.clear()
 
-                for (let i = effects.length - 1; i >= 0; i--) {
-                    let effect = effects[i]
-                    let info = AkPluginInfo.create(videoEffects.effectInfo(effect))
+                for (let i = count - 1; i >= 0; i--)
+                    removeItem(itemAt(i))
 
-                    model.append({
-                        effect: effect,
-                        description: info.description})
-                }
-            }
-
-            delegate: ItemDelegate {
-                text: index < 0 && index >= effectsList.count?
-                          "":
-                      effectsList.model.get(index)?
-                          effectsList.model.get(index)["description"]:
-                          ""
-                anchors.right: parent.right
-                anchors.left: parent.left
-                height: implicitHeight
-
-                onClicked:
-                    effectsView.openVideoEffectOptions(effectsList.count
-                                                       - index
-                                                       - 1)
-            }
+                for (let i = effects.length - 1; i >= 0; i--) {
+                    let component = Qt.createComponent("VideoEffectItem.qml")
 
-            Connections {
-                target: videoEffects
+                    if (component.status !== Component.Ready)
+                        continue
 
-                function onEffectsChanged()
-                {
-                    effectsList.updateEffectList()
+                    let obj = component.createObject(effectsList)
+                    let info = AkPluginInfo.create(videoEffects.effectInfo(effects[i]))
+                    obj.text = info.description
+                    obj.effect = effects[i]
+
+                    obj.onClicked.connect((index => function () {
+                        effectsView.openVideoEffectOptions(index)
+                    })(i))
                 }
             }
 
-            Component.onCompleted: effectsList.updateEffectList()
+            onActiveFocusChanged:
+                if (activeFocus && count > 0)
+                    itemAt(currentIndex).forceActiveFocus()
+            Keys.onUpPressed:
+                if (count > 0)
+                    itemAt(currentIndex).forceActiveFocus()
+            Keys.onDownPressed:
+                if (count > 0)
+                    itemAt(currentIndex).forceActiveFocus()
         }
     }
 }
--- /dev/null
+++ webcamoid-9.0.0/StandAlone/share/qml/VideoFormatItem.qml
@@ -0,0 +1,31 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+import QtQuick 2.12
+import QtQuick.Controls 2.5
+
+ItemDelegate {
+    Accessible.name: text
+    Accessible.role: Accessible.MenuItem
+
+    property int format: 0
+    property int formatWidth: 0
+    property int formatHeight: 0
+    property int fps: 0
+}
--- webcamoid-9.0.0.orig/StandAlone/share/qml/VideoFormatOptions.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/VideoFormatOptions.qml
@@ -33,6 +33,8 @@ Dialog {
     property variant controlValues: ({})
     property int startChildren: 2
 
+    onVisibleChanged: cbxVideoFormatExtension.forceActiveFocus()
+
     function updateOptions() {
         for (let i = mainLayout.children.length - 1; i >= startChildren; i--)
             mainLayout.children[i].destroy()
@@ -166,11 +168,13 @@ Dialog {
             width: scrollView.width
 
             Label {
+                id: txtFileExtension
                 text: qsTr("File extension")
             }
             ComboBox {
                 id: cbxVideoFormatExtension
                 Layout.fillWidth: true
+                Accessible.description: txtFileExtension.text
 
                 Component.onCompleted: {
                     model = recording.availableVideoFormatExtensions
@@ -222,6 +226,7 @@ Dialog {
         TextField {
             selectByMouse: true
             Layout.fillWidth: true
+            Accessible.name: key
 
             property string key: ""
             property variant defaultValue: null
@@ -253,6 +258,7 @@ Dialog {
                 regExp: /-?\d+\/\d+/
             }
             Layout.fillWidth: true
+            Accessible.name: key
 
             property string key: ""
             property variant defaultValue: null
@@ -311,6 +317,7 @@ Dialog {
                 to: parent.to
                 stepSize: parent.stepSize
                 Layout.fillWidth: true
+                Accessible.name: rangeLayout.key
 
                 onValueChanged: {
                     spbRange.value = spbRange.multiplier * value
@@ -324,6 +331,7 @@ Dialog {
                 to: multiplier * parent.to
                 stepSize: multiplier * parent.stepSize
                 editable: true
+                Accessible.name: rangeLayout.key
                 validator: DoubleValidator {
                     bottom: Math.min(spbRange.from, spbRange.to)
                     top:  Math.max(spbRange.from, spbRange.to)
@@ -351,6 +359,7 @@ Dialog {
                 regExp: /[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?/
             }
             Layout.fillWidth: true
+            Accessible.name: key
 
             property string key: ""
             property variant defaultValue: null
@@ -378,6 +387,7 @@ Dialog {
 
         Switch {
             Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
+            Accessible.name: key
 
             property string key: ""
             property variant defaultValue: null
@@ -404,6 +414,7 @@ Dialog {
         id: controlMenu
 
         ComboBox {
+            Accessible.description: key
             model: ListModel {
             }
             textRole: "description"
@@ -486,6 +497,7 @@ Dialog {
         GroupBox {
             Layout.columnSpan: 2
             Layout.fillWidth: true
+            Accessible.name: key
 
             property string key: ""
             property variant defaultValue: null
--- webcamoid-9.0.0.orig/StandAlone/share/qml/VideoInputAddEdit.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/VideoInputAddEdit.qml
@@ -34,6 +34,8 @@ Dialog {
 
     signal edited()
 
+    onVisibleChanged: tabBar.currentItem.forceActiveFocus()
+
     function isFile(url)
     {
         if (RegExp("^file://", "gi").test(url))
@@ -105,6 +107,7 @@ Dialog {
                     width: fileScrollView.width
 
                     Label {
+                        id: txtDescriptionFile
                         text: qsTr("Description")
                         font.bold: true
                         Layout.fillWidth: true
@@ -112,6 +115,7 @@ Dialog {
                     TextField {
                         id: fileDescription
                         placeholderText: qsTr("Source title")
+                        Accessible.name: txtDescriptionFile.text
                         text: addEdit.editMode?
                                   videoLayer.description(videoLayer.videoInput):
                                   ""
@@ -119,6 +123,7 @@ Dialog {
                         Layout.fillWidth: true
                     }
                     Label {
+                        id: txtPath
                         text: qsTr("Path")
                         font.bold: true
                         Layout.fillWidth: true
@@ -127,6 +132,7 @@ Dialog {
                         TextField {
                             id: filePath
                             placeholderText: qsTr("File path")
+                            Accessible.name: txtPath.text
                             text: addEdit.editMode? videoLayer.videoInput: ""
                             selectByMouse: true
                             Layout.fillWidth: true
@@ -134,6 +140,7 @@ Dialog {
 
                         Button {
                             text: qsTr("Search")
+                            Accessible.description: qsTr("Search file to use as source")
                             icon.source: "image://icons/search"
 
                             onClicked: fileDialog.open()
@@ -153,6 +160,7 @@ Dialog {
                     width: urlScrollView.width
 
                     Label {
+                        id: txtDescriptionUrl
                         text: qsTr("Description")
                         font.bold: true
                         Layout.fillWidth: true
@@ -160,6 +168,7 @@ Dialog {
                     TextField {
                         id: urlDescription
                         placeholderText: qsTr("Source title")
+                        Accessible.name: txtDescriptionUrl.text
                         text: addEdit.editMode?
                                   videoLayer.description(videoLayer.videoInput):
                                   ""
@@ -167,6 +176,7 @@ Dialog {
                         Layout.fillWidth: true
                     }
                     Label {
+                        id: txtUrl
                         text: qsTr("URL")
                         font.bold: true
                         Layout.fillWidth: true
@@ -174,6 +184,7 @@ Dialog {
                     TextField {
                         id: urlPath
                         placeholderText: "https://example-site.com/video.webm"
+                        Accessible.name: txtUrl.text
                         text: addEdit.editMode? videoLayer.videoInput: ""
                         selectByMouse: true
                         Layout.fillWidth: true
@@ -215,27 +226,7 @@ Dialog {
         title: qsTr("Choose the file to add as source")
         fileMode: LABS.FileDialog.OpenFile
         selectedNameFilter.index: 0
-        nameFilters: [qsTr("All Video Files")
-                      + " (*.3gp *.avi *.flv *.gif *.mkv *.mng  *.mov *.mp4"
-                      + " *.m4v *.mpg *.mpeg *.ogg *.rm *.vob *.webm *.wmv)",
-                      qsTr("3GP Video") + " (*.3gp)",
-                      qsTr("AVI Video") + " (*.avi)",
-                      //: Adobe FLV Flash video
-                      qsTr("Flash Video") + " (*.flv)",
-                      qsTr("Animated GIF") + " (*.gif)",
-                      qsTr("MKV Video") + " (*.mkv)",
-                      qsTr("Animated PNG") + " (*.mng)",
-                      qsTr("QuickTime Video") + " (*.mov)",
-                      qsTr("MP4 Video") + " (*.mp4 *.m4v)",
-                      qsTr("MPEG Video") + " (*.mpg *.mpeg)",
-                      qsTr("Ogg Video") + " (*.ogg)",
-                      //: Don't translate "RealMedia", leave it as is.
-                      qsTr("RealMedia Video") + " (*.rm)",
-                      qsTr("DVD Video") + " (*.vob)",
-                      qsTr("WebM Video") + " (*.webm)",
-                      //: Also known as WMV, is a video file format.
-                      qsTr("Windows Media Video") + " (*.wmv)",
-                      qsTr("All Files") + " (*)"]
+        nameFilters: videoLayer.videoSourceFileFilters
 
         onAccepted: {
             filePath.text = mediaTools.urlToLocalFile(fileDialog.file)
--- webcamoid-9.0.0.orig/StandAlone/share/qml/VideoInputOptions.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/VideoInputOptions.qml
@@ -27,6 +27,7 @@ ScrollView {
     id: view
 
     property string videoInput: ""
+    property int inputType: videoLayer.deviceType(videoInput)
 
     signal openVideoInputAddEditDialog(string videoInput)
     signal videoInputRemoved()
@@ -64,7 +65,8 @@ ScrollView {
                 AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
             Layout.rightMargin:
                 AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
-            visible: videoLayer.deviceType(view.videoInput) == VideoLayer.InputStream
+            visible: view.inputType == VideoLayer.InputStream
+                     || view.inputType == VideoLayer.InputImage
 
             onClicked: view.openVideoInputAddEditDialog(view.videoInput)
         }
@@ -76,7 +78,8 @@ ScrollView {
                 AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
             Layout.rightMargin:
                 AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
-            visible: videoLayer.deviceType(view.videoInput) == VideoLayer.InputStream
+            visible: view.inputType == VideoLayer.InputStream
+                     || view.inputType == VideoLayer.InputImage
 
             onClicked: {
                 videoLayer.removeInterface("itmVideoInputOptions")
--- webcamoid-9.0.0.orig/StandAlone/share/qml/VideoInputs.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/VideoInputs.qml
@@ -31,15 +31,16 @@ ScrollView {
 
     Component.onCompleted: {
         lblNoWebcams.updateVisibility()
-        devicesList.updateDevices()
+        devicesList.update()
     }
+    onVisibleChanged: devicesList.forceActiveFocus()
 
     Connections {
         target: videoLayer
 
         function onInputsChanged()
         {
-            devicesList.updateDevices()
+            devicesList.update()
         }
 
         function onVideoInputChanged()
@@ -53,6 +54,14 @@ ScrollView {
         clip: true
 
         Button {
+            text: qsTr("Configure source")
+            icon.source: "image://icons/settings"
+            flat: true
+            visible: devicesList.count > 0
+
+            onClicked: view.openVideoInputOptions(videoLayer.videoInput)
+        }
+        Button {
             text: qsTr("Add source")
             icon.source: "image://icons/add"
             flat: true
@@ -74,26 +83,17 @@ ScrollView {
                 visible = videoLayer.devicesByType(VideoLayer.InputCamera).length < 1
             }
         }
-        ListView {
+        OptionList {
             id: devicesList
-            model: ListModel {}
-            implicitWidth: childrenRect.width
-            implicitHeight: childrenRect.height
             Layout.fillWidth: true
-            Layout.fillHeight: true
 
-            function updateDevices() {
-                let devices = videoLayer.inputs
-                model.clear()
+            property bool updating: false
 
-                for (let i in devices) {
-                    let device = devices[i]
-                    let description = videoLayer.description(device)
+            function update() {
+                let devices = videoLayer.inputs
 
-                    model.append({
-                        device: device,
-                        description: description})
-                }
+                for (let i = count - 1; i >= 0; i--)
+                    removeItem(itemAt(i))
 
                 let index = devices.indexOf(videoLayer.videoInput)
 
@@ -104,52 +104,29 @@ ScrollView {
                         index = 1
                 }
 
-                currentIndex = index
-            }
+                updating = true
+
+                for (let i in devices) {
+                    let component = Qt.createComponent("VideoDeviceItem.qml")
+
+                    if (component.status !== Component.Ready)
+                        continue
 
-            delegate: ItemDelegate {
-                text: index < 0 && index >= devicesList.count?
-                          "":
-                      devicesList.model.get(index)?
-                          devicesList.model.get(index)["description"]:
-                          ""
-                anchors.right: parent.right
-                anchors.left: parent.left
-                height: implicitHeight
-                highlighted: devicesList.currentItem == this
-
-                onClicked: {
-                    if (devicesList.currentIndex == index) {
-                        if (index < 0)
-                            return
-
-                        let deviceElement = devicesList.model.get(index)
-
-                        if (!deviceElement)
-                            return
-
-                        let device = deviceElement["device"]
-
-                        if (!device)
-                            return
-
-                        view.openVideoInputOptions(device)
-                    } else {
-                        let deviceElement = devicesList.model.get(index)
-
-                        if (!deviceElement)
-                            return
-
-                        let device = deviceElement["device"]
-
-                        if (!device)
-                            return
-
-                        videoLayer.videoInput = device
-                        devicesList.currentIndex = index
-                    }
+                    let obj = component.createObject(devicesList)
+                    obj.text = videoLayer.description(devices[i])
+                    obj.device = devices[i]
+                    obj.highlighted = i == index
+
+                    obj.Keys.onSpacePressed.connect(() => view.openVideoInputOptions(videoLayer.videoInput))
                 }
+
+                updating = false
+                setCurrentIndex(index)
             }
+
+            onCurrentIndexChanged:
+                if (!updating && itemAt(currentIndex))
+                    videoLayer.videoInput = itemAt(currentIndex).device
         }
     }
 }
--- webcamoid-9.0.0.orig/StandAlone/share/qml/VideoOutputAddEdit.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/VideoOutputAddEdit.qml
@@ -36,37 +36,57 @@ Dialog {
 
     function addFormat(caps)
     {
+        let component = Qt.createComponent("VideoFormatItem.qml")
+
+        if (component.status !== Component.Ready)
+            return
+
+        let obj = component.createObject(vcamFormats)
         let format = AkVideoCaps.pixelFormatToString(caps.format)
         let fps = AkFrac.create(caps.fps)
-        let description = format
-                        + " " + caps.width + "x" + caps.height
-                        + " " + fps.value + " FPS"
-        vcamFormats.model.append({format: caps.format,
-                                  width: caps.width,
-                                  height: caps.height,
-                                  fps: fps.value,
-                                  description: description})
+        obj.text =
+            format
+            + " " + caps.width + "x" + caps.height
+            + " " + fps.value + " FPS"
+        obj.format = caps.format
+        obj.formatWidth = caps.width
+        obj.formatHeight = caps.height
+        obj.fps = fps.value
+
+        obj.onClicked.connect((index => function () {
+            let element = vcamFormats.itemAt(index)
+            let caps =
+                AkVideoCaps.create(element.format,
+                                   element.formatWidth,
+                                   element.formatHeight,
+                                   AkFrac.create(element.fps,
+                                                 1).toVariant())
+            addEdit.openOutputFormatDialog(index, caps)
+        })(vcamFormats.count - 1))
     }
 
     function changeFormat(index, caps)
     {
+        let item = vcamFormats.itemAt(index)
+
+        if (!item)
+            return
+
         let format = AkVideoCaps.pixelFormatToString(caps.format)
         let fps = AkFrac.create(caps.fps)
-        let description =
+        item.text =
             format
             + " " + caps.width + "x" + caps.height
             + " " + fps.value + " FPS"
-        vcamFormats.model.set(index,
-                              {format: caps.format,
-                               width: caps.width,
-                               height: caps.height,
-                               fps: fps.value,
-                               description: description})
+        item.format = caps.format
+        item.formatWidth = caps.width
+        item.formatHeight = caps.height
+        item.fps = fps.value
     }
 
     function removeFormat(index)
     {
-        vcamFormats.model.remove(index)
+        vcamFormats.removeItem(vcamFormats.itemAt(index))
     }
 
     function isSupported(format)
@@ -119,21 +139,37 @@ Dialog {
                                                     AkFrac.create(30, 1).toVariant()))
         }
 
-        vcamFormats.model.clear()
+        vcamFormats.clear()
 
         for (let i in formats) {
+            let component = Qt.createComponent("VideoFormatItem.qml")
+
+            if (component.status !== Component.Ready)
+                continue
+
+            let obj = component.createObject(vcamFormats)
             let caps = formats[i]
             let format = AkVideoCaps.pixelFormatToString(caps.format)
             let fps = AkFrac.create(caps.fps)
-            let description =
+            obj.text =
                 format
                 + " " + caps.width + "x" + caps.height
                 + " " + fps.value + " FPS"
-            vcamFormats.model.append({format: caps.format,
-                                      width: caps.width,
-                                      height: caps.height,
-                                      fps: fps.value,
-                                      description: description})
+            obj.format = caps.format
+            obj.formatWidth = caps.width
+            obj.formatHeight = caps.height
+            obj.fps = fps.value
+
+            obj.onClicked.connect((index => function () {
+                let element = vcamFormats.itemAt(index)
+                let caps =
+                    AkVideoCaps.create(element.format,
+                                       element.formatWidth,
+                                       element.formatHeight,
+                                       AkFrac.create(element.fps,
+                                                     1).toVariant())
+                addEdit.openOutputFormatDialog(index, caps)
+            })(i))
         }
     }
 
@@ -154,6 +190,8 @@ Dialog {
         open()
     }
 
+    onVisibleChanged: deviceDescription.forceActiveFocus()
+
     ScrollView {
         id: formatsView
         anchors.fill: parent
@@ -189,37 +227,27 @@ Dialog {
                 icon.source: "image://icons/no"
                 flat: true
 
-                onClicked: vcamFormats.model.clear()
+                onClicked: vcamFormats.clear()
             }
-            ListView {
+            OptionList {
                 id: vcamFormats
-                model: ListModel {}
-                implicitWidth: childrenRect.width
-                implicitHeight: childrenRect.height
+                enableHighlight: false
                 Layout.fillWidth: true
-                Layout.fillHeight: true
 
-                delegate: ItemDelegate {
-                    text: index < 0 && index >= vcamFormats.count?
-                              "":
-                          vcamFormats.model.get(index)?
-                              vcamFormats.model.get(index)["description"]:
-                              ""
-                    anchors.right: parent.right
-                    anchors.left: parent.left
-                    height: implicitHeight
-
-                    onClicked: {
-                        let element = vcamFormats.model.get(index)
-                        let caps =
-                            AkVideoCaps.create(element.format,
-                                               element.width,
-                                               element.height,
-                                               AkFrac.create(element.fps,
-                                                             1).toVariant())
-                        addEdit.openOutputFormatDialog(index, caps)
-                    }
+                function clear() {
+                    for (let i = count - 1; i >= 0; i--)
+                        removeItem(itemAt(i))
                 }
+
+                onActiveFocusChanged:
+                    if (activeFocus && count > 0)
+                        itemAt(currentIndex).forceActiveFocus()
+                Keys.onUpPressed:
+                    if (count > 0)
+                        itemAt(currentIndex).forceActiveFocus()
+                Keys.onDownPressed:
+                    if (count > 0)
+                        itemAt(currentIndex).forceActiveFocus()
             }
         }
     }
@@ -248,10 +276,10 @@ Dialog {
         let formats = []
 
         for (let i = 0; i < vcamFormats.count; i++) {
-            let element = vcamFormats.model.get(i)
+            let element = vcamFormats.itemAt(i)
             let caps = AkVideoCaps.create(element.format,
-                                          element.width,
-                                          element.height,
+                                          element.formatWidth,
+                                          element.formatHeight,
                                           AkFrac.create(element.fps,
                                                         1).toVariant())
             formats.push(caps.toVariant())
--- webcamoid-9.0.0.orig/StandAlone/share/qml/VideoOutputError.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/VideoOutputError.qml
@@ -29,6 +29,8 @@ Dialog {
     height: AkUnit.create(320 * AkTheme.controlScale, "dp").pixels
     modal: true
 
+    onVisibleChanged: forceActiveFocus()
+
     function openError(title, message)
     {
         errorDialog.title = title
--- webcamoid-9.0.0.orig/StandAlone/share/qml/VideoOutputPicture.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/VideoOutputPicture.qml
@@ -44,6 +44,8 @@ Dialog {
     onVisibleChanged: {
         if (visible)
             txtTable.text = videoLayer.picture
+
+        btnSearch.forceActiveFocus()
     }
 
     ScrollView {
@@ -65,7 +67,9 @@ Dialog {
                 Layout.fillWidth: true
             }
             Button {
+                id: btnSearch
                 text: qsTr("Search")
+                Accessible.description: qsTr("Search image to use as default output picture")
                 icon.source: "image://icons/search"
 
                 onClicked: fileDialog.open()
--- webcamoid-9.0.0.orig/StandAlone/share/qml/VideoOutputs.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/VideoOutputs.qml
@@ -44,6 +44,18 @@ StackLayout {
     signal openVCamDownloadDialog()
     signal openVCamManualDownloadDialog()
 
+    Component.onCompleted: devicesList.update()
+    onVisibleChanged: devicesList.forceActiveFocus()
+
+    Connections {
+        target: videoLayer
+
+        function onOutputsChanged()
+        {
+            devicesList.update()
+        }
+    }
+
     Connections {
         target: updates
 
@@ -85,6 +97,7 @@ StackLayout {
                         Layout.alignment: Qt.AlignTop | Qt.AlignHCenter
                         Layout.topMargin: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
                         Layout.bottomMargin: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+                        Accessible.description: qsTr("Install virtual camera")
 
                         onClicked: {
                             if (videoLayer.downloadVCam())
@@ -95,6 +108,16 @@ StackLayout {
                     }
                 }
                 Button {
+                    text: qsTr("Configure output")
+                    icon.source: "image://icons/settings"
+                    flat: true
+                    visible: devicesList.count > 0
+                    enabled: videoLayer.videoOutput[0] != ":dummyout:"
+
+                    onClicked:
+                        videoOutputsLayout.openVideoOutputOptions(videoLayer.videoOutput[0])
+                }
+                Button {
                     text: qsTr("Add output")
                     icon.source: "image://icons/add"
                     flat: true
@@ -135,24 +158,17 @@ StackLayout {
 
                     onClicked: videoOutputsLayout.openVideoOutputPictureDialog()
                 }
-                ListView {
+                OptionList {
                     id: devicesList
-                    model: ListModel {}
-                    implicitWidth: childrenRect.width
-                    implicitHeight: childrenRect.height
                     Layout.fillWidth: true
-                    Layout.fillHeight: true
 
-                    function updateDevices() {
+                    property bool updating: false
+
+                    function update() {
                         let devices = videoLayer.outputs
-                        model.clear()
 
-                        for (let i in devices) {
-                            let device = devices[i]
-                            let description = videoLayer.description(device)
-                            model.append({device: device,
-                                          description: description})
-                        }
+                        for (let i = count - 1; i >= 0; i--)
+                            removeItem(itemAt(i))
 
                         let output = videoLayer.videoOutput.length < 1?
                                         "":
@@ -166,63 +182,32 @@ StackLayout {
                                 index = 1
                         }
 
-                        currentIndex = index
-                    }
-
-                    delegate: ItemDelegate {
-                        text: index < 0 && index >= devicesList.count?
-                                  "":
-                              devicesList.model.get(index)?
-                                  devicesList.model.get(index)["description"]:
-                                  ""
-                        anchors.right: parent.right
-                        anchors.left: parent.left
-                        height: implicitHeight
-                        highlighted: devicesList.currentItem == this
-
-                        onClicked: {
-                            if (devicesList.currentIndex == index) {
-                                if (index < 0)
-                                    return
-
-                                let deviceElement = devicesList.model.get(index)
-
-                                if (!deviceElement)
-                                    return
-
-                                let device = deviceElement["device"]
+                        updating = true
 
-                                if (!device || device == ":dummyout:")
-                                    return
-
-                                videoOutputsLayout.openVideoOutputOptions(device)
-                            } else {
-                                let deviceElement = devicesList.model.get(index)
-
-                                if (!deviceElement)
-                                    return
+                        for (let i in devices) {
+                            let component = Qt.createComponent("VideoDeviceItem.qml")
 
-                                let device = deviceElement["device"]
+                            if (component.status !== Component.Ready)
+                                continue
 
-                                if (!device)
-                                    return
+                            let obj = component.createObject(devicesList)
+                            obj.text = videoLayer.description(devices[i])
+                            obj.device = devices[i]
+                            obj.highlighted = i == index
 
-                                videoLayer.videoOutput = [device]
-                                devicesList.currentIndex = index
-                            }
+                            obj.Keys.onSpacePressed.connect(function () {
+                                if (videoLayer.videoOutput[0] != ":dummyout:")
+                                    videoOutputsLayout.openVideoOutputOptions(videoLayer.videoOutput[0])
+                            })
                         }
-                    }
-
-                    Connections {
-                        target: videoLayer
 
-                        function onOutputsChanged()
-                        {
-                            devicesList.updateDevices()
-                        }
+                        updating = false
+                        setCurrentIndex(index)
                     }
 
-                    Component.onCompleted: devicesList.updateDevices()
+                    onCurrentIndexChanged:
+                        if (!updating && itemAt(currentIndex))
+                            videoLayer.videoOutput = [itemAt(currentIndex).device]
                 }
             }
         }
@@ -243,6 +228,7 @@ StackLayout {
                 highlighted: true
                 Layout.alignment: Qt.AlignTop | Qt.AlignHCenter
                 Layout.topMargin: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+                Accessible.description: qsTr("Install virtual camera")
 
                 onClicked: {
                     if (videoLayer.downloadVCam())
--- webcamoid-9.0.0.orig/StandAlone/share/qml/VideoRecording.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/VideoRecording.qml
@@ -18,6 +18,7 @@
  */
 
 import QtQuick 2.12
+import QtQuick.Window 2.12
 import QtQuick.Controls 2.5
 import QtQuick.Layouts 1.3
 import Qt.labs.platform 1.1 as LABS
@@ -26,10 +27,6 @@ import Ak 1.0
 Page {
     id: videoRecording
 
-    signal openVideoFormatDialog()
-    signal openVideoCodecDialog()
-    signal openAudioCodecDialog()
-
     ScrollView {
         id: scrollView
         anchors.fill: parent
@@ -115,10 +112,12 @@ Page {
             columns: 3
 
             Label {
+                id: txtVideosDirectory
                 text: qsTr("Videos directory")
             }
             TextField {
                 text: recording.videoDirectory
+                Accessible.name: txtVideosDirectory.text
                 selectByMouse: true
                 Layout.fillWidth: true
 
@@ -126,6 +125,7 @@ Page {
             }
             Button {
                 text: qsTr("Search")
+                Accessible.description: qsTr("Search directory to save videos")
 
                 onClicked: {
                     mediaTools.makedirs(recording.videoDirectory)
@@ -133,9 +133,11 @@ Page {
                 }
             }
             Label {
+                id: txtRecordAudio
                 text: qsTr("Record audio")
             }
             Switch {
+                Accessible.name: txtRecordAudio.text
                 Layout.columnSpan: 2
                 Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
                 checked: recording.recordAudio
@@ -143,10 +145,12 @@ Page {
                 onToggled: recording.recordAudio = checked
             }
             Label {
+                id: txtFileFormat
                 text: qsTr("File format")
             }
             ComboBox {
                 id: cbxVideoFormat
+                Accessible.description: txtFileFormat.text
                 textRole: "description"
                 Layout.fillWidth: true
                 model: ListModel {
@@ -172,16 +176,20 @@ Page {
                         recording.availableVideoFormats[currentIndex]
             }
             Button {
+                id: configureVideoFormat
                 text: qsTr("Configure")
+                Accessible.description: qsTr("Configure file format")
                 flat: true
 
-                onClicked: videoRecording.openVideoFormatDialog()
+                onClicked: videoFormatOptions.open()
             }
             Label {
+                id: txtVideoCodec
                 text: qsTr("Video codec")
             }
             ComboBox {
                 id: cbxVideoCodec
+                Accessible.description: txtVideoCodec.text
                 textRole: "description"
                 Layout.fillWidth: true
                 model: ListModel {
@@ -207,17 +215,21 @@ Page {
                         recording.availableVideoCodecs[currentIndex]
             }
             Button {
+                id: configureVideoCodec
                 text: qsTr("Configure")
+                Accessible.description: qsTr("Configure video codec")
                 flat: true
 
-                onClicked: videoRecording.openVideoCodecDialog()
+                onClicked: videoCodecOptions.open()
             }
             Label {
+                id: txtAudioCodec
                 text: qsTr("Audio codec")
                 enabled: recording.recordAudio
             }
             ComboBox {
                 id: cbxAudioCodec
+                Accessible.description: txtAudioCodec.text
                 textRole: "description"
                 Layout.fillWidth: true
                 enabled: recording.recordAudio
@@ -244,14 +256,40 @@ Page {
                         recording.availableAudioCodecs[currentIndex]
             }
             Button {
+                id: configureAudioCodec
                 text: qsTr("Configure")
+                Accessible.description: qsTr("Configure audio codec")
                 enabled: recording.recordAudio
                 flat: true
 
-                onClicked: videoRecording.openAudioCodecDialog()
+                onClicked: audioCodecOptions.open()
             }
         }
     }
+    VideoFormatOptions {
+        id: videoFormatOptions
+        width: videoRecording.Window.width
+        height: videoRecording.Window.height
+        anchors.centerIn: Overlay.overlay
+
+        onClosed: configureVideoFormat.forceActiveFocus()
+    }
+    VideoCodecOptions {
+        id: videoCodecOptions
+        width: videoRecording.Window.width
+        height: videoRecording.Window.height
+        anchors.centerIn: Overlay.overlay
+
+        onClosed: configureVideoCodec.forceActiveFocus()
+    }
+    AudioCodecOptions {
+        id: audioCodecOptions
+        width: videoRecording.Window.width
+        height: videoRecording.Window.height
+        anchors.centerIn: Overlay.overlay
+
+        onClosed: configureAudioCodec.forceActiveFocus()
+    }
     LABS.FolderDialog {
         id: folderDialog
         title: qsTr("Select the folder to save your videos")
--- webcamoid-9.0.0.orig/StandAlone/share/qml/main.qml
+++ webcamoid-9.0.0/StandAlone/share/qml/main.qml
@@ -23,6 +23,7 @@ import QtQuick.Controls 2.5
 import QtQuick.Layouts 1.3
 import Qt.labs.settings 1.0 as LABS
 import Ak 1.0
+import AkControls 1.0 as AK
 import Webcamoid 1.0
 
 ApplicationWindow {
@@ -33,8 +34,6 @@ ApplicationWindow {
            + " - "
            + videoLayer.description(videoLayer.videoInput)
     visible: true
-    x: (Screen.width - mediaTools.windowWidth) / 2
-    y: (Screen.height - mediaTools.windowHeight) / 2
     width: mediaTools.windowWidth
     height: mediaTools.windowHeight
 
@@ -62,6 +61,15 @@ ApplicationWindow {
         photoPreviewSaveAnimation.start()
     }
 
+    function snapshotToClipboard()
+	{
+        var success = false
+		snapToClipboard.focus = false
+        recording.takePhoto()
+		success = recording.copyToClipboard()
+        console.debug("Capture snapshot to Clipboard ", success ? "successful" : "failed")
+    }
+
     function pathToUrl(path)
     {
         if (path.length < 1)
@@ -70,10 +78,41 @@ ApplicationWindow {
         return "file://" + path
     }
 
-    onWidthChanged: mediaTools.windowWidth = width
-    onHeightChanged: mediaTools.windowHeight = height
+    function adjustControlScale()
+    {
+        let physicalWidth = width / Screen.pixelDensity
+        let physicalHeight = height / Screen.pixelDensity
+
+        if (physicalWidth <= 100 || physicalHeight <= 100)
+            AkTheme.controlScale = 1.0;
+        else
+            AkTheme.controlScale = 1.6;
+    }
+
+    onWidthChanged: {
+        adjustControlScale()
+        mediaTools.windowWidth = width
+    }
+    onHeightChanged: {
+        adjustControlScale()
+        mediaTools.windowHeight = height
+    }
+
+    Component.onCompleted: {
+        x = (Screen.width - mediaTools.windowWidth) / 2
+        y = (Screen.height - mediaTools.windowHeight) / 2
+        chkFlash.updateVisibility()
+    }
+
+    Connections {
+        target: mediaTools
 
-    Component.onCompleted: chkFlash.updateVisibility()
+        function onNewInstanceOpened()
+        {
+            wdgMainWidget.raise();
+            wdgMainWidget.requestActivate()
+        }
+    }
 
     Connections {
         target: videoLayer
@@ -127,10 +166,9 @@ ApplicationWindow {
 
         property real k: 0
     }
-
     ColumnLayout {
         id: leftControls
-        width: AkUnit.create(150 * AkTheme.controlScale, "dp").pixels
+        width: AkUnit.create(childrenRect.width * AkTheme.controlScale, "dp").pixels
         anchors.top: parent.top
         anchors.topMargin: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
         anchors.left: parent.left
@@ -141,6 +179,8 @@ ApplicationWindow {
             icon.source: "image://icons/video-effects"
             display: AbstractButton.IconOnly
             flat: true
+            Accessible.name: qsTr("Video effects")
+            Accessible.description: qsTr("Open video effects panel")
 
             onClicked: videoEffectsPanel.open()
         }
@@ -148,8 +188,9 @@ ApplicationWindow {
             id: chkFlash
             text: qsTr("Use flash")
             checked: true
-            Layout.fillWidth: true
             visible: false
+            Accessible.name: text
+            Accessible.description: qsTr("Use flash when taking a photo")
 
             function updateVisibility()
             {
@@ -162,6 +203,8 @@ ApplicationWindow {
             textRole: "text"
             Layout.fillWidth: true
             visible: chkFlash.visible
+            Accessible.name: qsTr("Photo timer")
+            Accessible.description: qsTr("The time to wait before the photo is taken")
             model: ListModel {
                 id: lstTimeOptions
 
@@ -199,6 +242,22 @@ ApplicationWindow {
     }
 
     Button {
+        id: snapToClipboard
+        icon.source: "image://icons/paperclip"
+        display: AbstractButton.IconOnly
+        flat: true
+        anchors.top: parent.top
+        anchors.topMargin: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+        anchors.horizontalCenter: parent.horizontalCenter
+        Accessible.name: qsTr("Snapshot to Clipboard")
+        Accessible.description: qsTr("Captures a snapshot and copies it into the clipboard")
+        ToolTip.visible: hovered
+        ToolTip.text: qsTr("Capture Snapshot to Clipboard")
+
+        onClicked: snapshotToClipboard()
+    }
+
+    Button {
         id: rightControls
         icon.source: "image://icons/settings"
         display: AbstractButton.IconOnly
@@ -207,6 +266,8 @@ ApplicationWindow {
         anchors.topMargin: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
         anchors.right: parent.right
         anchors.rightMargin: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+        Accessible.name: qsTr("Sources and outputs settings")
+        Accessible.description: qsTr("Open sources and outputs settings menu")
 
         onClicked: settings.popup()
     }
@@ -239,44 +300,48 @@ ApplicationWindow {
             height: AkUnit.create(64 * AkTheme.controlScale, "dp").pixels
             Layout.fillWidth: true
 
+            readonly property real smallButton: AkUnit.create(48 * AkTheme.controlScale, "dp").pixels
+            readonly property real bigButton: AkUnit.create(64 * AkTheme.controlScale, "dp").pixels
+            readonly property real previewSize: AkUnit.create(48 * AkTheme.controlScale, "dp").pixels
             readonly property int animationTime: 200
 
-            Image {
+            AK.ImageButton {
                 id: photoPreview
-                source: pathToUrl(recording.lastPhotoPreview)
-                width: AkUnit.create(32 * AkTheme.controlScale, "dp").pixels
-                height: AkUnit.create(32 * AkTheme.controlScale, "dp").pixels
-                sourceSize: Qt.size(width, height)
-                asynchronous: true
+                text: qsTr("Open last photo")
+                icon.source: pathToUrl(recording.lastPhotoPreview)
+                width: cameraControls.previewSize
+                height: cameraControls.previewSize
+                fillMode: AkColorizedImage.PreserveAspectCrop
                 cache: false
-                smooth: true
-                mipmap: true
-                fillMode: Image.PreserveAspectCrop
+                visible: photoPreview.status == Image.Ready
                 y: (parent.height - height) / 2
+                ToolTip.visible: hovered
+                ToolTip.text: text
+                Accessible.name: text
+                Accessible.description: qsTr("Open last photo taken")
 
-                MouseArea {
-                    cursorShape: enabled?
-                                     Qt.PointingHandCursor:
-                                     Qt.ArrowCursor
-                    anchors.fill: parent
-                    enabled: photoPreview.visible
-                             && photoPreview.status == Image.Ready
-
-                    onClicked: {
-                        if (photoPreview.status == Image.Ready)
-                            Qt.openUrlExternally(photoPreview.source)
-                    }
+                onClicked: {
+                    if (photoPreview.status == AkColorizedImage.Ready)
+                        Qt.openUrlExternally(photoPreview.icon.source)
                 }
             }
             RoundButton {
                 id: photoButton
                 icon.source: "image://icons/photo"
-                width: AkUnit.create(64 * AkTheme.controlScale, "dp").pixels
-                height: AkUnit.create(64 * AkTheme.controlScale, "dp").pixels
+                width: cameraControls.bigButton
+                height: cameraControls.bigButton
                 x: (parent.width - width) / 2
                 y: (parent.height - height) / 2
                 ToolTip.visible: hovered
                 ToolTip.text: qsTr("Take a photo")
+                Accessible.name:
+                    cameraControls.state == ""?
+                        qsTr("Take a photo"):
+                        qsTr("Image capture mode")
+                Accessible.description:
+                    cameraControls.state == ""?
+                        qsTr("Make a capture and save it to an image file"):
+                        qsTr("Put %1 in image capture mode").arg(mediaTools.applicationName)
                 focus: true
                 enabled: recording.state == AkElement.ElementStateNull
                          && (videoLayer.state == AkElement.ElementStatePlaying
@@ -320,12 +385,26 @@ ApplicationWindow {
                 icon.source: recording.state == AkElement.ElementStateNull?
                                  "image://icons/video":
                                  "image://icons/record-stop"
-                width: AkUnit.create(48 * AkTheme.controlScale, "dp").pixels
-                height: AkUnit.create(48 * AkTheme.controlScale, "dp").pixels
+                width: cameraControls.smallButton
+                height: cameraControls.smallButton
                 x: parent.width - width
                 y: (parent.height - height) / 2
                 ToolTip.visible: hovered
-                ToolTip.text: qsTr("Record video")
+                ToolTip.text: recording.state == AkElement.ElementStateNull?
+                                  qsTr("Record video"):
+                                  qsTr("Stop video recording")
+                Accessible.name:
+                    cameraControls.state == ""?
+                        qsTr("Video capture mode"):
+                    recording.state == AkElement.ElementStateNull?
+                        qsTr("Record video"):
+                        qsTr("Stop video recording")
+                Accessible.description:
+                    cameraControls.state == ""?
+                        qsTr("Put %1 in video recording mode").arg(mediaTools.applicationName):
+                    recording.state == AkElement.ElementStateNull?
+                        qsTr("Start recording to a video file"):
+                        qsTr("Stop current video recording")
                 enabled: videoLayer.state == AkElement.ElementStatePlaying
                          || cameraControls.state == ""
 
@@ -340,33 +419,25 @@ ApplicationWindow {
                     }
                 }
             }
-            Image {
+            AK.ImageButton {
                 id: videoPreview
-                source: pathToUrl(recording.lastVideoPreview)
+                text: qsTr("Open last video")
+                icon.source: pathToUrl(recording.lastVideoPreview)
                 width: 0
                 height: 0
-                sourceSize: Qt.size(width, height)
-                asynchronous: true
+                fillMode: AkColorizedImage.PreserveAspectCrop
                 cache: false
-                smooth: true
-                mipmap: true
-                fillMode: Image.PreserveAspectCrop
                 visible: false
                 x: parent.width - width
                 y: (parent.height - height) / 2
+                ToolTip.visible: hovered
+                ToolTip.text: text
+                Accessible.name: text
+                Accessible.description: qsTr("Open last recorded video")
 
-                MouseArea {
-                    cursorShape: enabled?
-                                     Qt.PointingHandCursor:
-                                     Qt.ArrowCursor
-                    anchors.fill: parent
-                    enabled: videoPreview.visible
-                             && videoPreview.status == Image.Ready
-
-                    onClicked: {
-                        if (videoPreview.status == Image.Ready)
-                            Qt.openUrlExternally("file://" + recording.lastVideo)
-                    }
+                onClicked: {
+                    if (videoPreview.status == Image.Ready)
+                        Qt.openUrlExternally("file://" + recording.lastVideo)
                 }
             }
 
@@ -382,20 +453,20 @@ ApplicationWindow {
                     }
                     PropertyChanges {
                         target: photoButton
-                        width: AkUnit.create(48 * AkTheme.controlScale, "dp").pixels
-                        height: AkUnit.create(48 * AkTheme.controlScale, "dp").pixels
+                        width: cameraControls.smallButton
+                        height: cameraControls.smallButton
                         x: 0
                     }
                     PropertyChanges {
                         target: videoButton
-                        width: AkUnit.create(64 * AkTheme.controlScale, "dp").pixels
-                        height: AkUnit.create(64 * AkTheme.controlScale, "dp").pixels
+                        width: cameraControls.bigButton
+                        height: cameraControls.bigButton
                         x: (parent.width - width) / 2
                     }
                     PropertyChanges {
                         target: videoPreview
-                        width: AkUnit.create(32 * AkTheme.controlScale, "dp").pixels
-                        height: AkUnit.create(32 * AkTheme.controlScale, "dp").pixels
+                        width: cameraControls.previewSize
+                        height: cameraControls.previewSize
                         visible: true
                     }
                 }
@@ -461,10 +532,10 @@ ApplicationWindow {
         id: photoPreviewSaveAnimation
 
         PropertyAnimation {
-            target: photoPreviewThumbnail
-            property: "k"
-            to: 0
-            duration: 0
+                   target: photoPreviewThumbnail
+                   property: "k"
+                   to: 0
+                   duration: 0
         }
         PropertyAnimation {
             target: photoPreview
@@ -561,25 +632,6 @@ ApplicationWindow {
         id: settingsDialog
         width: parent.width
         height: parent.height
-
-        onOpenVideoFormatDialog: videoFormatOptions.open()
-        onOpenVideoCodecDialog: videoCodecOptions.open()
-        onOpenAudioCodecDialog: audioCodecOptions.open()
-    }
-    VideoFormatOptions {
-        id: videoFormatOptions
-        width: parent.width
-        height: parent.height
-    }
-    VideoCodecOptions {
-        id: videoCodecOptions
-        width: parent.width
-        height: parent.height
-    }
-    AudioCodecOptions {
-        id: audioCodecOptions
-        width: parent.width
-        height: parent.height
     }
     VideoOutputError {
         id: videoOutputError
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/ApplicationWindow.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/ApplicationWindow.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Window 2.12
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.ApplicationWindow {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/BusyIndicator.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/BusyIndicator.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.BusyIndicator {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/Button.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/Button.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 import "Private"
 
@@ -92,10 +92,8 @@ T.Button {
     }
     background: Item {
         id: back
-        implicitWidth:
-            AkUnit.create(64 * AkTheme.controlScale, "dp").pixels
-        implicitHeight:
-            AkUnit.create(36 * AkTheme.controlScale, "dp").pixels
+        implicitWidth: AkUnit.create(64 * AkTheme.controlScale, "dp").pixels
+        implicitHeight: AkUnit.create(36 * AkTheme.controlScale, "dp").pixels
 
         // Rectangle
         Rectangle {
@@ -113,7 +111,6 @@ T.Button {
                    control.flat?
                        AkTheme.shade(control.activeWindow, 0, 0):
                        control.activeButton
-
             gradient: Gradient {
                 GradientStop {
                     position: 0
@@ -164,9 +161,10 @@ T.Button {
                 target: iconLabel
                 color: control.highlighted?
                            control.disabledHighlightedText:
-                       control.flat?
-                           control.disabledHighlight:
                            control.disabledButtonText
+                iconColor: control.highlighted?
+                               control.disabledHighlightedText:
+                               control.disabledButtonText
             }
             PropertyChanges {
                 target: buttonCheckableIndicator
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/CheckBox.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/CheckBox.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 import "Private"
 
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/CheckDelegate.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/CheckDelegate.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 import "Private"
 
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/ComboBox.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/ComboBox.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.ComboBox {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/DelayButton.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/DelayButton.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 import "Private"
 
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/Dial.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/Dial.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import QtQuick.Shapes 1.12
 import Ak 1.0
 
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/Dialog.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/Dialog.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.Dialog {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/DialogButtonBox.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/DialogButtonBox.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.DialogButtonBox {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/Drawer.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/Drawer.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.Drawer {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/Frame.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/Frame.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.Frame {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/GroupBox.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/GroupBox.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.GroupBox {
--- /dev/null
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/HorizontalHeaderView.qml
@@ -0,0 +1,51 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+import QtQuick 2.12
+import QtQuick.Controls 2.5
+import QtQuick.Templates 2.15 as T
+import Ak 1.0
+
+T.HorizontalHeaderView {
+    id: control
+    implicitWidth: syncView? syncView.width: 0
+    implicitHeight: contentHeight
+
+    delegate: Rectangle {
+        implicitWidth: text.implicitWidth + 2 * cellPadding
+        implicitHeight: Math.max(control.height,
+                                 text.implicitHeight + 2 * cellPadding)
+        color: AkTheme.palette.active.window
+
+        readonly property real cellPadding:
+            AkUnit.create(8 * AkTheme.controlScale, "dp").pixels
+
+        Text {
+            id: text
+            text: model[control.textRole]
+            width: parent.width
+            height: parent.height
+            horizontalAlignment: Text.AlignHCenter
+            verticalAlignment: Text.AlignVCenter
+            color: enabled?
+                       AkTheme.palette.active.text:
+                       AkTheme.palette.disabled.text
+        }
+    }
+}
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/ItemDelegate.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/ItemDelegate.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 import "Private"
 
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/Label.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/Label.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.Label {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/Menu.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/Menu.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import QtQuick.Window 2.12
 import Ak 1.0
 
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/MenuBar.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/MenuBar.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.MenuBar {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/MenuBarItem.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/MenuBarItem.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 import "Private"
 
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/MenuItem.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/MenuItem.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 import "Private"
 
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/MenuSeparator.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/MenuSeparator.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.MenuSeparator {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/Page.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/Page.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.Page {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/PageIndicator.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/PageIndicator.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.PageIndicator {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/Pane.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/Pane.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.Pane {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/Popup.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/Popup.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.Popup {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/ProgressBar.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/ProgressBar.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.ProgressBar {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/RadioButton.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/RadioButton.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 import "Private"
 
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/RadioDelegate.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/RadioDelegate.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 import "Private"
 
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/RangeSlider.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/RangeSlider.qml
@@ -20,7 +20,7 @@
 import QtQuick 2.12
 import QtQuick.Controls 2.5
 import QtQuick.Layouts 1.3
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.RangeSlider {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/RoundButton.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/RoundButton.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 import "Private"
 
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/ScrollBar.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/ScrollBar.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.ScrollBar {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/ScrollIndicator.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/ScrollIndicator.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.ScrollIndicator {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/ScrollView.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/ScrollView.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.ScrollView {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/Slider.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/Slider.qml
@@ -20,7 +20,7 @@
 import QtQuick 2.12
 import QtQuick.Controls 2.5
 import QtQuick.Layouts 1.3
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.Slider {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/SpinBox.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/SpinBox.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.SpinBox {
--- /dev/null
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/SplitView.qml
@@ -0,0 +1,75 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+import QtQuick 2.12
+import QtQuick.Controls 2.5
+import QtQuick.Templates 2.15 as T
+import Ak 1.0
+
+T.SplitView {
+    id: control
+    implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+                            implicitContentWidth + leftPadding + rightPadding)
+    implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+                            implicitContentHeight + topPadding + bottomPadding)
+
+    handle: Rectangle {
+        id: handle
+        implicitWidth: control.orientation === Qt.Horizontal?
+            thickness:
+            control.width
+        implicitHeight: control.orientation === Qt.Horizontal?
+            control.height:
+            thickness
+        color: T.SplitHandle.pressed?
+                    AkTheme.palette.active.light:
+               T.SplitHandle.hovered?
+                    AkTheme.palette.active.mid:
+                    AkTheme.palette.active.dark
+
+        readonly property int thickness:
+            AkUnit.create(4 * AkTheme.controlScale, "dp").pixels
+
+        Rectangle {
+            color: AkTheme.palette.active.highlight
+            width: control.orientation === Qt.Horizontal?
+                thickness:
+                length
+            height: control.orientation === Qt.Horizontal?
+                length:
+                thickness
+            radius: thickness
+            x: (parent.width - width) / 2
+            y: (parent.height - height) / 2
+
+            property int length: parent.T.SplitHandle.pressed?
+                handle.thickness / 2:
+                2 * handle.thickness
+            readonly property int thickness: parent.T.SplitHandle.pressed?
+                handle.thickness / 2:
+                handle.thickness / 4
+
+            Behavior on length {
+                NumberAnimation {
+                    duration: 100
+                }
+            }
+        }
+    }
+}
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/StackView.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/StackView.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 
 T.StackView {
     id: control
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/SwipeDelegate.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/SwipeDelegate.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 import "Private"
 
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/SwipeView.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/SwipeView.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 
 T.SwipeView {
     id: control
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/Switch.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/Switch.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 import "Private"
 
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/SwitchDelegate.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/SwitchDelegate.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 import "Private"
 
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/TabBar.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/TabBar.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.TabBar {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/TabButton.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/TabButton.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 import "Private"
 
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/TextArea.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/TextArea.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.TextArea {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/TextField.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/TextField.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.TextField {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/ToolBar.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/ToolBar.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.ToolBar {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/ToolButton.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/ToolButton.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 import "Private"
 
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/ToolSeparator.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/ToolSeparator.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.ToolSeparator {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/ToolTip.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/ToolTip.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.ToolTip {
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/Tumbler.qml
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/Tumbler.qml
@@ -19,7 +19,7 @@
 
 import QtQuick 2.12
 import QtQuick.Controls 2.5
-import QtQuick.Templates 2.5 as T
+import QtQuick.Templates 2.15 as T
 import Ak 1.0
 
 T.Tumbler {
--- /dev/null
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/VerticalHeaderView.qml
@@ -0,0 +1,51 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+import QtQuick 2.12
+import QtQuick.Controls 2.5
+import QtQuick.Templates 2.15 as T
+import Ak 1.0
+
+T.VerticalHeaderView {
+    id: control
+    implicitWidth: contentWidth
+    implicitHeight: syncView? syncView.height: 0
+
+    delegate: Rectangle {
+        implicitWidth: Math.max(control.width,
+                                text.implicitWidth + 2 * cellPadding)
+        implicitHeight: text.implicitHeight + 2 * cellPadding
+        color: control.Material.backgroundColor
+
+        readonly property real cellPadding:
+            AkUnit.create(8 * AkTheme.controlScale, "dp").pixels
+
+        Text {
+            id: text
+            text: model[control.textRole]
+            width: parent.width
+            height: parent.height
+            horizontalAlignment: Text.AlignHCenter
+            verticalAlignment: Text.AlignVCenter
+            color: enabled?
+                       AkTheme.palette.active.text:
+                       AkTheme.palette.disabled.text
+        }
+    }
+}
--- /dev/null
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/icons/hicolor/scalable/paperclip.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="32.599998mm"
+   height="32.599998mm"
+   viewBox="0 0 32.599999 32.599998"
+   version="1.1"
+   id="svg1163"
+   sodipodi:docname="paperclip.svg"
+   inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1165"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:document-units="mm"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="3.6233469"
+     inkscape:cx="69.548958"
+     inkscape:cy="91.352004"
+     inkscape:window-width="1600"
+     inkscape:window-height="1125"
+     inkscape:window-x="1920"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1160" />
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-18.056146,-13.591088)">
+    <path
+       style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.50831;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+       d="m 41.505229,13.607699 c -1.439951,0.09093 -2.830191,0.564076 -3.884931,1.525052 L 18.434367,32.612793 19.956081,33.99862 39.141316,16.518581 c 0.843693,-0.768689 2.13558,-1.082066 3.562416,-0.931588 1.426846,0.150484 2.92395,0.783003 3.968733,1.744478 1.028277,0.946503 1.692696,2.288863 1.84001,3.568506 0.147309,1.27965 -0.202829,2.44128 -1.042881,3.206653 L 26.076766,43.597398 c -0.688549,0.627358 -1.436854,0.755483 -2.290668,0.6262 -0.853822,-0.129284 -1.75575,-0.590488 -2.320265,-1.104825 -0.567317,-0.516894 -1.075869,-1.335668 -1.218921,-2.110164 -0.143054,-0.774496 -0.005,-1.454262 0.693613,-2.090934 L 40.897534,20.73381 c 0.345409,-0.314713 0.631437,-0.372463 0.954153,-0.350951 0.322716,0.02148 0.680948,0.177762 0.913312,0.379177 0.254647,0.220872 0.480289,0.591989 0.528133,0.91747 0.04784,0.325485 -0.0013,0.586745 -0.357724,0.911694 L 24.784616,39.128757 26.305629,40.514589 44.457133,23.97703 c 0.806374,-0.7347 1.091658,-1.717737 0.968241,-2.557366 -0.12343,-0.839628 -0.574442,-1.554482 -1.177388,-2.077462 -0.581305,-0.503884 -1.356469,-0.855406 -2.239271,-0.91426 -0.8828,-0.05885 -1.874566,0.229734 -2.632194,0.920038 L 19.419503,37.531844 c -1.200285,1.093604 -1.525548,2.54608 -1.293563,3.80205 0.231976,1.255969 0.935579,2.365932 1.81887,3.170711 0.886133,0.807361 2.1097,1.443332 3.488491,1.652097 1.37879,0.208765 2.970819,-0.08462 4.165189,-1.17282 L 48.990606,25.49246 c 1.391771,-1.268044 1.861123,-3.066168 1.661853,-4.797148 -0.199274,-1.730979 -1.04683,-3.449895 -2.45123,-4.74261 v -7.24e-4 c -1.422189,-1.308783 -3.32847,-2.10959 -5.250327,-2.312277 -0.480461,-0.05067 -0.965691,-0.06238 -1.445673,-0.03207 z"
+       id="path6344"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="/home/tj/Pictures/paperclip-8.png"
+       inkscape:export-xdpi="6.23"
+       inkscape:export-ydpi="6.23" />
+  </g>
+</svg>
--- webcamoid-9.0.0.orig/StandAlone/share/themes/WebcamoidTheme/qmldir
+++ webcamoid-9.0.0/StandAlone/share/themes/WebcamoidTheme/qmldir
@@ -11,6 +11,7 @@ DialogButtonBox 1.0 DialogButtonBox.qml
 Drawer 1.0 Drawer.qml
 Frame 1.0 Frame.qml
 GroupBox 1.0 GroupBox.qml
+HorizontalHeaderView 1.0 HorizontalHeaderView.qml
 ItemDelegate 1.0 ItemDelegate.qml
 Label 1.0 Label.qml
 Menu 1.0 Menu.qml
@@ -32,6 +33,7 @@ ScrollIndicator 1.0 ScrollIndicator.qml
 ScrollView 1.0 ScrollView.qml
 Slider 1.0 Slider.qml
 SpinBox 1.0 SpinBox.qml
+SplitView 1.0 SplitView.qml
 StackView 1.0 StackView.qml
 SwipeDelegate 1.0 SwipeDelegate.qml
 SwipeView 1.0 SwipeView.qml
@@ -46,3 +48,4 @@ ToolButton 1.0 ToolButton.qml
 ToolSeparator 1.0 ToolSeparator.qml
 ToolTip 1.0 ToolTip.qml
 Tumbler 1.0 Tumbler.qml
+VerticalHeaderView 1.0 VerticalHeaderView.qml
--- webcamoid-9.0.0.orig/StandAlone/share/ts/ca.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/ca.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Fa servir el Qt %1</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Lloc web</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>Aplicació de captura amb càmera web.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>Una aplicació de càmera web senzilla per a capturar fotos i vídeos.</translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished">Quant a</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished">Contribuïdors</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished">Llicència</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished">Llicències de tercers</translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
@@ -113,12 +128,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation type="unfinished">Taxa de bits</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished">Taxa de bits (bits/s)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation type="unfinished">Format de mostratge</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation type="unfinished">Canals</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation type="unfinished">Freqüència de mostratge</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation type="unfinished">Latència (ms)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation type="unfinished">Silenci</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>Captura de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>Captura de l’escriptori</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>Captura/reproducció d’àudio</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>Conversió de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>Controlador de càmera virtual</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>Reproducció de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>Estructures i biblioteques</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation>Mètode de «root»</translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation type="unfinished">Cerca</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation type="unfinished">Qualitat</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation type="unfinished">Suprimeix</translation>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
+        <source>Update</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
-        <source>Update</source>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>Afegeix camí de cerca de connector</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished">Suprimeix</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished">Aplicació de captura amb càmera web.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation>CAMÍ</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation type="unfinished">Opcions generals</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation type="unfinished">Actualitzacions</translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished">Seleccioneu el color nou</translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation>Comprova si hi ha versions noves</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>Diàriament</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>Cada dos dies</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>Setmanalment</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>Cada dues setmanes</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>Mensualment</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>Mai</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>Darrera actualització</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>La vostra versió del %1 està desfasada. La darrera versió és &lt;b&gt;%2&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation>Actualitza ara</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>Gràcies per utilitzar una &lt;b&gt;versió de desenvolupament&lt;/b&gt;!&lt;br /&gt;Serà molt útil si podeu informar-nos de qualsevol problema o suggeriment que tingueu.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>Informa d’un problema</translation>
     </message>
@@ -618,12 +685,12 @@
         <translation type="unfinished">Hi ha una versió nova disponible.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation type="unfinished">Baixa %1 %2 ara</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation type="unfinished">Taxa de bits</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished">Taxa de bits (bits/s)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation type="unfinished">Suprimeix</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation type="unfinished">Cerca un efecte</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation type="unfinished">Afegeix un efecte</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation type="unfinished"></translation>
     </message>
@@ -747,7 +824,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation type="unfinished"></translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation type="unfinished">Descripció</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation type="unfinished">Cerca</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation type="unfinished">Edita</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation type="unfinished">Suprimeix</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation type="unfinished">No s’ha trobat cap càmera</translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation type="unfinished">Edita</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation type="unfinished">Suprimeix</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation type="unfinished">No s’ha trobat cap càmera</translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation type="unfinished">Cerca</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation type="unfinished">Cerca</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation>Mostra les vores</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>Trieu un color</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>Mode</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
-        <translation>Natural</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>Símbols</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>Tipus de lletra</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation>Cerca</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation>Optimització de contorn</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>Per defecte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation>Sense optimització</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation>Optimització vertical</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation>Optimització plena</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>Estil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation>Mapa de bits</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>Dispositiu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>Qualitat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>Suavitzador</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation>Sense suavitzador</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation>Compatible amb l’OpenGL</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation>Sense suavitzador de subpíxels</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation>Trieu un tipus de lletra</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>Mida</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>Color</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation>Suau</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation>Seleccioneu el color nou</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation>Taula de colors</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation>Metall</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>Vermell i verd</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation>Sèpia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>Groc i blau</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation>Personalitzat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>Freqüència</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1664,1138 +1952,1377 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation>Equalitza</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>Ull</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation>Ulleres</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation>Ull esquerre 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation>Ull esquerre 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation>Ull dret 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation>Ull dret 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>Somriure</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation>Rectangle</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation>El·lipse</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation>Imatge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation>Sòlid</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation>Traç</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation>Punt</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation>Punt i traç</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation>Punt, punt, traç</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation>Àngel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>Ós</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation>Castor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>Gat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>Vaca</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation>Dimoni</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation>Gos</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation>Gos dàlmata</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation>Gos feliç</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>Drac</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation>Elefant 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation>Elefant 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation>Ant</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation>Granota</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation>Fantasma</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation>Girafa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation>Nyu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation>Cabra</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation>Hipopòtam</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>Cavall</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation>Cavall gris</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation>Coala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>Mico</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation>Ratolí gris</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation>Ratolí blanc</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation>Panda</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation>Pingüí</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation>Carbassa 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation>Carbassa 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation>Ós rentador</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation>Rinoceront</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation>Ovella</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation>Triceratop</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation>Zebra</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation>Quantitat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation>Selecciona</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation>Brillantor</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>Contrast</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation>Color de la radiació</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation>Detecció de moviment</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation>Pluja</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
-        <translation>Sincronització vertical</translation>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation>Soroll</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation>Graus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>Temperatura</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>Format de vídeo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>Resolució</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>Reinicialitza</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation>Aspecte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation>Escala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation type="unfinished">Ara</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation type="unfinished">%1 segons</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished">Compilació diària</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
-        <source>Face margin (% of face size)</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
-        <source>e.g. 16:9, 4:3</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
-        <source>Lock viewport</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
-        <source>Debug mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
-        <source>Flip horizontally</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
+        <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
-        <source>Flip vertically</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
-        <source>Width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
-        <source>Aspect ratio width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
-        <source>Height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
-        <source>Aspect ratio height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
+        <source>e.g. 16:9, 4:3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
+        <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
+        <source>Debug mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
+        <source>Flip horizontally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
+        <source>Flip vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
+        <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
+        <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
+        <source>Height</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
+        <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2811,19 +3338,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished">Seleccioneu el color nou</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/de.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/de.ts
@@ -12,25 +12,40 @@
         <location filename="../qml/About.qml" line="66"/>
         <source>Built from</source>
         <extracomment>Built from &quot;short commit hash&quot;</extracomment>
+        <translation>Gebaut von</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation>Gebaut von %1</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Verwendet Qt %1</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Website</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation>Zur Webseite %1 gehen</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>Webcam-Aufnahmeanwendung.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>Eine einfache Webcam-Anwendung für die Bild- und Videoaufzeichnung.</translation>
     </message>
@@ -43,64 +58,64 @@
         <translation>Über %1</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
-        <translation type="unfinished">Über</translation>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
+        <translation>Über</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
-        <translation type="unfinished">Beitragende</translation>
+        <translation>Beitragende</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
-        <translation type="unfinished">Lizenz</translation>
+        <translation>Lizenz</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
-        <translation type="unfinished">Drittanbieter-Lizenzen</translation>
+        <translation>Drittanbieter-Lizenzen</translation>
     </message>
 </context>
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation>Videoformat hinzufügen</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation>Videoformat ändern</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation>Videoformat entfernen</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>Format</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation>Breite</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation>Höhe</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation>Bildwiederholrate</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>Audioformat-Optionen</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>Bitrate</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Bitrate (Bits/Sek)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation>Audiogerät-Optionen</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation>Abtastformat</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation>Kanäle</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation>Abtastrate</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation>Latenz (ms)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation>Eingabe konfigurieren</translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation>Stille</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation>Ausgabe konfigurieren</translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation>Lade %1 herunter</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Von: %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>An: %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation>Größe: %1 %2B / %3 %4B</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation>Geschwindigkeit %1 %2B/s</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation>Zeit übrig: %1</translation>
     </message>
@@ -265,10 +296,10 @@
     <message>
         <location filename="../qml/DownloadSucceededDialog.qml" line="31"/>
         <source>Download ready</source>
-        <translation type="unfinished"></translation>
+        <translation>Herunterladen bereit</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation>Virtuelle Kamera installieren?</translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>Videoaufnahme</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>Desktop-Aufnahme</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>Audioaufnahme/-wiedergabe</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>Videokonvertierung</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>Virtueller Kameratreiber</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>Videowiedergabe</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation>Starte Webcam-Quellen beim Programmstart</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>Frameworks und Bibliotheken</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation>Bildschirmaufnahme</translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation>Audioaufnahme/-wiedergabe</translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation>Videoaufnahme</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation>Admin-/Root-Methode</translation>
@@ -331,37 +362,50 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation>Bildverzeichnis</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation>Suchen</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>Dateiformat</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation>Qualität</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation>Wähle Verzeichnis zum Speichern der Bilder</translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
-        <translation type="unfinished"></translation>
+        <translation>PipeWire-Bildschirm</translation>
     </message>
 </context>
 <context>
@@ -377,76 +421,89 @@
         <translation>Plugins</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation>Suche nach Plugins in Unterverzeichnissen</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation>Pfad hinzufügen</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation>Entfernen</translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>Aktualisieren</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>Plugins-Suchpfad hinzufügen</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation>Entfernen</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation>Webcam-Aufnahmeanwendung.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation>Einstellungen aus PATH laden. Konfigurationen aus Anwendungsverzeichnis laden, wenn PATH leer ist.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation>PFAD</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation>PFAD1;PFAD2;PFAD3;...</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
-        <translation type="unfinished"></translation>
+        <translation>Debug-Ausgabe in eine Datei senden</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
-        <translation type="unfinished"></translation>
+        <translation>DATEI</translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation>Eine neue Instanz von %1 öffnen.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation>Rekursiv in den angegebenen Plugin-Pfaden suchen.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation>Semikolon getrennte Liste der Pfade zur Suche nach Plugins.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation>Semikolon getrennte Liste der Pfade die am Laden gehindert werden.</translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation>%1/Video %2.%3</translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation>Bildaufnahme</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation>Videoaufnahme</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation>Allgemeine Optionen</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation>Plugins</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation>Aktualisierungen</translation>
     </message>
@@ -521,7 +578,7 @@
     <message>
         <location filename="../qml/SettingsMenu.qml" line="64"/>
         <source>About</source>
-        <translation type="unfinished">Über</translation>
+        <translation>Über</translation>
     </message>
     <message>
         <location filename="../qml/SettingsMenu.qml" line="71"/>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
-        <translation type="unfinished">Wählen Sie die neue Farbe aus</translation>
+        <translation>Wählen Sie die neue Farbe aus</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation>Farbe %1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation>Farbe %1 entfernen</translation>
     </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation>Über neue Versionen benachrichtigen</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation>Aktualisierungsdialog anzeigen</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation>Auf neue Versionen prüfen</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>Täglich</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>Alle zwei Tage</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>Wöchentlich</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>Alle zwei Wochen</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>Monatlich</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>Nie</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>Letzte Aktualisierung</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>Ihre Version von %1 ist veraltet. Neueste Version ist &lt;b&gt;%2&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation>Jetzt aktualisieren!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>Danke für die Verwendung einer &lt;b&gt;Entwicklungsversion&lt;/b&gt;!&lt;br /&gt;Es wäre sehr hilfreich, wenn Sie irgendwelche Fehler und Vorschläge, die Sie haben, melden.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>Fehler melden</translation>
     </message>
@@ -618,12 +685,12 @@
         <translation>Neue Version verfügbar!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation>%1 %2 JETZT herunterladen!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation>Diesen Dialog beim nächsten Mal anzeigen</translation>
     </message>
@@ -644,7 +711,7 @@
         <translation>Installation erfolgreich</translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation>Webcamoid neu starten?</translation>
     </message>
@@ -657,9 +724,9 @@
         <translation>Kann neueste Version nicht finden</translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
-        <translation type="unfinished"></translation>
+        <translation>Die virtuelle Kamera manuell herunterladen?</translation>
     </message>
 </context>
 <context>
@@ -670,18 +737,18 @@
         <translation>Videoformat-Optionen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation>Bitrate</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Bitrate (Bits/Sek)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation>Keyframe-Abstand</translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation>Entfernen</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation>Videoeffekt %1 entfernen</translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation>Videoeffekt hinzufügen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation>Effekt suchen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation>Videoeffekt suchen</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation>Effekt hinzufügen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation>Alle Effekte entfernen</translation>
     </message>
@@ -747,7 +824,7 @@
         <translation>Videoformat-Optionen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation>Dateiendung</translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation>Quelle bearbeiten</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation>Quelle hinzufügen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation>Datei</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation>URL</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation>Beschreibung</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation>Quellentitel</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation>Pfad</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation>Dateipfad</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation>Suchen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation>Datei suchen, um sie als Quelle zu verwenden</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation>Datei auswählen, die als Quelle hinzugefügt werden soll</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation>Alle Videodateien</translation>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation>Bearbeiten</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation>Entfernen</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation>Quelle hinzufügen</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation>Quelle konfigurieren</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation>Keine Webcams gefunden</translation>
     </message>
+</context>
+<context>
+    <name>VideoLayer</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation>3GP-Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation>AVI-Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation>Flash-Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation>Animiertes GIF</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation>MKV-Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation>Animiertes PNG</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation>QuickTime-Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation>MP4-Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation>MPEG-Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation>Ogg-Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation>Portable Netzwerkgrafik</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation>RealMedia-Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation>Skalierbare Vektorgrafik</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation>DVD-Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation>WebM-Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
+        <translation>WebP</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="167"/>
         <source>Windows Media Video</source>
         <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation>Windows Media-Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation>Alle Dateien</translation>
-    </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
-    <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation>Bearbeiten</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation>Entfernen</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
-        <translation>Quelle hinzufügen</translation>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
+        <translation>Alle Bild- und Videodateien</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation>Keine Webcams gefunden</translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation>Alle Dateien</translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation>Keine Ausgabe</translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation>Virtuelle Kamera</translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation>Virtuelle Kamera bearbeiten</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation>Virtuelle Kamera hinzufügen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation>Name der virtuellen Kamera</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation>Format hinzufügen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation>Formate löschen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation>Kann die virtuelle Kamera nicht bearbeiten</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation>Kann die virtuelle Kamera nicht hinzufügen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation>Fehler beim Bearbeiten der virtuellen Kamera</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation>Fehler beim Hinzufügen der virtuellen Kamera</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation>Fehler beim Erstellen der virtuellen Kamera</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation>Kamerabeschreibung und Formate dürfen nicht leer sein.</translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation>Ausgabebild der virtuellen Kamera</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation>Standardausgabebild der virtuellen Kamera</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation>Suchen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
-        <translation type="unfinished"></translation>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
+        <translation>Bild suchen, das als Standardausgabebild verwendet werden soll</translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation>Virtuelles Kamerabild kann nicht festgelegt werden</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation>Fehler beim Entfernen virtueller Kameras</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation>Bitte wählen Sie eine Bilddatei aus</translation>
     </message>
@@ -1067,98 +1249,129 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
-        <translation type="unfinished"></translation>
+        <translation>Die virtuelle Kamera ist veraltet (%1), installieren Sie die neueste Version (%2)?</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
-        <translation type="unfinished"></translation>
+        <translation>Installieren</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation>Virtuelle Kamera installieren</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation>Ausgabe konfigurieren</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
-        <translation type="unfinished"></translation>
+        <translation>Ausgabe hinzufügen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
-        <translation type="unfinished"></translation>
+        <translation>Fehler beim Erstellen einer virtuellen Kamera</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
-        <translation type="unfinished"></translation>
+        <translation>Alle Ausgaben entfernen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
-        <translation type="unfinished"></translation>
+        <translation>Fehler beim Entfernen virtueller Kameras</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
-        <translation type="unfinished">Fehler beim Entfernen virtueller Kameras</translation>
+        <translation>Fehler beim Entfernen virtueller Kameras</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
-        <translation type="unfinished"></translation>
+        <translation>Ausgabebild festlegen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
-        <translation type="unfinished"></translation>
+        <translation>Die virtuelle Kamera ist nicht installiert, möchten Sie sie installieren?</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
-        <translation type="unfinished"></translation>
+        <translation>Die virtuelle Kamera wird auf dieser Plattform nicht unterstützt</translation>
     </message>
 </context>
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation>Videoverzeichnis</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation>Suchen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation>Verzeichnis zum Speichern von Videos suchen</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation>Audioaufnahme</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation>Dateiformat</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation>Konfigurieren</translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation>Dateiformat konfigurieren</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation>Videoformat</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation>Videocodec konfigurieren</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation>Audioformat</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation>Audiocodec konfigurieren</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation>Wähle Verzeichnis zum Speichern von Videos</translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation>Anzahl der Kratzer</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation>Staub hinzufügen</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation>Radius</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
         <translation>Anzahl der Farben</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation>Farbunterschied</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation>Kanten anzeigen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation>Linienfarbe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation>Scan-Block</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>Wählen Sie eine Farbe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation>Transformationsmatrix</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation>Spalte 0, Zeile 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation>Spalte 1, Zeile 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation>Spalte 2, Zeile 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation>Spalte 3, Zeile 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation>Spalte 0, Zeile 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation>Spalte 1, Zeile 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation>Spalte 2, Zeile 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation>Spalte 3, Zeile 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation>Spalte 0, Zeile 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation>Spalte 1, Zeile 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation>Spalte 2, Zeile 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation>Spalte 3, Zeile 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>Modus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
-        <translation>Natürlich</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
-        <translation>Fest</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>Symbole</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>Schriftart</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation>Suchen</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation>Zu verwendende Schriftart suchen</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation>Hinting</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>Standard</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation>Kein hinting</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation>Vertikales hinting</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation>Volles hinting</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>Stil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation>Bitmap</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>Gerät</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation>Umriss</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation>Umriss erzwingen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation>Übereinstimmung</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>Qualität</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>Kantenglättung</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation>Keine Kantenglättung</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation>Kompatibel mit OpenGL</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation>Ganzzahlige Metriken erzwingen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation>Kein Subpixel-Antialias</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation>Keine Schriftzusammenführung</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation>Vordergrundfarbe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>Hintergrundfarbe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation>Umgekehrt</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation>Bitte wählen Sie eine Schriftart aus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation>Wählen Sie die Vordergrundfarbe aus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation>Wählen Sie die Hintergrundfarbe aus</translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>Größe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>Farbe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation>Wählen Sie die Streifenfarbe aus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation>Weich</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation>Wählen Sie die zu filternde Farbe aus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation>Alte Farbe</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation>Neue Farbe</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation>Wählen Sie die zu ersetzende Farbe aus</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation>Wählen Sie die neue Farbe aus</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation>Farbtabelle</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation>Basis</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation>Metall</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation>Hitze</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation>Altes Foto</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>Rot &amp; Grün</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation>Sepia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation>X-Pro</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation>Röntgen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>Gelb &amp; Blau</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation>Benutzerdefiniert</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation>Farbpalette der Quelle</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation>Als Palette zu verwendende Bilddatei</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation>Bilddatei suchen, die als Palette verwendet werden soll</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation>Bitte wählen Sie eine Bilddatei aus</translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation>Convolve-Matrix</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation>Faktor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation>Abweichung</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation>Grab-Modus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation>Zufälliges Quadrat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation>Vertikale Erhöhung</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation>Horizontale Erhöhung</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation>Ringe erhöhen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation>Blockgröße</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
         <translation>Anzahl der Bilder</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation>Mu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation>Sigma</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation>Bildwiederholrate</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation>Amplitude</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>Frequenz</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation>Rastergröße</translation>
     </message>
@@ -1664,1166 +1952,1532 @@
         <translation>Geschwindigkeit</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation>Zoomrate</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation>Stärke</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation>Canny-Modus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation>Canny-Schwellwert</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation>Egalisieren</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation>Invertieren</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation>Haar-Datei</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>Auge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation>Augengläser</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation>Stirnfläche Alternative 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation>Stirnseite Alternative 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation>Stirnfläche Alternative 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation>Standard Stirnfläche</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation>Ganzkörper</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation>Linkes Auge 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation>Unterkörper</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation>Augenpaar groß</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation>Augenpaar klein</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation>Linkes Ohr</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation>Linkes Auge 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation>Mund</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>Nase</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation>Rechtes Ohr</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation>Rechtes Auge 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation>Oberkörper 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation>Profilfläche</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation>Rechtes Auge 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>Lächeln</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation>Oberkörper</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation>Marker-Typ</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation>Rechteck</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation>Ellipse</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation>Bild</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation>Verpixeln</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation>Unschärfe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
-        <translation type="unfinished"></translation>
+        <translation>Unschärfe außen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation>Hintergrundbild</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation>Marker-Stil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation>Fest</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation>Strich</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation>Punkt</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation>Strich-Punkt</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation>Strich-Punkt-Punkt</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation>Markerfarbe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation>Markerbreite</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation>Masken</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation>Engel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>Bär</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation>Biber</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>Katze</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation>Huhn</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>Kuh</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation>Teufel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation>Hund</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation>Dalmatinerhund</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation>Fröhlicher Hund</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>Drache</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation>Elefant 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation>Elefant 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation>Elch</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation>Frosch</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation>Geist</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation>Giraffe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation>Gnu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation>Ziege</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation>Nilpferd</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>Pferd</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation>Schimmel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation>Koala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>Affe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation>Graue Maus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation>Weiße Maus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation>Panda</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation>Pinguin</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation>Kürbis 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation>Kürbis 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation>Waschbär</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation>Nashorn</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation>Schaf</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation>Schädel 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation>Schädel 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation>Triceratops</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation>Zebra</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation>Markerbild</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation>Gesicht durch Bild austauschen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
-        <translation>Hintergründe</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
+        <translation>Bild suchen, das in das erkannte Rechteck eingefügt werden soll</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
+        <translation>Hintergrund</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
+        <translation>Horizontaler Versatz</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
+        <translation>Vertikaler Versatz</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
+        <translation>Horizontaler Radius %</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
+        <translation>Vertikaler Radius %</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
         <source>Black Square</source>
         <translation>Schwarzes Quadrat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
         <source>Background picture</source>
         <translation>Hintergrundbild</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
         <source>Replace background with this picture</source>
         <translation>Hintergrund durch dieses Bild ersetzen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
+        <translation>Bild suchen, das als Hintergrund verwendet werden soll</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
         <source>Pixel grid size</source>
         <translation>Pixelrastergröße</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
         <source>Blur radius</source>
         <translation>Unschärferadius</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
         <source>Face Area Settings</source>
         <translation>Gesichtsbereich-Einstellungen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
-        <translation>H-Versatz</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
-        <translation>V-Versatz</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
         <source>Width Adjust %</source>
         <translation>Breite anpassen %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
         <source>Height Adjust %</source>
         <translation>Höhe anpassen %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
         <source>Round Area</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
-        <translation>H-Radius %</translation>
+        <translation>Runder Bereich</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
-        <translation>V-Radius %</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation>Wählen Sie die Markerfarbe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation>Hart</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation>Kühlung</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation>Auflösen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation>Zoom</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation>Schwellenwert</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>Luma-Schwellenwert</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Alpha diff</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Alpha-Variation</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation>Schrittlänge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation>Muster</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation>90° Halbton 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation>Cluster 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation>Cluster 4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation>Cluster 8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation>Linien 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation>Magisch 2x2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation>Magisch 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation>Geordnet 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation>Geordnet 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation>Geordnet 8x8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation>Bitmap-Muster</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation>Als Muster zu verwendendes Bild</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation>Bild suchen, das als Muster verwendet werden soll</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation>Mustergröße</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
-        <translation>Helligkeit</translation>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation>Steigung</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation>Abfangen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation>Spirale 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation>Spirale 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation>Parabel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation>Horizontaler Streifen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation>Geschwindigkeitserhöhung</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation>Menge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>Luma-Schwellenwert</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation>Wählen Sie die Farbe der Automata aus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
-        <translation>Anzahl der Drops</translation>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
+        <translation>Anzahl der Tropfen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation>Auswählen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation>Schriftart auswählen</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation>Zeigerfarbe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation>Wähle Farbe des Cursors</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation>Minimale Tropfenlänge</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation>Min. Drop-Länge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation>Maximale Tropfenlänge</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation>Max. Drop-Länge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation>Mindestgeschwindigkeit</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation>Min. Speed</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation>Höchstgeschwindigkeit</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation>Max. Speed</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation>Zeige Cursor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation>Videospur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation>Audiospur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation>Untertitelspur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation>Einfach</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation>Helligkeit</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>Kontrast</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation>Weich normal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation>Hart normal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation>Soft-Farbe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation>Hart-Farbe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Alpha-Differenzial</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation>Strahlungsfarbe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation>Bewegungserkennung</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation>Regen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation>Verfall</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation>Linien anzeigen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation>Linien ausblenden</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation>Ausblendungsfarbe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation>Wählen Sie die Ausblendfarbe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
-        <translation>Vertikale Synchronisation</translation>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation>Rauschen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation>Maske</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation>Grade</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>Temperatur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>Videoformat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>Auflösung</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation>BPS</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>Zurücksetzen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation>Auf Standardwerte zurücksetzen</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation>Blickpunkt</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation>Skala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation>Weichheit</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation>Wählen Sie die Vignettenfarbe aus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation>Wellen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
-        <translation>Phase</translation>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation>Blitz verwenden</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation>Jetzt</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation>%1 Sekunden</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation>Bild aufnehmen</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation>%1/Bild %2.%3</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished">Täglicher Build</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation>Videoeffekte</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation>Beim Fotografieren Blitzlicht verwenden</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation>Wartezeit bis zur Aufnahme des Fotos</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation>Einstellungen für Quellen und Ausgaben</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation>Einstellungsmenü für Quellen und Ausgaben öffnen</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation>Letztes Foto öffnen</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation>Zuletzt aufgenommenes Foto öffnen</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation>Bildaufnahmemodus</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation>Eine Aufnahme machen und sie in einer Bilddatei speichern</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation>%1 in den Bildaufnahmemodus versetzen</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation>Videoaufnahme</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation>Videoaufzeichnung stoppen</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation>Videoaufnahmemodus</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation>%1 in den Videoaufnahmemodus versetzen</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation>Aufnahme in eine Videodatei starten</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation>Aktuelle Videoaufnahme stoppen</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation>Letztes Video öffnen</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation>Zuletzt aufgenommenes Video öffnen</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation>Seitenverhältnis</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation>Verkleinerungsrate</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation>Vergrößerungsrate</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
-        <source>Face margin (% of face size)</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
+        <source>Face margin (% of face size)</source>
+        <translation type="unfinished">Gesichtsrand (% der Gesichtsgröße)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
+        <translation>Oberer Rand</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation>Linker Rand</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
+        <translation>Rechter Rand</translation>
+    </message>
+    <message>
         <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation>Unterer Rand</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
         <source>e.g. 16:9, 4:3</source>
         <translation>z.B. 16:9, 4:3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
         <source>Lock viewport</source>
         <translation>Ausschnitt sperren</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
         <source>Debug mode</source>
         <translation>Debug-Modus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
         <source>Flip horizontally</source>
         <translation>Horizontal spiegeln</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
         <source>Flip vertically</source>
         <translation>Vertikal spiegeln</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
         <source>Width</source>
         <translation>Breite</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
         <source>Aspect ratio width</source>
-        <translation type="unfinished"></translation>
+        <translation>Seitenverhältnisbreite</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
         <source>Height</source>
         <translation>Höhe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
         <source>Aspect ratio height</source>
+        <translation>Seitenverhältnishöhe</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
+        <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
-        <translation>Skalierungsmodus</translation>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
+        <source>Add color</source>
+        <translation>Farbe hinzufügen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
-        <translation>Schnell</translation>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
+        <source>Clear all colors</source>
+        <translation>Alle Farben löschen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
-        <translation>Linear</translation>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
+        <source>Select the color to add</source>
+        <extracomment>Select the color to add to the color table</extracomment>
+        <translation>Hinzufügende Farbe auswählen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
-        <translation>Seitenverhältnis-Modus</translation>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="106"/>
+        <source></source>
+        <translation></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation>Ignorieren</translation>
+        <location filename="../../../libAvKys/Plugins/Gamma/share/qml/main.qml" line="40"/>
+        <source>Gamma</source>
+        <translation>Gamma</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
-        <translation>Belassen</translation>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
+        <source>Hue</source>
+        <translation>Farbton</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
+        <source>Saturation</source>
+        <translation>Sättigung</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
-        <source>Levels</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
+        <source>Luminance</source>
+        <translation>Luminanz</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
-        <source>Add color</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation>Bildrate erzwingen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
-        <source>Clear all colors</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation>Alte Farbe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
-        <source>Select the color to add</source>
-        <extracomment>Select the color to add to the color table</extracomment>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation>Wählen Sie die zu ersetzende Farbe aus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="106"/>
-        <source></source>
-        <translation></translation>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation>Neue Farbe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Gamma/share/qml/main.qml" line="40"/>
-        <source>Gamma</source>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation>Wählen Sie die neue Farbe aus</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation>Winkel</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation>Auflösung beibehalten</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation>Deckkraft</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Palette&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
-        <source>Hue</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
-        <source>Saturation</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Schatten&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation>Schatten-Schwellenwert</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
-        <source>Luminance</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation>Schattenfarbe</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation>Wählen Sie die Farbe des Schattens aus</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation>&lt;b&gt;X-Achse&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation>Amplitude (X)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation>Frequenz (X)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation>Phase (X)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Y-Achse&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation>Amplitude (Y)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation>Frequenz (Y)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation>Phase (Y)</translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/el.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/el.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
-        <source>Using Qt %1</source>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/About.qml" line="80"/>
+        <source>Using Qt %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished"></translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
@@ -113,12 +128,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -131,33 +146,41 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation type="unfinished"></translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation type="unfinished"></translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
+        <source>Update</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
-        <source>Update</source>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation type="unfinished"></translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation type="unfinished"></translation>
     </message>
@@ -618,12 +685,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation type="unfinished"></translation>
     </message>
@@ -747,7 +824,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation type="unfinished"></translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1664,1138 +1952,1377 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
-        <source>Face margin (% of face size)</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
-        <source>e.g. 16:9, 4:3</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
-        <source>Lock viewport</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
-        <source>Debug mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
-        <source>Flip horizontally</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
+        <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
-        <source>Flip vertically</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
-        <source>Width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
-        <source>Aspect ratio width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
-        <source>Height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
-        <source>Aspect ratio height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
+        <source>e.g. 16:9, 4:3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
+        <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
+        <source>Debug mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
+        <source>Flip horizontally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
+        <source>Flip vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
+        <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
+        <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
+        <source>Height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
+        <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2811,19 +3338,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/es.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/es.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Utiliza Qt %1</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Sitio web</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>Aplicación de captura con cámara web.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>Una aplicación sencilla para capturar fotos y vídeos con la cámara web.</translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished"></translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation>Añadir formato de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation>Cambiar formato de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation>Quitar formato</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>Formato</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation>Ancho</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation>Alto</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation type="unfinished">Cuadros por segundo</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>Opciones del Codec de Audio</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>Tasa de Bits</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Tasa de bits (bits/seg)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation>Opciones del dispositivo de audio</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation type="unfinished">Formato de la muestra</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation type="unfinished">Canales</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation>Frecuencia de muestreo</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation>Latencia (ms)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation type="unfinished">Silenciar</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>Captura de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>Captura del escritorio</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>Capturar/Reproducir audio</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>Convertir vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>Driver de la cámara virtual</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>Reproducción de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation>Grabación de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation>Método inicial</translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation type="unfinished">Buscar</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation type="unfinished">Calidad</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation type="unfinished">Eliminar</translation>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
+        <source>Update</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
-        <source>Update</source>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>Añadir ruta de búsqueda para los plugins</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished">Eliminar</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation>Aplicación de captura para la webcam.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation>Cargar configuraciones desde RUTA. Si RUTA está vacío, carga las configuraciones desde el directorio de la aplicación.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation>Busque en las rutas de los plugins especificados recursivamente.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation>Lista de rutas separadas por dos puntos para buscar plugins.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation>Lista de rutas separadas por dos puntos para evitar la carga.</translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation type="unfinished">Opciones generales</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation type="unfinished">Actualizaciones</translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished">Seleccione el nuevo color</translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation>Notificar sobre nuevas versiones</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation>Buscar nuevas versiones</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>Diario</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>Cada dos días</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>Semanal</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>Cada dos semanas</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>Mensual</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>Nunca</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>Última actualización</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>Su versión de %1 está desactualizada. La última versión es &lt;b&gt;%2&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation>¡Actualizar ahora!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>¡Gracias por usar un &lt;b&gt;versión de desarrollo&lt;/b&gt;!&lt;br /&gt;Será muy útil si puede informar de cualquier error y sugerencia que tenga.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>Reportar un error</translation>
     </message>
@@ -618,12 +685,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation type="unfinished">Tasa de Bits</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished">Tasa de bits (bits/seg)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation type="unfinished">Eliminar</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation type="unfinished"></translation>
     </message>
@@ -747,7 +824,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation type="unfinished"></translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation type="unfinished">Archivo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation type="unfinished">URL</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation type="unfinished">Descripción</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation type="unfinished">Ruta</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation type="unfinished">Ruta del archivo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation type="unfinished">Buscar</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation type="unfinished">Elige un archivo para añadir como fuente</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation type="unfinished">Editar</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation type="unfinished">Eliminar</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation type="unfinished">Añadir fuente</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation type="unfinished">Todos los archivos de vídeo</translation>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>VideoLayer</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation type="unfinished">Vídeo 3GP</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation type="unfinished">Vídeo AVI</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation type="unfinished">Vídeo Flash</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation type="unfinished">GIF animado</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation type="unfinished">Vídeo MKV</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation type="unfinished">PNG animado</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation type="unfinished">Vídeo QuickTime</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation type="unfinished">Vídeo MP4</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation type="unfinished">Vídeo MPEG</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation type="unfinished">Vídeo Ogg</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation type="unfinished">Vídeo RealMedia</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation type="unfinished">Vídeo DVD</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation type="unfinished">Vídeo WebM</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation type="unfinished">Editar</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation type="unfinished">Eliminar</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
-        <translation type="unfinished">Añadir fuente</translation>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation type="unfinished">Buscar</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation type="unfinished">Por favor elija un archivo de imagen</translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation type="unfinished">Buscar</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation>Número de rayas</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation>Añadir polvo</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation>Ratio</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
-        <translation>N° de colores</translation>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation>Diferencia de color</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation>Mostrar bordes</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation>Color de línea</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation>Analizar bloque</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>Elija un color</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation>Matriz de transformación</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>Modo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
-        <translation>Natural</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
-        <translation>Fijado</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>Símbolos</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>Fuente</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation>Buscar</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation>Sugerencia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>Predeterminado</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation>Sin sugerencia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation>Sugerencia vertical</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation>Sugerencia completa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>Estilo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation>Mapa de bits</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>Dispositivo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation>Contorno</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation>Forzar contorno</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation>Coincidir</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>Calidad</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>Antialias</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation>Sin antialias</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation>Compatible con OpenGL</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation>Forzar métricas enteras</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation>Sin antialias de subpíxel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation>Sin fusión de fuentes</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation>Color de primer plano</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>Color de fondo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation>Invertido</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation>Por favor elija una fuente</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation>Elija el color de primer plano</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation>Elija el color de fondo</translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>Tamaño</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>Color</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation>Elija el color de las tiras</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation>Suave</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation>Seleccione el color para filtrar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation>Color viejo</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation>Color nuevo</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation>Seleccione el color para reemplazar</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation>Seleccione el nuevo color</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation>Tabla de colores</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation>Base</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation>Intensidad</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation>Foto vieja</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>Rojo y verde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation>Sepia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation>X-Pro</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation>Rayos-X</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>Amarillo y azul</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation>Personalizado</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation>Por favor elija un archivo de imagen</translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation>Matriz de implicación</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation>Factor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation>Predisposición</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation>Modo de agarre</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation>Cuadrado aleatorio</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation>Aumento vertical</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation>Aumento horizontal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation>Aumento de anillos</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation>Tamaño del bloque</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
-        <translation>N° de cuadros</translation>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation>Mu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation>Sigma</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation>Cuadros por segundo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation>Amplitud</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>Frecuencia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation>Tamaño de la cuadrícula</translation>
     </message>
@@ -1664,1138 +1952,1377 @@
         <translation>Velocidad</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation>Tasa de zoom</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation>Fuerza</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation>Modo Canny</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation>Igualar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation>Invertir</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation>Archivo Haar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>Vista</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation>Anteojos</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation>Alternativa de cara frontal 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation>Alternativa de cara frontal 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation>Alternativa de cara frontal 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation>Cara frontal predeterminada</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation>Cuerpo completo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation>Ojo izquierdo 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation>Cuerpo inferior</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation>Par de ojos grandes</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation>Par de ojos pequeños</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation>Oreja izquierda</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation>Ojo izquierdo 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation>Boca</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>Nariz</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation>Oreja derecha</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation>Ojo derecho 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation>Parte superior del cuerpo 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation>Cara de perfil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation>Ojo derecho 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>Sonrisa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation>Parte superior del cuerpo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation>Tipo de marcador</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation>Rectángulo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation>Elipse</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation>Imagen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation>Pixelado</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation>Difuminar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation>Estilo de marcador</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation>Sólido</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation>Guión</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation>Punto</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation>Punto y guión</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation>Punto, guión y guión</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation>Marcador de color</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation>Ancho del marcador</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation>Máscaras</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation>Ángel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>Oso</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation>Castor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>Gato</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation>Pollo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>Vaca</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation>Diablo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation>Perro</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation>Perro dálmata</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation>Perro feliz</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>Dragón</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation>Elefante 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation>Elefante 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation>Alce</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation>Rana</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation>Fantasma</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation>Jirafa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation>Ñu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation>Cabra</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation>Hipopótamo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>Caballo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation>Caballo gris</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation>Coala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>Mono</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation>Ratón gris</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation>Ratón blanco</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation>Panda</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation>Pingüino</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation>Calabaza 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation>Calabaza 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation>Mapache</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation>Rinoceronte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation>Oveja</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation>Cráneo 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation>Cráneo 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation>Triceratops</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation>Cebra</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation>Imagen de marcador</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
-        <translation>Tamaño de cuadrícula de píxel</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
-        <translation>Ratio de desenfoque</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
+        <translation>Tamaño de cuadrícula de píxel</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
+        <translation>Ratio de desenfoque</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation>Seleccionar el color del marcador</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation>Duro</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation>Enfriamiento</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation>Zoom</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation>Umbral</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>Umbral de luz</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Diferencia alfa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Variación alfa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation>Paseo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation>Patrón</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation>90° semitono 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation>Grupo 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation>Grupo 4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation>Grupo 8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation>Líneas 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation>Mágico 2x2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation>Mágico 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation>Ordenado 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation>Ordenado 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation>Ordenado 8x8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation>Tamaño del patrón</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
-        <translation>Ligereza</translation>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation>Pendiente</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation>Interceptar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation>Espiral 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation>Espiral 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation>Parábola</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation>Franja horizontal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation>Incremento de velocidad</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation>Cantidad</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>Umbral de luma</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation>Elija el color del autómata</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
-        <translation>N° de gotas</translation>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation>Pista de vídeo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation>Pista de audio</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation>Pista de subtítulos</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation>Sencillo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation>Brillo</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>Contraste</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation>Suave normal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation>Duro normal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation>Color suave</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation>Color duro</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Diferencial alfa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation>Color de radiación</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation>Detección de movimiento</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation>Lluvia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation>Caída</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation>Mostrar líneas</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation>Ocultar líneas</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation>Color de la piel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation>Elija el color de la piel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
-        <translation>Sincronización vertical</translation>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation>Ruido</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation>Máscara</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation>Grados</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>Temperatura</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>Formato de vídeo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>Resolución</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation>FPS</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>Restablecer</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation>Aspecto</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation>Escala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation>Suavidad</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation>Elija el color de la viñeta</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation>Ondulaciones</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
-        <translation>Etapa</translation>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation type="unfinished">Ahora</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation type="unfinished">%1 segundos</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
-        <source>Face margin (% of face size)</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
-        <source>e.g. 16:9, 4:3</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
-        <source>Lock viewport</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
-        <source>Debug mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
-        <source>Flip horizontally</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
+        <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
-        <source>Flip vertically</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
-        <source>Width</source>
-        <translation type="unfinished">Ancho</translation>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
-        <source>Aspect ratio width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
-        <source>Height</source>
-        <translation type="unfinished">Alto</translation>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
-        <source>Aspect ratio height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
+        <source>e.g. 16:9, 4:3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
+        <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
+        <source>Debug mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
+        <source>Flip horizontally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
+        <source>Flip vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
+        <source>Width</source>
+        <translation type="unfinished">Ancho</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
+        <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
+        <source>Height</source>
+        <translation type="unfinished">Alto</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
+        <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2811,19 +3338,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished">Seleccione el nuevo color</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/et.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/et.ts
@@ -12,25 +12,40 @@
         <location filename="../qml/About.qml" line="66"/>
         <source>Built from</source>
         <extracomment>Built from &quot;short commit hash&quot;</extracomment>
+        <translation>Kompileerimisjärgu viide</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation>Kompileerimisjärgu viide: %1</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Kasutusel Qt %1</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Veebileht</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>Veebikaamera salvestusprogramm.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>Lihtne programm veebikaamerast piltide ja videote salvestamiseks.</translation>
     </message>
@@ -43,64 +58,64 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
-        <translation type="unfinished">Rakenduse teave</translation>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
+        <translation>Rakenduse teave</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
-        <translation type="unfinished">Kaasteelised</translation>
+        <translation>Kaasteelised</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
-        <translation type="unfinished">Litsents</translation>
+        <translation>Litsents</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
-        <translation type="unfinished">Kolmandate osapoolte litsentsid</translation>
+        <translation>Kolmandate osapoolte litsentsid</translation>
     </message>
 </context>
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation>Lisa videovorming</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation>Muuda videovormingut</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation>Eemalda vorming</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>Vorming</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation>Laius</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation>Kõrgus</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation>Kaadrisagedus</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>Audiokodeki valikud</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>Bitikiirus</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Bitikiirus (bitti/sekundis)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation>Heliseadme valikud</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation>Diskreetimisvorming</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation>Kanalid</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation>Diskreetimissagedus</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation>Latentsusaeg (ms)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation>Vaikus</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>Videohõive</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>Töölaua hõive</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>Audio hõive/esitamine</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>Video teisendamine</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>Virtuaalse kaamera draiver</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>Video taasesitus</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation>Kävitamisel esita sisendeid</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>Raamistikud ja teegid</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation>Video salvestamine</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation>Põhimeetod</translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation>Piltide kaust</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation>Otsi</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>Failivorming</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation>Kvaliteet</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation>Oma fotode salvestamiseks vali kaust</translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation>Laiendused</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation>Otsi laiendusi alamkaustadest</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation>Lisa otsingurada</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation>Eemalda</translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>Uuenda</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>Lisa laienduste otsingurada</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation>Eemalda</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation>Veebikaamera salvestusprogramm.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation>Laadi seadistus asukohast PATH. Kui PATH on tühi, laaditakse seadistus rakenduse kataloogist.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation>OTSINGURADA</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation>OTSINGURADA1;OTSINGURADA2;OTSINGURADA3:...</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation>Otsi valitud laienduste otsingurajalt rekursiivselt.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation>Semikooloniga eraldatud otsinguradade loendis, kust laiendusi otsime.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation>Semikooloniga eraldatud otsingurajad, millelt laadimist vältida.</translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation>%1/video %2.%3</translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation>Foto salvestamine</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation>Video salvestamine</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation>Üldised seaded</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation>Laiendused</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation>Värskendused</translation>
     </message>
@@ -521,7 +578,7 @@
     <message>
         <location filename="../qml/SettingsMenu.qml" line="64"/>
         <source>About</source>
-        <translation type="unfinished">Rakenduse teave</translation>
+        <translation>Rakenduse teave</translation>
     </message>
     <message>
         <location filename="../qml/SettingsMenu.qml" line="71"/>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
-        <translation type="unfinished">Vali uus värv</translation>
+        <translation>Vali uus värv</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation>Teavita uutest versioonidest</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation>Rakenduse käivitamisel näita uuenduste vaadet</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation>Kontrolli versiooniuuendusi</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>iga päev</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>iga kahe päeva järel</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>kord nädalas</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>iga kahe nädala järel</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>kord kuus</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>mitte kunagi</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>Viimati kontrollitud</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>Sinu kasutatav %1 versioon on vana. Viimane versioon on &lt;b&gt;%2&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation>Uuenda nüüd!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>Tänud, et kasutad &lt;b&gt;arendusversiooni&lt;/b&gt;!&lt;br /&gt;Kui märkad vigu või sul tekib ettepanekuid, siis palun anna neist teada.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>Teata veast</translation>
     </message>
@@ -618,12 +685,12 @@
         <translation>Uus versioon on saadaval!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation>Laadi NÜÜD %1 %2 alla!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation>Näita seda teadet ka järgmistel kordadel</translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation>Videokodekite valikud</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation>Bitikiirus</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Bitikiirus (bitti sekundis)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation>Võtmekaadrite samm</translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation>Eemalda</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation>Lisa videoefekt</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation>Otsi efekti</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation>Rakenda efekte jadas</translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation>Lisa efekt</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation>Eemalda kõik efektid</translation>
     </message>
@@ -747,7 +824,7 @@
         <translation>Videovormingu valikud</translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation>Faililaiend</translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation>Muuda sisendit</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation>Lisa sisend</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation>Fail</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation>URL</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation>Kirjeldus</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation>Sisendi pealkiri</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation>Asukoht</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation>Faili asukoht</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation>Otsi</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation>Vali fail, mida soovid lisada sisendina</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation>Muuda</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation>Eemalda</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation>Lisa sisend</translation>
+    </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation>Kõik videofailid</translation>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation>Veebikaameraid ei leidunud</translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation>3GP video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation>AVI video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation>Flash video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation>Animeeritud GIF</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation>MKV video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation>Animeeritud PNG</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation>QuickTime video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation>MP4 video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation>MPEG video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation>Ogg video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation>RealMedia video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation>DVD video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation>WebM video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="167"/>
         <source>Windows Media Video</source>
         <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation>Windows Media Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation>Kõik failid</translation>
-    </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
-    <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation>Muuda</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation>Eemalda</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
-        <translation>Lisa sisend</translation>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation>Veebikaameraid ei leidunud</translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation>Kõik failid</translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation>Väljud puudub</translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation>Virtuaalne kaamera</translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation>Muuda virtuaalset kaamerat</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation>Lisa virtuaalne kaamera</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation>Virtuaalse kaamera nimi</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation>Lisa vorming</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation>Eemalda vormingud</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation>Kaamera kirjelduse ja vormingute väljad ei tohi olla täitmata.</translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation>Virtuaalse kaamera pildiväljund</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation>Virtuaalse kaamera vaikimisi pildiväljund</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation>Otsi</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation>Viga virtuaalsete kaamerate kustutamisel</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation>Palun vali pildifail</translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
-        <source>Add output</source>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
-        <source>Error Creating Virtual Camera</source>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
+        <source>Add output</source>
+        <translation>Lisa väljund</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
+        <source>Error Creating Virtual Camera</source>
+        <translation>Viga virtuaalse kaamera loomisel</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
-        <translation type="unfinished"></translation>
+        <translation>Kustuta kõik väljundid</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
-        <translation type="unfinished">Viga virtuaalsete kaamerate kustutamisel</translation>
+        <translation>Viga virtuaalsete kaamerate kustutamisel</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
-        <translation type="unfinished"></translation>
+        <translation>Määra pildiväljund</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation>Videofailide kaust</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation>Otsi</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation>Salvesta heli</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation>Failivorming</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation>Seadista</translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation>Videokodek</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation>Audiokodek</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation>Vali kaust oma videote salvestamiseks</translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation>Kraabete arv</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation>Lisa tolmu</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation>Raadius</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
-        <translation>Värve</translation>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation>Värvierinevus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation>Näita piirjooni</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation>Piirjoone värv</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation>Skanniplokk</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>Vali värv</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation>Teisendusmaatriks</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>Režiim</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
-        <translation>Loomulik</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
-        <translation>Fikseeritud</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>Sümbolid</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>Font</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation>Otsi</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation>Varjundamine</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>Vaikimisi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation>Varjundamine puudub</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation>Vertikaalne varjundamine</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation>Täismahuline varjundamine</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>Stiil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation>Raster</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>Seade</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation>Kontuur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation>Jõusta kontuur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
-        <translation type="unfinished">Ühitamine</translation>
+        <translation>Ühitamine</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>Kvaliteet</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>Silumine</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation>Silumine puudub</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation>Ühilduv OpenGL&apos;iga</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation>Jõusta täisarvumeetrika</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation>Ära kasuta alampiksli silumist</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation>Keela kirjatüüpide mestimine</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation>Esiplaani värv</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>Taustavärv</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation>Pööratud</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation>Palun vali font</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation>Palun vali esiplaani värv</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation>Palun vali taustavärv</translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>Suurus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>Värv</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation>Vali riba värv</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation>Pehme</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation>Vali filtri värv</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation>Vana värv</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation>Uus värv</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation>Vali asendatav värv</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation>Vali uus värv</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation>Värvitabel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation>Baas</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation>Metall</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation>Soojus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation>Vana foto</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>Punane ja roheline</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation>Seepia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation>X-Pro</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation>Röntgen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>Kollane ja sinine</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation>Kohandatud</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
-        <translation type="unfinished">Aluspalett</translation>
+        <translation>Aluspalett</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation>Palun vali pildifail</translation>
     </message>
@@ -1551,110 +1844,105 @@
         <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="48"/>
         <source>Convolve matrix</source>
         <extracomment>https://en.wikipedia.org/wiki/Kernel_(image_processing)</extracomment>
-        <translation type="unfinished">Konvolutsioonimaatriks</translation>
+        <translation>Konvolutsioonimaatriks</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
-        <translation type="unfinished">Tegur</translation>
+        <translation>Tegur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation>Kallutatus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation>Haarderežiim</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation>Juhuslik ruut</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation>Vertikaalne kasv</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation>Horisontaalne kasv</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
-        <translation type="unfinished">Ringkasv</translation>
+        <translation>Ringkasv</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
-        <translation>Kaadrite arv</translation>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation>Müü-faktor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation>Sigma-faktor</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation>Kaadrisagedus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation>Amplituud</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>Sagedus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation>Rastri suurus</translation>
     </message>
@@ -1664,1138 +1952,1377 @@
         <translation>Kiirus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>Videovorming</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>Eraldusvõime</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>Lähtesta</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation>Nüüd</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation>%1 sekundit</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation>Pildista</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
-        <translation type="unfinished">Igapäevane ehitus</translation>
+        <translation>Igapäevane arendusjärk</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation>Salvesta video</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation>Kuvasuhe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
-        <source>Face margin (% of face size)</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
-        <source>e.g. 16:9, 4:3</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
-        <source>Lock viewport</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
-        <source>Debug mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
-        <source>Flip horizontally</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
+        <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
-        <source>Flip vertically</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
-        <source>Width</source>
-        <translation>Laius</translation>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
-        <source>Aspect ratio width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
-        <source>Height</source>
-        <translation>Kõrgus</translation>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
-        <source>Aspect ratio height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
+        <source>e.g. 16:9, 4:3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
+        <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
+        <source>Debug mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
+        <source>Flip horizontally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
+        <source>Flip vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
+        <source>Width</source>
+        <translation>Laius</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
+        <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
+        <source>Height</source>
+        <translation>Kõrgus</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
+        <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2811,19 +3338,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished">Vali uus värv</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/fr.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/fr.ts
@@ -12,25 +12,40 @@
         <location filename="../qml/About.qml" line="66"/>
         <source>Built from</source>
         <extracomment>Built from &quot;short commit hash&quot;</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>Conçu à base de</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation>Conçu à base de %1</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation>Ouvrez le rapport dans votre navigateur web</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Avec Qt %1</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Site Web</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation>Aller sur le site web %1</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>Application de capture de webcam.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>Une application webcam simple pour la capture d’images et de vidéos.</translation>
     </message>
@@ -40,67 +55,67 @@
     <message>
         <location filename="../qml/AboutDialog.qml" line="32"/>
         <source>About %1</source>
-        <translation type="unfinished"></translation>
+        <translation>A propos de %1</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
-        <translation type="unfinished">À propos</translation>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
+        <translation>A propos</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
-        <translation type="unfinished">Contributeurs</translation>
+        <translation>Contributeurs</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
-        <translation type="unfinished">Licence</translation>
+        <translation>Licence</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
-        <translation type="unfinished">Licences tierces</translation>
+        <translation>Licences tierces</translation>
     </message>
 </context>
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation>Ajouter un format vidéo</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation>Changer le format vidéo</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation>Retirer le format</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>Format</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation>Largeur</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation>Hauteur</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation>Fréquence d&apos;images</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>Options format audio</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>Débit</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Débit (bits/s)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation>Options d&apos;appareil audio</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
-        <translation type="unfinished">Format d’échantillon</translation>
+        <translation>Format de l&apos;échantillon</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
-        <translation type="unfinished">Chaînes</translation>
+        <translation>Canaux</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
-        <translation type="unfinished">Débit d’échantillonnage</translation>
+        <translation>Débit d’échantillonnage</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation>Latence (ms)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation>Configurer l&apos;entrée</translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation>Silence</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation>Configurer la sortie</translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -224,32 +255,32 @@
     <message>
         <location filename="../qml/DownloadDialog.qml" line="32"/>
         <source>Downloading %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Téléchargement de %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>De : %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>A : %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
-        <translation type="unfinished"></translation>
+        <translation>Taille : %1 %2B / %3 %4B</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
-        <translation type="unfinished"></translation>
+        <translation>Vitesse : %1 %2B/s</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Temps restant : %1</translation>
     </message>
 </context>
 <context>
@@ -257,7 +288,7 @@
     <message>
         <location filename="../qml/DownloadFailedDialog.qml" line="31"/>
         <source>Download failed</source>
-        <translation type="unfinished"></translation>
+        <translation>Échec du téléchargement</translation>
     </message>
 </context>
 <context>
@@ -265,64 +296,64 @@
     <message>
         <location filename="../qml/DownloadSucceededDialog.qml" line="31"/>
         <source>Download ready</source>
-        <translation type="unfinished"></translation>
+        <translation>Prêt à télécharger</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
-        <translation type="unfinished"></translation>
+        <translation>Installer la caméra virtuelle ?</translation>
     </message>
 </context>
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>Capture vidéo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>Capture du bureau</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>Lire/capturer l’audio</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>Conversion vidéo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>Pilote virtuel de la caméra</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>Lecture vidéo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation>Lire les sources au démarrage</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>Frameworks et bibliothèques</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation>Capture d&apos;écran</translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation>Capture Audio/Lecture</translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation>Enregistrement vidéo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation>Méthode racine</translation>
@@ -331,37 +362,50 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation>Répertoire d&apos;images</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation>Rechercher</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>Format de fichier</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation>Qualité</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation>Sélectionnez un dossier où enregistrer vos photos</translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation>Fermer le panneau %1</translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
-        <translation type="unfinished"></translation>
+        <translation>Filtre à tubes</translation>
     </message>
 </context>
 <context>
@@ -377,87 +421,100 @@
         <translation>Greffons</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation>Rechercher des greffons dans les sous-dossiers</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation>Ajouter un chemin</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation>Supprimer</translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>Mettre à jour</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation>Mise à jour de la liste des plugins</translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>Ajouter un chemin de recherche des greffons</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation>Supprimer</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation>Application de capture de webcam.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation>Chargement des paramètres depuis le CHEMIN. Si le CHEMIN est vide, le chargement des configurations se fera depuis le répertoire d&apos;application.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation>CHEMIN</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation>Chemin 1 ; Chemin 2 ; Chemin 3…</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
-        <translation type="unfinished"></translation>
+        <translation>Envoyer le débogage de sortie vers un fichier</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
-        <translation type="unfinished"></translation>
+        <translation>FICHIER</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation>Ouvrir une nouvelle instance de %1.</translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
-        <translation type="unfinished"></translation>
+        <translation>Recherche récursive dans les chemins des plugins spécifiés.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
-        <translation type="unfinished"></translation>
+        <translation>Liste de chemins séparés par points-virgules pour la recherche de plugins.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>Liste de chemins séparés par points-virgules pour éviter le chargement.</translation>
     </message>
 </context>
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
-        <translation type="unfinished"></translation>
+        <translation>%1/Vidéo %2.%3</translation>
     </message>
 </context>
 <context>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation>Capture d&apos;image</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation>Enregistrement vidéo</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation>Options générales</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation>Greffons</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation>Mises à jour</translation>
     </message>
@@ -516,12 +573,12 @@
     <message>
         <location filename="../qml/SettingsMenu.qml" line="58"/>
         <source>Donate</source>
-        <translation type="unfinished"></translation>
+        <translation>Faire un don</translation>
     </message>
     <message>
         <location filename="../qml/SettingsMenu.qml" line="64"/>
         <source>About</source>
-        <translation type="unfinished">À propos</translation>
+        <translation>À propos</translation>
     </message>
     <message>
         <location filename="../qml/SettingsMenu.qml" line="71"/>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
-        <translation type="unfinished">Sélectionner la nouvelle couleur</translation>
+        <translation>Sélectionner la nouvelle couleur</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation>Notifier les nouvelles versions</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
-        <translation type="unfinished">Afficher les dialogues mis à jour.</translation>
+        <translation>Afficher les dialogues mis à jour</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation>Vérifier les nouvelles versions</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>Quotidiennement</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>Tous les deux jours</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>Hebdomadairement</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>Toutes les deux semaines</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>Mensuellement</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>Jamais</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>Dernière mise à jour</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>Votre version de %1 est périmée. La dernière version est &lt;b&gt;%2&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation>Mettez-vous à niveau !</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>Merci d&apos;utiliser une &lt;b&gt;version de développement&lt;/b&gt; ! &lt;br /&gt; Cela serait vraiment utile si vous pouvez signaler tout bug ou suggestion.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>Signaler une erreur</translation>
     </message>
@@ -615,17 +682,17 @@
     <message>
         <location filename="../qml/UpdatesDialog.qml" line="33"/>
         <source>New version available!</source>
-        <translation type="unfinished">Nouvelle version disponible !</translation>
+        <translation>Nouvelle version disponible !</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation>Télécharger %1 %2 MAINTENANT !</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
-        <translation type="unfinished">Montrer ce dialogue la prochaine fois</translation>
+        <translation>Montrer ce dialogue la prochaine fois</translation>
     </message>
 </context>
 <context>
@@ -633,7 +700,7 @@
     <message>
         <location filename="../qml/VCamInstallFailedDialog.qml" line="31"/>
         <source>Installation failed</source>
-        <translation type="unfinished"></translation>
+        <translation>Échec de l&apos;installation</translation>
     </message>
 </context>
 <context>
@@ -641,12 +708,12 @@
     <message>
         <location filename="../qml/VCamInstallSucceededDialog.qml" line="31"/>
         <source>Installation succeeded</source>
-        <translation type="unfinished"></translation>
+        <translation>Installation réussie</translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
-        <translation type="unfinished"></translation>
+        <translation>Redémarrer Webcamoid ?</translation>
     </message>
 </context>
 <context>
@@ -654,12 +721,12 @@
     <message>
         <location filename="../qml/VCamManualDownloadDialog.qml" line="31"/>
         <source>Can&apos;t get latest version</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible d&apos;obtenir la dernière version</translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
-        <translation type="unfinished"></translation>
+        <translation>Télécharger manuellement la caméra virtuelle ?</translation>
     </message>
 </context>
 <context>
@@ -667,23 +734,23 @@
     <message>
         <location filename="../qml/VideoCodecOptions.qml" line="27"/>
         <source>Video Codec Options</source>
-        <translation type="unfinished">Options des codecs vidéos.</translation>
+        <translation>Options des codecs vidéos</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
-        <translation type="unfinished">Débit</translation>
+        <translation>Débit</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Débit (bits/s)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
-        <translation type="unfinished"></translation>
+        <translation>Allongement d&apos;images-clés</translation>
     </message>
 </context>
 <context>
@@ -693,35 +760,45 @@
         <source>Remove</source>
         <translation>Supprimer</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation>Supprimer l&apos;effet vidéo %1</translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
     <message>
         <location filename="../qml/VideoEffectsDialog.qml" line="36"/>
         <source>Add video effect</source>
-        <translation type="unfinished">Ajouter des effets vidéos</translation>
+        <translation>Ajouter des effets vidéos</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
-        <translation type="unfinished">Rechercher un effet</translation>
+        <translation>Rechercher un effet</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation>Recherche d&apos;effet vidéo</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>Effet de chaîne</translation>
     </message>
 </context>
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation>Ajouter un effet</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation>Supprimer tous les effets</translation>
     </message>
@@ -747,7 +824,7 @@
         <translation>Options de format vidéo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation>Extension de fichier</translation>
     </message>
@@ -755,180 +832,280 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation>Éditer la source</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation>Ajouter une source</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation>Fichier</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation>URL</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation>Description</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation>Titre de la source</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation>Chemin</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation>Chemin du fichier</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation>Rechercher</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation>Recherche du fichier à utiliser comme source</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation>Choisir le fichier à ajouter comme source</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation>Modifier</translation>
+    </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation>Tous les fichiers vidéo</translation>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation>Supprimer</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation>Ajouter une source</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation>Configurer la source</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation>Aucune webcam trouvée</translation>
     </message>
+</context>
+<context>
+    <name>VideoLayer</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation>Vidéo 3GP</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation>Vidéo AVI</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation>Bitmap Windows</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation>Curseur Microsoft Windows</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation>Vidéo Flash</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation>GIF animé</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation>Format d&apos;échange graphique</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation>Image icône d&apos;Apple</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation>Icône Microsoft Windows</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation>&apos;Joint Photographic Experts Group&apos;</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation>Vidéo MKV</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation>PNG animé</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation>&apos;Multiple-image Network Graphics&apos;</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation>Vidéo QuickTime</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation>Vidéo MP4</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation>Vidéo MPEG</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation>Vidéo Ogg</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation>Bitmap portable</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation>Graymap portable</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation>&apos;Portable Network Graphics&apos;</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation>Pixmap portable</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation>Vidéo RealMedia</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation>&apos;Scalable Vector Graphics&apos;</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation>&apos;Truevision TGA&apos;</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation>&apos;Tagged Image File Format&apos;</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation>Vidéo DVD</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation>&apos;Wireless Bitmap&apos;</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation>Vidéo WebM</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
-        <translation>Windows Media Video</translation>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
+        <translation>&apos;WebP&apos;</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation>Tous les fichiers</translation>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <translation>Windows Media Vidéo</translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation>Modifier</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation>&apos;X11 Bitmap&apos;</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation>Supprimer</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation>&apos;X11 Pixmap&apos;</translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
-        <translation>Ajouter une source</translation>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
+        <translation>Tous les fichiers image et vidéo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation>Aucune webcam trouvée</translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation>Tous les fichiers</translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>Pas de sortie</translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
-        <translation type="unfinished"></translation>
+        <translation>Caméra virtuelle</translation>
     </message>
 </context>
 <context>
@@ -941,66 +1118,66 @@
     <message>
         <location filename="../qml/VideoOptions.qml" line="44"/>
         <source>Outputs</source>
-        <translation type="unfinished">Sorties</translation>
+        <translation>Sorties</translation>
     </message>
 </context>
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation>Éditer la caméra virtuelle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation>Ajouter une caméra virtuelle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation>Nom de la caméra virtuelle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation>Ajouter un format</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
-        <translation type="unfinished"></translation>
+        <translation>Effacer les formats</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible de modifier la caméra virtuelle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible d&apos;ajouter la caméra virtuelle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
-        <translation type="unfinished"></translation>
+        <translation>Erreur d&apos;édition de la caméra virtuelle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
-        <translation type="unfinished"></translation>
+        <translation>Erreur lors de l&apos;ajout de la caméra virtuelle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
-        <translation type="unfinished"></translation>
+        <translation>Erreur de création de la caméra virtuelle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
-        <translation type="unfinished">Les formats et la description de la caméra ne peuvent être vide</translation>
+        <translation>Les formats et la description de la caméra ne peuvent être vides.</translation>
     </message>
 </context>
 <context>
@@ -1008,12 +1185,12 @@
     <message>
         <location filename="../qml/VideoOutputOptions.qml" line="61"/>
         <source>Edit</source>
-        <translation type="unfinished">Modifier</translation>
+        <translation>Modifier</translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputOptions.qml" line="73"/>
         <source>Can&apos;t Edit The Virtual Camera</source>
-        <translation type="unfinished">Impossible d&apos;éditer la caméra virtuelle</translation>
+        <translation>Impossible d&apos;éditer la caméra virtuelle</translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputOptions.qml" line="80"/>
@@ -1023,12 +1200,12 @@
     <message>
         <location filename="../qml/VideoOutputOptions.qml" line="95"/>
         <source>Error removing the virtual camera</source>
-        <translation type="unfinished"></translation>
+        <translation>Erreur de suppression de la caméra virtuelle</translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputOptions.qml" line="99"/>
         <source>Can&apos;t Remove The Virtual Camera</source>
-        <translation type="unfinished">Impossible de supprimer la caméra virtuelle</translation>
+        <translation>Impossible de supprimer la caméra virtuelle</translation>
     </message>
 </context>
 <context>
@@ -1036,30 +1213,35 @@
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="28"/>
         <source>Virtual camera output picture</source>
-        <translation type="unfinished"></translation>
+        <translation>Image de sortie de la caméra virtuelle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
-        <translation type="unfinished"></translation>
+        <translation>Image de sortie par défaut de la caméra virtuelle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation>Rechercher</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
-        <translation type="unfinished"></translation>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
+        <translation>Recherche d&apos;une image à utiliser en image de sortie par défaut</translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation>Impossible de définir l&apos;image de la caméra virtuelle</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
-        <translation type="unfinished">Erreur lors de la suppression des caméras virtuelles</translation>
+        <translation>Erreur de suppression des caméras virtuelles</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation>Veuillez choisir un fichier d’image</translation>
     </message>
@@ -1067,100 +1249,131 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
-        <translation type="unfinished"></translation>
+        <translation>La caméra virtuelle est périmée (%1), installez la dernière version (%2) ?</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
-        <translation type="unfinished"></translation>
+        <translation>Installer</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation>Installer une caméra virtuelle</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation>Configurer la sortie</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajouter une sortie</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
-        <translation type="unfinished"></translation>
+        <translation>Erreur de création de la caméra virtuelle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprimer toutes les sorties</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
-        <translation type="unfinished"></translation>
+        <translation>Erreur de suppression des caméras virtuelles</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
-        <translation type="unfinished">Erreur lors de la suppression des caméras virtuelles</translation>
+        <translation>Erreur de suppression des caméras virtuelles</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
-        <translation type="unfinished"></translation>
+        <translation>Régler l&apos;image de sortie</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
-        <translation type="unfinished"></translation>
+        <translation>La caméra virtuelle n&apos;est pas installée, voulez-vous l&apos;installer ?</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
-        <translation type="unfinished"></translation>
+        <translation>La caméra virtuelle n&apos;est pas prise en charge par cette plate-forme</translation>
     </message>
 </context>
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation>Répertoire de vidéos</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation>Rechercher</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation>Recherche de dossier pour sauvegarder les vidéos</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation>Enregistrer l&apos;audio</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation>Format de fichier</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation>Configurer</translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation>Configurer le format du fichier</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation>Codec vidéo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation>Configurer le codec vidéo</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation>Codec audio</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation>Configurer le codec audio</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
-        <translation type="unfinished">Sélectionner le fichier où sauvegarder vos vidéos</translation>
+        <translation>Choisir le dossier où sauvegarder les vidéos</translation>
     </message>
 </context>
 <context>
@@ -1168,62 +1381,61 @@
     <message>
         <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="40"/>
         <source>Number of scratches</source>
-        <translation type="unfinished"></translation>
+        <translation>Nombre de rayures</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation>Ajouter de la poussière</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation>Rayon</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
-        <translation>Nombre de couleurs</translation>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation>Différence des couleurs</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation>Montrer les bordures</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation>Couleur de ligne</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
-        <translation type="unfinished"></translation>
+        <translation>Bloc de numérisation</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>Choisir une couleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation>Matrice d’application linéaire</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>Mode</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
-        <translation>Naturel</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
-        <translation>Fixe</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>Symboles</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>Police de caractères</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation>Rechercher</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
-        <source>Hinting</source>
+        <source>Search the font to be used</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
+        <source>Hinting</source>
+        <translation>Indice</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>Par défaut</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
-        <translation type="unfinished"></translation>
+        <translation>Pas d&apos;indice</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
-        <translation type="unfinished"></translation>
+        <translation>Indice vertical</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
-        <translation type="unfinished"></translation>
+        <translation>Indices complets</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>Style</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
-        <translation type="unfinished"></translation>
+        <translation>Bitmap</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>Appareil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
-        <translation type="unfinished"></translation>
+        <translation>Contour</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
-        <translation type="unfinished"></translation>
+        <translation>Forcer le contour</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
-        <translation type="unfinished"></translation>
+        <translation>Correspondance</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>Qualité</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>Antialias</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation>Pas d’antialias</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation>Compatible avec OpenGL</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
-        <translation type="unfinished"></translation>
+        <translation>Forcer les métriques intégrales</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
-        <translation type="unfinished"></translation>
+        <translation>Pas d&apos;anticrénelage sous-pixel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
-        <translation type="unfinished"></translation>
+        <translation>Pas de fusion des polices</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation>Couleur de premier plan</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>Couleur d&apos;arrière-plan</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation>Inversé</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation>Veuillez sélectionner une police</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation>Sélectionnez la couleur de premier plan</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation>Sélectionnez la couleur d&apos;arrière-plan</translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>Taille</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>Couleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation>Sélectionnez la couleur des bandes</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation>Doux</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation>Sélectionnez la couleur à filtrer</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation>Ancienne couleur</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation>Nouvelle couleur</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation>Sélectionner la couleur à remplacer</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation>Sélectionner la nouvelle couleur</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation>Table des couleurs</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation>Base</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation>Métal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation>Chaleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation>Ancienne photo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>Rouge &amp; vert</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation>Sépia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation>X-Pro</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation>Rayon X</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>Jaune &amp; bleu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation>Personnalisé</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation>Palette source</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation>Veuillez choisir un fichier d’image</translation>
     </message>
@@ -1551,110 +1844,105 @@
         <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="48"/>
         <source>Convolve matrix</source>
         <extracomment>https://en.wikipedia.org/wiki/Kernel_(image_processing)</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>Convertir la matrice</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation>Facteur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
-        <translation type="unfinished"></translation>
+        <translation>&apos;Bias&apos;</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Mode de capture</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
-        <translation type="unfinished"></translation>
+        <translation>Carré aléatoire</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
-        <translation type="unfinished"></translation>
+        <translation>Hausse verticale</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
-        <translation type="unfinished"></translation>
+        <translation>Hausse horizontale</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
-        <translation type="unfinished"></translation>
+        <translation>Hausse des bagues</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
-        <translation type="unfinished"></translation>
+        <translation>Taille du bloc</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
-        <translation>Nombre d’images</translation>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation>Mu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation>Sigma</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation>Fréquence d&apos;images</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation>Amplitude</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>Fréquence</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation>Taille de grille</translation>
     </message>
@@ -1664,1165 +1952,1532 @@
         <translation>Vitesse</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation>Niveau de zoom</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation>Force</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>Mode Canny</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
+        <translation>Seuil Canny</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation>Égaliseur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation>Inverser</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>Fichier Haar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>Œil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation>Lunettes</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
-        <translation type="unfinished"></translation>
+        <translation>Face avant alternative 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
-        <translation type="unfinished"></translation>
+        <translation>Face avant alternative 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
-        <translation type="unfinished"></translation>
+        <translation>Face avant alternative 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
-        <translation type="unfinished"></translation>
+        <translation>Faces frontales par défaut</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
-        <translation type="unfinished"></translation>
+        <translation>Corps entier</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation>Œil gauche 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation>Bas du corps</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
-        <translation type="unfinished"></translation>
+        <translation>Grande paire d&apos;yeux</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
-        <translation type="unfinished"></translation>
+        <translation>Petite paire d&apos;yeux</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation>Oreille gauche</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation>Œil gauche 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation>Bouche</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>Nez</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation>Oreille droite</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation>Œil droit 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation>Haut de corps 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
-        <translation type="unfinished"></translation>
+        <translation>Visage de profil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation>Œil droit 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>Sourire</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation>Haut de corps</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation>Type de marqueur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation>Rectangle</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation>Ellipse</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation>Image</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation>Pixeliser</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation>Flouter</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
-        <translation type="unfinished"></translation>
+        <translation>Flou externe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
-        <translation type="unfinished">Image de fond</translation>
+        <translation>Image de fond</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation>Style de marqueur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation>Solide</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation>Tirets</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation>Points</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation>Tirets + Points</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation>Tirets + Points + Points</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation>Couleur de marqueur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation>Largeur de marqueur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation>Masques</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation>Ange</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>Ours</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation>Castor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>Chat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation>Poule</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>Vache</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation>Diable</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation>Chien</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation>Dalmatien</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation>Chien heureux</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>Dragon</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation>Éléphant 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation>Éléphant 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation>Wapiti</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation>Grenouille</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation>Fantôme</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation>Girafe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation>Gnou</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation>Chèvre</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation>Hippopotame</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>Cheval</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation>Cheval gris</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation>Koala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>Singe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation>Souris grise</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation>Souris blanche</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation>Panda</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation>Pingouin</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation>Citrouille 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation>Citrouille 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation>Raton laveur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation>Rhinocéros</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation>Mouton</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation>Squelette 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation>Squelette 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation>Tricératops</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation>Zèbre</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
-        <translation type="unfinished"></translation>
+        <translation>Photo de marqueur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
-        <translation type="unfinished">Remplacer le visage avec cette image</translation>
+        <translation>Remplacer le visage par cette image</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
-        <translation type="unfinished">Arrière-plans</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
+        <translation>Arrière-plan</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
+        <translation>Carré noir</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
         <source>Background picture</source>
-        <translation type="unfinished">Image d&apos;arrière-plan</translation>
+        <translation>Image d&apos;arrière-plan</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
         <source>Replace background with this picture</source>
-        <translation type="unfinished">Remplacer l&apos;arrière-plan avec cette image</translation>
+        <translation>Remplacer l&apos;arrière-plan par cette image</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
+        <translation>Taille de la grille de pixels</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
         <source>Blur radius</source>
         <translation>Niveau de flou</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
         <source>Face Area Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Réglages de la zone du visage</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
         <source>Advanced face area settings for 
 background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
         <source>Width Adjust %</source>
-        <translation type="unfinished">Réglage de la largeur %</translation>
+        <translation>Régler la largeur (%)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
         <source>Height Adjust %</source>
-        <translation type="unfinished">Réglage de la hauteur %</translation>
+        <translation>Régler la hauteur %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
         <source>Round Area</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
-        <translation type="unfinished"></translation>
+        <translation>Zone circulaire</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation>Sélectionner la couleur du marqueur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation>Fort</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
-        <translation type="unfinished"></translation>
+        <translation>Refroidissement</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation>Dissoudre</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation>Zoom</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation>Bouclier</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>Seuil Luma</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>Diff Alpha</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>Variation Alpha</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
-        <translation type="unfinished"></translation>
+        <translation>Écart</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation>Modèle</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
-        <translation type="unfinished"></translation>
+        <translation>90° Halftone 6 x 6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
-        <translation type="unfinished"></translation>
+        <translation>Groupe 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
-        <translation type="unfinished"></translation>
+        <translation>Groupe 4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
-        <translation type="unfinished"></translation>
+        <translation>Groupe 8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
-        <translation type="unfinished"></translation>
+        <translation>Lignes 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
-        <translation type="unfinished"></translation>
+        <translation>Magique 2x2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
-        <translation type="unfinished"></translation>
+        <translation>Magique 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
-        <translation type="unfinished"></translation>
+        <translation>Ordonné 4 x 4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
-        <translation type="unfinished"></translation>
+        <translation>Ordonné 6 x 6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
-        <translation type="unfinished"></translation>
+        <translation>Ordonné 8 x 8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
+        <translation>Motif bitmap</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
-        <source>Pattern size</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
+        <source>Pattern size</source>
+        <translation>Taille du motif</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
+        <translation>Pente</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
-        <translation type="unfinished"></translation>
+        <translation>Intercepter</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation>Spirale 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation>Spirale 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation>Parabole</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation>Bande horizontale</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
-        <translation type="unfinished">Augmentation de la vitesse</translation>
+        <translation>Augmenter la vitesse</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
-        <translation type="unfinished"></translation>
+        <translation>Montant</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>Seuil Luma</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>Choisir la couleur de l&apos;automate</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
-        <translation>Nombre de gouttes</translation>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation>Sélectionner</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation>Couleur du curseur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation>Sélectionner la couleur du curseur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
+        <translation>Longueur de chute mini</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
-        <translation type="unfinished">Taille max. supprimée</translation>
+        <translation>Longueur de chute maxi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
-        <translation>Vitesse min.</translation>
+        <translation>Vitesse mini</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
-        <translation>Vitesse max.</translation>
+        <translation>Vitesse maxi</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation>Afficher le curseur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation>Piste vidéo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation>Piste audio</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation>Piste des sous-titres</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation>Simple</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation>Luminosité</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>Contraste</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
-        <translation type="unfinished"></translation>
+        <translation>Doux normal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
-        <translation type="unfinished"></translation>
+        <translation>Dur normal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation>Couleur douce</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation>Couleur dure</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>Différence Alpha</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
-        <translation type="unfinished"></translation>
+        <translation>Couleur de radiation</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation>Détection du mouvement</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation>Pluie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
+        <translation>Dégradation</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
-        <translation type="unfinished">Montrer les lignes</translation>
+        <translation>Montrer les lignes</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
-        <translation type="unfinished">Cacher les lignes</translation>
+        <translation>Cacher les lignes</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
-        <translation type="unfinished">Cacher la couleur</translation>
+        <translation>Cacher la couleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
-        <translation type="unfinished">Choisir la couleur cachée</translation>
+        <translation>Choisir la couleur cachée</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
-        <translation>Synchronisation verticale</translation>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation>Bruit</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation>Masque</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation>Degrés</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>Température</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>Format vidéo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>Résolution</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation>IPS</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>Réinitialiser</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation>Rapport hauteur/largeur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation>Échelle</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation>Douceur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation>Sélectionner la couleur de la miniature</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation>Ondulations</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
-        <translation>Phase</translation>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
-        <translation type="unfinished">Utilisé le flash</translation>
+        <translation>Utiliser le flash</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation>Maintenant</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation>%1 secondes</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation>Prendre une photo</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
-        <translation type="unfinished"></translation>
+        <translation>%1/Photo %2.%3</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
+        <translation>Construction du jour</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation>Effets vidéo</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation>Utiliser le flash pour prendre une photo</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation>Minuterie photo</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation>Temps d&apos;attente avant la prise de la photo</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation>Paramètres des sources et des sorties</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation>Ouvrir le menu paramètres des sources et des sorties</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation>Ouvrir la dernière photo</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation>Ouvrir la dernière photo prise</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation>Mode de capture d&apos;image</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation>Faire une capture et l&apos;enregistrer en fichier image</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation>Mettre %1 en mode capture d&apos;image</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation>Enregistrer une vidéo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation>Arrêter l&apos;enregistrement vidéo</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation>Mode de capture vidéo</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation>Mettre %1 en mode enregistrement vidéo</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation>Lancer l&apos;enregistrement dans un fichier vidéo</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation>Arrêter l&apos;enregistrement vidéo en cours</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation>Ouvrir la dernière vidéo</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation>Ouvrir la dernière vidéo créée</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
-        <translation type="unfinished"></translation>
+        <translation>Rapport d&apos;aspect</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
-        <translation type="unfinished"></translation>
+        <translation>Bracketing visage
+durée (secondes)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
-        <translation type="unfinished"></translation>
+        <translation>Nombre de bracket</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
-        <translation type="unfinished"></translation>
+        <translation>Taux zoom arrière</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
-        <translation type="unfinished"></translation>
+        <translation>Taux zoom avant</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
+        <translation>Gonflement du visage (% taille du visage)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
         <source>Face margin (% of face size)</source>
+        <translation>Bordure de la face (% taille de la face)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
-        <source>e.g. 16:9, 4:3</source>
+        <source>Margin bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
+        <source>e.g. 16:9, 4:3</source>
+        <translation>ex. 16:9, 4:3</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
         <source>Lock viewport</source>
-        <translation type="unfinished"></translation>
+        <translation>Verrouiller la fenêtre aperçu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
         <source>Debug mode</source>
-        <translation type="unfinished">Mode debug</translation>
+        <translation>Mode débogage</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
         <source>Flip horizontally</source>
-        <translation type="unfinished">Retourner horizontalement</translation>
+        <translation>Retourner à l&apos;horizontale</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
         <source>Flip vertically</source>
-        <translation type="unfinished">Retourner verticalement</translation>
+        <translation>Retourner à la verticale</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
         <source>Width</source>
         <translation>Largeur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
         <source>Aspect ratio width</source>
-        <translation type="unfinished"></translation>
+        <translation>Largeur du rapport d&apos;aspect</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
         <source>Height</source>
         <translation>Hauteur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
         <source>Aspect ratio height</source>
+        <translation>Hauteur du rapport d&apos;aspect</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
+        <source>Levels</source>
+        <translation>Niveaux</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
+        <source>Add color</source>
+        <translation>Ajouter une couleur</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
+        <source>Clear all colors</source>
+        <translation>Effacer toutes les couleurs</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
+        <source>Select the color to add</source>
+        <extracomment>Select the color to add to the color table</extracomment>
+        <translation>Choisir la couleur à ajouter</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="106"/>
+        <source></source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Gamma/share/qml/main.qml" line="40"/>
+        <source>Gamma</source>
+        <translation>&apos;Gamma&apos;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
+        <source>Hue</source>
+        <translation>Teinte</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
+        <source>Saturation</source>
+        <translation>&apos;Saturation&apos;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
+        <source>Luminance</source>
+        <translation>Luminosité</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation>Forcer la fréquence d&apos;images</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
-        <translation type="unfinished">Rapide</translation>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished">Sélectionner la nouvelle couleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
-        <translation type="unfinished">Linéaire</translation>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation type="unfinished">Ignorer</translation>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
-        <translation type="unfinished">Passer</translation>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
-        <source>Levels</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
-        <source>Add color</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
-        <source>Clear all colors</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
-        <source>Select the color to add</source>
-        <extracomment>Select the color to add to the color table</extracomment>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="106"/>
-        <source></source>
-        <translation></translation>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Gamma/share/qml/main.qml" line="40"/>
-        <source>Gamma</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
-        <source>Hue</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
-        <source>Saturation</source>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
-        <source>Luminance</source>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/gl.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/gl.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
-        <source>Using Qt %1</source>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/About.qml" line="80"/>
+        <source>Using Qt %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished"></translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
@@ -113,12 +128,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -131,33 +146,41 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation type="unfinished"></translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation type="unfinished"></translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
+        <source>Update</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
-        <source>Update</source>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation type="unfinished"></translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation type="unfinished"></translation>
     </message>
@@ -618,12 +685,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation type="unfinished"></translation>
     </message>
@@ -747,7 +824,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation type="unfinished"></translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1664,1138 +1952,1377 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
-        <source>Face margin (% of face size)</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
-        <source>e.g. 16:9, 4:3</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
-        <source>Lock viewport</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
-        <source>Debug mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
-        <source>Flip horizontally</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
+        <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
-        <source>Flip vertically</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
-        <source>Width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
-        <source>Aspect ratio width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
-        <source>Height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
-        <source>Aspect ratio height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
+        <source>e.g. 16:9, 4:3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
+        <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
+        <source>Debug mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
+        <source>Flip horizontally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
+        <source>Flip vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
+        <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
+        <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
+        <source>Height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
+        <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2811,19 +3338,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/he.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/he.ts
@@ -15,22 +15,37 @@
         <translation>נבנה מתוך</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation>נבנה מתוך %1</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation>פתיחת ההגשה בדפדפן</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>על גבי Qt %1</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>אתר</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation>מעבר לאתר של %1</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>יישומון לכידה ממצלמה.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>יישומון פשוט לצילום והסרטה מהמצלמה.</translation>
     </message>
@@ -43,25 +58,25 @@
         <translation>על %1</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation>על אודות</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation>מתנדבים</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation>רישיון</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation>רישיונות צד־שלישי</translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation>הוספת תצורת וידאו</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation>שינוי תצורת וידאו</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation>הסרת תצורה</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>תצורה</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation>רוחב</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation>גובה</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation>קצב תמוניות</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>אפשרויות מפענח שמע</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>קצב סיביות</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>קצב סיביות (סיביות לשנייה)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation>אפשרויות התקן שמע</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation>תבנית לדוגמה</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation>ערוצים</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation>קצב דגימה</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation>השהיה (מילישניות)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation>הגדרת קלט</translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation>שקט</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation>הגדרת פלט</translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation>%1 בהורדה</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation>מתוך: %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation>אל: %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation>גודל: %1 %2B / %3 %4B</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation>מהירות: %1 %2B לשנייה</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation>זמן שנותר: %1</translation>
     </message>
@@ -268,7 +299,7 @@
         <translation>ההורדה מוכנה</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation>להתקין את המצלמה הווירטואלית?</translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>לכידת וידאו</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>לכידת שולחן עבודה</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>לכידה/נגינה של שמע</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>המרת וידאו</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>מנהל התקן וירטואלי למצלמה</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>נגינת וידאו</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation>ניגון מקורות עם ההתחלה</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>סביבות עבודה וספריות</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation>לכידת המסך</translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation>לכידת/נגינת שמע</translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation>הקלטת וידאו</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation>שיטת שורש</translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation>תיקיית תמונות</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation>חיפוש</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation>חיפוש בספרייה כדי לשמור תמונות</translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>מבנה קובץ</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation>איכות</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation>נא לבחור את התיקייה לשמירת התמונות שלך</translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation>סגירת הלוח %1</translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation>מסך PipeWire</translation>
     </message>
@@ -377,76 +421,89 @@
         <translation>תוספים</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation>חיפוש תוספים בתת־תיקיות</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation>הוספת נתיב</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation>הסרה</translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>עדכון</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation>עדכון רשימת התוספים</translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>הוספת נתיב חיפוש תוספים</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation>הסרה</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation>יישומון לכידה ממצלמה.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation>טעינת הגדרות מ־PATH. אם ה־PATH ריק, יש לטעון הגדרות מתיקיית היישומון.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation>PATH</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation>PATH1;PATH2;PATH3;...</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation>שליחת פלט ניפוי שגיאות לקובץ</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation>קובץ</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation>פתיחת עותק חדש של %1.</translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation>חיפוש בנתיבי התוספים האלו באופן רקורסיבי.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation>רשימה מופרדת בנקודה פסיק לחיפוש אחר תוספים.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation>רשימה מופרדת בפסיקים של נתיבים אותם אין לטעון.</translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation>%1/סרטון %2.%3</translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation>לכידת תמונה</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation>הקלטת וידאו</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation>אפשרויות כלליות</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation>תוספים</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation>עדכונים</translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation>נא לבחור את הצבע החדש</translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation>צבע %1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation>הסרת הצבע %1</translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation>הצגת הודעה על גרסאות חדשות</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation>הצגת תיבת דו־שיח עדכונים</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation>בדיקה לאיתור גרסאות חדשות</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>יומית</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>כל יומיים</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>שבועית</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>כל שבועיים</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>חודשית</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>אף פעם</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>עדכון אחרון</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>הגרסה של ה־%1 שלך מיושנת. הגרסה העדכנית ביותר היא &lt;b&gt;%2&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation>לשדרג כעת!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>תודה לך על השימוש ב&lt;b&gt;גרסת הפיתוח&lt;/b&gt;!&lt;br /&gt;נודה לך מאוד אם יתאפשר לך לדווח על תקלות או להציע הצעות שיש לך.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>דיווח על תקלה</translation>
     </message>
@@ -618,12 +685,12 @@
         <translation>גרסה חדשה זמינה!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation>להוריד את %1 %2 עכשיו!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation>להציג את תיבת הדו־שיח הזו בפעם הבאה</translation>
     </message>
@@ -644,7 +711,7 @@
         <translation>ההתקנה הצליחה</translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation>להפעיל את Webcamoid מחדש?</translation>
     </message>
@@ -657,7 +724,7 @@
         <translation>אי אפשר למשוך את הגרסה האחרונה</translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation>להוריד את המצלמה הווירטואלית ידנית?</translation>
     </message>
@@ -670,18 +737,18 @@
         <translation>אפשרויות מפענח וידאו</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation>קצב סיביות</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation>קצב סיביות (סיביות לשנייה)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation>פסע שקופיות מפתח</translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation>הסרה</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation>הסרת אפקטי הווידאו %1</translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation>הוספת אפקט וידאו</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation>חיפוש אפקט</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation>חיפוש אפקט וידאו</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation>אפקט שרשרת</translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation>הוספת אפקט</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation>הסרת כל האפקטים</translation>
     </message>
@@ -747,7 +824,7 @@
         <translation>אפשרויות תסדיר וידאו</translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation>סיומת קובץ</translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation>עריכת מקור</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation>הוספת מקור</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation>קובץ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation>כתובת</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation>תיאור</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation>כותרת המקור</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation>נתיב</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation>נתיב הקובץ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation>חיפוש</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation>חיפוש קובץ שישמש כמשאב</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation>נא לבחור את הקובץ שיתווסף כמקור</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation>כל קובצי הווידאו</translation>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation>עריכה</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation>הסרה</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation>הוספת מקור</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation>הגדרת מקור</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation>לא נמצאו מצלמות רשת</translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation>וידאו 3GP</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation>וידאו AVI</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation>מפת סיביות של Windows</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation>סמן של Microsoft Windows</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation>וידאו Flash</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation>GIF מונפש</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation>תצורת גרפיקה להחלפה</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation>תמונת סמל של Apple</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation>סמל של Microsoft Windows</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation>קבוצת מומחי הצילום המאוחדת</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation>וידאו MKV</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation>PNG מונפש</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation>גרפיקת רשת מרובת תמונות</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation>וידאו QuickTime</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation>וידאו MP4</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation>וידאו MPEG</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation>וידאו Ogg</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation>מפת סיביות ניידת</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation>מפת אפורים ניידת</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation>גרפיקת רשת ניידת</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation>מפת פיקסלים ניידת</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation>וידאו RealMedia</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation>גרפיקת וקטורים נמתחת</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation>TGA מבית Truevision</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation>תצורת קובץ תמונה מתויגת</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation>וידאו DVD</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation>מפת סיביות אלחוטית</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation>וידאו WebM</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
+        <translation>WebP‎</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="167"/>
         <source>Windows Media Video</source>
         <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation>וידאו Windows Media</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation>כל הקבצים</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation>מפת סיביות X11</translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation>עריכה</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation>מפת פיקסלים X11</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation>הסרה</translation>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
+        <translation>כל קובצי התמונה והווידאו</translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
-        <translation>הוספת מקור</translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation>כל הקבצים</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation>לא נמצאו מצלמות רשת</translation>
-    </message>
-</context>
-<context>
-    <name>VideoLayer</name>
-    <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation>ללא פלט</translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation>מצלמה וירטואלית</translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation>עריכת מצלמה וירטואלית</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation>הוספת מצלמה וירטואלית</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation>שם מצלמה וירטואלית</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation>הוספת תצורה</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation>מחיקת תצורות</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation>לא ניתן לערוך את המצלמה הווירטואלית</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation>לא ניתן להוסיף את המצלמה הווירטואלית</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation>שגיאה בעריכת המצלמה הווירטואלית</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation>שגיאה בהוספת המצלמה הווירטואלית</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation>שגיאה ביצירת המצלמה הווירטואלית</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation>תיאור המצלמה והתצורות לא יכולים להישאר ריקים.</translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation>תמונת פלט של מצלמה וירטואלית</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation>תמונת פלט בררת המחדל של מצלמה וירטואלית</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation>חיפוש</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
+        <translation>חיפוש תמונה שתשמש כתמונת הפלט כברירת המחדל</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="95"/>
         <source>Can&apos;t set virtual camera picture</source>
         <translation>לא ניתן להגדיר תמונה במצלמה הווירטואלית</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation>שגיאה בהסרת מצלמות וירטואליות</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation>נא לבחור קובץ תמונה</translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation>המצלמה הווירטואלית אינה עדכנית (%1), להתקין את הגרסה החדשה (%2)?</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation>להתקין</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation>התקנת מצלמה וירטואלית</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation>הגדרת פלט</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation>הוספת פלט</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation>שגיאה ביצירת מצלמה וירטואלית</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation>הסרת כל הפלטים</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation>שגיאה בהסרת מצלמות וירטואליות</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation>שגיאה בהסרת מצלמות וירטואליות</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation>הגדרת תמונת פלט</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation>המצלמה הווירטואלית אינה מותקנת, להתקין אותה?</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation>המצלמה הווירטואלית אינה נתמכת בפלטפורמה הזאת</translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation>תיקיית סרטונים</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation>חיפוש</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation>חיפוש בתיקייה כדי לשמור סרטונים</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation>הקלטת שמע</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation>מבנה קובץ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation>הגדרה</translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation>הגדרת סוג קובץ</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation>מפענח וידאו</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation>הגדרת מפענח וידאו</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation>מפענח שמע</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation>הגדרת מפענח שמע</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation>נא לבחור את התיקייה לשמירת הסרטונים שלך</translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation>מספר שריטות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation>הוספת אבק</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation>רדיוס</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
-        <translation>מס׳ צבעים</translation>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
+        <translation>מספר צבעים</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation>הפרשי צבע</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation>הצגת קצוות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation>צבע הקו</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation>סריקת מקטע</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>בחירת צבע</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation>טבלת התמרה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation>עמודה 0, שורה 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation>עמודה 1, שורה 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation>עמודה 2, שורה 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation>עמודה 3, שורה 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation>עמודה 0, שורה 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation>עמודה 1, שורה 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation>עמודה 2, שורה 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation>עמודה 3, שורה 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation>עמודה 0, שורה 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation>עמודה 1, שורה 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation>עמודה 2, שורה 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation>עמודה 3, שורה 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>מצב</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
         <translation>טבעי</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
         <translation>קבוע</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>סימנים</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>גופן</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation>חיפוש</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation>חיפוש הגופן לשימוש</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation>רימוז</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>בררת מחדל</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation>ללא רימוז</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation>רימוז אנכי</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation>רימוז מלא</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>סגנון</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation>מפת סיביות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>התקן</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation>מתאר</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation>אילוץ מתאר</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation>התאמה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>איכות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>החלקת קצוות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation>ללא החלקת קצוות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation>תואם ל־OpenGL</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation>אילוץ מדידה במספרים שלמים וחיוביים</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation>ללא החלקה של תת־פיקסל</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation>ללא מיזוג גופנים</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation>צבע חזית</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>צבע רקע</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation>הפוך</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation>נא לבחור גופן</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation>נא לבחור את צבע החזית</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation>נא לבחור את צבע הרקע</translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>גודל</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>צבע</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation>נא לבחור את צבע הרצועות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation>רך</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation>נא לבחור את הצבע לסינון</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation>צבע ישן</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation>צבע חדש</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation>נא לבחור את הצבע להחלפה</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation>נא לבחור את הצבע החדש</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation>טבלת צבעים</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation>בסיס</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation>מתכת</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation>חום</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation>תמונה ישנה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>אדום וירוק</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation>ספיה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
-        <translation>X-Pro</translation>
+        <translation>X-Pro‎</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation>רנטגן</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>צהוב וכחול</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation>התאמה אישית</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation>ערכת צבעים במקור</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation>קובץ תמונה לשימוש כערכת צבעים</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation>חיפוש קובץ התמונה שישמש כערכת צבעים</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation>נא לבחור קובץ תמונה</translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation>טבלת פיתול</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation>מקדם</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation>אלכסון</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation>מצב לכידה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation>ריבוע אקראי</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation>הגדלה אנכית</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation>הגדלה אופקית</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation>הגדלת טבעות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation>גודל מקטע</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
-        <translation>מס׳ שקופיות</translation>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
+        <translation>מספר התמוניות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation>מו</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation>סיגמא</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation>קצב שקופיות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation>משרעת</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>תדירות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation>גודל רשת</translation>
     </message>
@@ -1664,1140 +1952,1379 @@
         <translation>מהירות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation>רמת תקריב</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation>עצמה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation>מצב קני</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation>סף קני</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation>סף קני נמוך</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation>סף קני גבוה</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation>השוואה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation>היפוך</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation>קובץ Haar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>עין</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation>משקפיים</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation>פנים מקדימה חלופה 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation>פנים מקדימה חלופה 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation>פנים מקדימה חלופה 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation>פנים מקדימה כבררת מחדל</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation>כל הגוף</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation>עין שמאל 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation>פלג הגוף התחתון</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation>זוג עיניים גדול</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation>זוג עיניים קטן</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation>אוזן שמאל</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation>עין שמאל 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation>פה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>אף</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation>אוזן ימין</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation>עין ימין 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation>פלג גוף עליון 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation>פנים מהצד</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation>עין ימין 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>חיוך</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation>פלג גוף עליון</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation>סוג סמן</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation>מרובע</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation>אליפסה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation>תמונה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation>טשטוש בפיקסלים</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation>טשטוש</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation>טשטוש חיצוני</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation>תמונת רקע</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation>סוג סמן</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation>אחיד</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation>מקווקוו</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation>מנוקד</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation>קו נקודה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation>קו נקודה נקודה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation>צבע סמן</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation>עובי סמן</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation>מסכות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation>מלאך</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>דוב</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation>בונה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>חתול</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation>תרנגולת</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>פרה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation>שטן</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation>כלב</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation>כלב דלמטי</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation>כלב שמח</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>דרקון</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation>פיל 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation>פיל 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation>אייל</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation>צפרדע</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation>רוח רפאים</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation>ג׳ירפה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation>גנו</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation>עז</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation>היפופוטם</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>סוס</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation>סוס אפור</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation>קואלה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>קוף</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation>עכבר אפור</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation>עכבר לבן</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation>פנדה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation>פינגווין</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation>דלעת 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation>דלעת 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation>דביבון</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation>קרנף</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation>כבשה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation>גולגולת 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation>גולגולת 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation>טריצרטופס</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation>זברה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation>תמונת סמן</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation>החלפת הפנים בתמונה זו</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
-        <translation>תמונות רקע</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
+        <translation>חיפוש התמונה לשים בריבוע שזוהה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
+        <translation>רקע</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
+        <translation>הגדרות אזור פנים מתקדמות
+לטשטוש הרקע או התמונה שלהלן.</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
+        <translation>היסט אופקי</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
+        <translation>היסט אנכי</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
+        <translation>% רדיוס אופקי</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
+        <translation>% רדיוס אנכי</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
         <source>Black Square</source>
         <translation>ריבוע שחור</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
         <source>Background picture</source>
         <translation>תמונת רקע</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
         <source>Replace background with this picture</source>
         <translation>החלפת הרקע בתמונה הזאת</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
+        <translation>חיפוש התמונה שתשמש כרקע</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
         <source>Pixel grid size</source>
         <translation>גודל רשת פיקסלים</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
         <source>Blur radius</source>
         <translation>רדיוס טשטוש</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
         <source>Face Area Settings</source>
         <translation>הגדרות אזור פנים</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
-        <translation>הגדרות אזור פנים מתקדמות
-לטשטוש הרקע או התמונה שלהלן.</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
-        <translation>היסט אופקי</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
-        <translation>היסט אנכי</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
         <source>Width Adjust %</source>
         <translation>התאמת רוחב ב־%</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
         <source>Height Adjust %</source>
         <translation>התאמת גובה ב־%</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
         <source>Round Area</source>
         <translation>אזור עגול</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
-        <translation>קוטר רוחבי ב־%</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
-        <translation>קוטר אנכי ב־%</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation>בחירת צבע סמן</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation>קשיח</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation>מתקרר</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation>התמוססות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation>תקריב</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation>סף</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>סף תאורה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>הפרשי שקיפות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>הגוון שקיפות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation>פסיעה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation>תבנית</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation>90° רשת הדפסה 6×6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation>צביר 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation>צביר 4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation>צביר 8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation>קווים 4×4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation>קסם 2×2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation>קסם 4×4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation>מסודר 4×4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation>מסודר 6×6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation>מסודר 8×8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation>תבנית מפת סיביות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation>תמונה לשימוש כתבנית</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation>חיפוש התמונה שתשמש כתבנית</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation>גודל תבנית</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
-        <translation>תאורה</translation>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
+        <translation>ברק</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation>מדרון</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation>יירוט</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation>עיכוב</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation>סליל 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation>סליל 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation>פרבולה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation>פס אופקי</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation>הגברת מהירות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation>כמות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>סף תאורה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation>בחירת צבע האוטומטה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
-        <translation>מס׳ טיפות</translation>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
+        <translation>מספר הטיפות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation>בחירה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation>בחירת גופן</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation>צבע הסמן</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation>בחירת צבע הסמן</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation>אורך הטיפה המזערי</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
-        <translation>אורך השלכה מזערי</translation>
+        <translation>אורך טיפה מזערי</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation>אורך הטיפה המרבי</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
-        <translation>אורך השלכה מרבי</translation>
+        <translation>אורך טיפה מרבי</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation>מהירות מזערית</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation>מהירות מזערית</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation>מהירות מרבית</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation>מהירות מרבית</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation>שינוי גודל חלק</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation>הצגת סמן</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation>הצגת גשם</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation>רצועת וידאו</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation>רצועת שמע</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation>רצועת כתוביות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation>סנכרון</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation>פשוט</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation>בהירות</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>ניגוד</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation>רך רגיל</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation>קשה רגיל</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation>צבע רך</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation>צבע קשה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>שקיפות יחסית</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation>צבע הקרנה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation>זיהוי תנועה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation>גשם</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation>&lt;b&gt;משתנים כלליים&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation>דעיכה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation>&lt;b&gt;משתני זיהוי תנועה&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation>&lt;b&gt;משתני גשם&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation>גודל מזערי לטיפה</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation>גודל מרבי לטיפה</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation>עובי טיפות</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation>תדירות טיפות</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation>הצגת קווים</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation>הסתרת קווים</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation>הסתרת צבע</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation>נא לבחור את צבע ההסתרה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
         <translation>סנכרון אנכי</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation>היסט אופקי</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation>מקדם סנכרון אופקי</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation>חלקלקות סנכרון אופקי</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation>מקדם אי־סנכרון גוון</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation>רעש</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation>מסכה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation>מעלות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>חום</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>תסדיר וידאו</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>רזולוציה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation>שקופיות לשנייה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>איפוס</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation>איפוס לערכי ברירת המחדל</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation>יחס תצוגה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation>קנה מידה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation>רכות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation>בחירת צבע העיטור</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation>קמטים</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
-        <translation>פן</translation>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
+        <translation>משך (בשניות)</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation>להשתמש במבזק</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation>עכשיו</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation>%1 שניות</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation>צילום תמונה</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation>%1/תמונה %2.%3</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation>מהדורה יומית</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation>אפקטים של וידאו</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation>פתיחת לוח אפקטים של וידאו</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation>להשתמש במבזק בצילום תמונה</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation>מתזמן תמונות</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation>הזמן להמתנה בטרם צילום התמונה</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation>צילום מסך ללוח גזירים</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation>לוכד צילום מסך ומעתיק אותו ללוח הגזירים</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation>לכידת צילום מסך ללוח גגזירים</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation>הגדרות מקורות ופלטים</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation>פתיחת תפריט הגדרות מקורות ופלטים</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation>פתיחת התמונה האחרונה</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation>פתיחת התמונה האחרונה שצולמה</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation>מצב לכידת תמונה</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation>לכידת תמונה ושמירתה לקובץ תמונה</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation>הגדרת %1 למצב לכידת תמונה</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation>הקלטת וידאו</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation>עצירת הקלטת וידאו</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation>מצב לכידת וידאו</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation>הגדרת %1 למצב לכידת וידאו</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation>התחלת הקלטה לקובץ וידאו</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation>עצירת הקלטת הווידאו הנוכחית</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation>פתיחת הווידאו האחרון</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation>פתיחת הווידאו האחרון שהוקלט</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation>יחס תצוגה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation>משך תיחום
 פנים (שניות)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation>ספירת תחומי פנים</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation>רמת התרחקות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation>רמת התקרבות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation>ריפוד מסביב לפנים (% מגודל הפנים)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
+        <translation>ריפוד מלמעלה</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
+        <translation>ריפוד משמאל</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
+        <translation>ריפוד מימין</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
+        <translation>ריפוד מלמטה</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
         <source>Face margin (% of face size)</source>
         <translation>שולי הפנים (% מגודל הפנים)</translation>
     </message>
     <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
+        <translation>שול מלמעלה</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation>שול משמאל</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
+        <translation>שול מימין</translation>
+    </message>
+    <message>
         <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation>שול מלמטה</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
         <source>e.g. 16:9, 4:3</source>
         <translation>למשל - 16:9, 4:3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
         <source>Lock viewport</source>
         <translation>נעילת חלונית תצוגה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
         <source>Debug mode</source>
         <translation>מצב ניפוי שגיאות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
         <source>Flip horizontally</source>
         <translation>היפוך אופקי</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
         <source>Flip vertically</source>
         <translation>היפוך אנכי</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
         <source>Width</source>
         <translation>רוחב</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
         <source>Aspect ratio width</source>
         <translation>רוחב יחס תצוגה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
         <source>Height</source>
         <translation>גובה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
         <source>Aspect ratio height</source>
         <translation>גובה יחס תצוגה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
-        <translation>מצב שינוי גודל</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
-        <translation>מהיר</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
-        <translation>קווי</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
-        <translation>מצב יחס תצוגה</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation>התעלמות</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
-        <translation>שימור</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
-        <translation>מתרחב</translation>
-    </message>
-    <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation>רמות</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation>הוספת צבע</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation>פינוי כל הצבעים</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation>נא לבחור את הצבע להוספה</translation>
@@ -2813,19 +3340,146 @@ duration (seconds)</source>
         <translation>גמא</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation>גוון</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation>רוויה</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation>בהירות</translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation>אילוץ קצב תמוניות</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation>צבע ישן</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation>נא לבחור את הצבע להחלפה</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation>צבע חדש</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation>נא לבחור את הצבע החדש</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation>זווית</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation>שמירה על הרזולוציה</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation>אטימות</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation>&lt;b&gt;לוח צבעים&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation>אורך תמונית</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation>היסט גוון</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation>&lt;b&gt;צל&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation>סף צל</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation>סף צל נמוך</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation>סף צל גבוה</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation>צבע צל</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation>נא לבחור את צבע הצל</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation>&lt;b&gt;ציר X&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation>משרעת (X)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation>תדירות (X)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation>שלב (X)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation>&lt;b&gt;ציר Y&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation>משרעת (Y)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation>תדירות (Y)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation>שלב (Y)</translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/hu.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/hu.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Qt %1 használata</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Honlap</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>Webkamera rögzítési alkalmazás.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>Egyszerű webkamera alkalmazás kép- és videorögzítés készítéséhez.</translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished"></translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation>Videóformátum hozzáadása</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation>Videóformátum módosítása</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation>Formátum eltávolítása</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>Formátum</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation>Szélesség</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation>Magasság</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation>Képkockasebesség</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>Hangkodek beállításai</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>Átviteli sebesség</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Átviteli sebesség (bit/mp)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation>Hangeszköz beállításai</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation>Mintaformátum</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation>Csatornák</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation>Mintavételi sebesség</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation>Késés (ezredmásodperc)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation>Csend</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>Videorögzítő</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>Asztali rögzítő</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>Hang rögzítése/lejátszása</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>Videó átalakítása</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>Virtuális kamera illesztőprogram</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>Videólejátszás</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation>Források rögzítése indításkor</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>Keretrendszerek és könyvtárak</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation type="unfinished"></translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation>Képek könyvtár</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation>Keresés</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>Fájlformátum</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation>Minőség</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation>Beépülő modulok</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>Frissítés</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished">Webkamera rögzítési alkalmazás.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation type="unfinished">Beépülő modulok</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation type="unfinished"></translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation type="unfinished"></translation>
     </message>
@@ -618,12 +685,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation type="unfinished">Átviteli sebesség</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished">Átviteli sebesség (bit/mp)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation type="unfinished"></translation>
     </message>
@@ -747,7 +824,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation type="unfinished"></translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation type="unfinished">Keresés</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation type="unfinished">Keresés</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation type="unfinished">Keresés</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation type="unfinished">Fájlformátum</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation type="unfinished">Keresés</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation type="unfinished">Minőség</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation type="unfinished">Képkockasebesség</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1664,1138 +1952,1377 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
-        <source>Face margin (% of face size)</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
-        <source>e.g. 16:9, 4:3</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
-        <source>Lock viewport</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
-        <source>Debug mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
-        <source>Flip horizontally</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
+        <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
-        <source>Flip vertically</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
-        <source>Width</source>
-        <translation type="unfinished">Szélesség</translation>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
-        <source>Aspect ratio width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
-        <source>Height</source>
-        <translation type="unfinished">Magasság</translation>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
-        <source>Aspect ratio height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
+        <source>e.g. 16:9, 4:3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
+        <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
+        <source>Debug mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
+        <source>Flip horizontally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
+        <source>Flip vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
+        <source>Width</source>
+        <translation type="unfinished">Szélesség</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
+        <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
+        <source>Height</source>
+        <translation type="unfinished">Magasság</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
+        <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2811,19 +3338,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/it.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/it.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
-        <source>Using Qt %1</source>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/About.qml" line="80"/>
+        <source>Using Qt %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Sito web</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>Applicazione per la cattura video da Webcam.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>Una semplice applicazione per la cattura di foto e video da webcam.</translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished">Licenza</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished"></translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation>Aggiungi Formato Video</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation>Cambia Formato Video</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation>Rimuovi Formato</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>Formato</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation>Larghezza</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation>Altezza</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation>Frequenza dei fotogrammi</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>Opzioni codec audio</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>Bitrate</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Bitrate (bits/secondo)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation>Opzioni Dispositivo Audio</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation>Formato di Campionamento</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation>Canali</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation>Frequenza di Campionamento</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation>Latenza (ms)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation>Silenzio</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>Cattura video</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>Cattura desktop</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>Audio cattura/riproduci</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>Conversione video</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>Driver videocamera virtuale</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>Riproduzione video</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>Framework e librerie</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation>Registrazione video</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation type="unfinished"></translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation type="unfinished">Cerca</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation type="unfinished">Qualità</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation>Plugins</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation>Cerca i plugin nelle sottocartelle</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation>Aggiungi percorso</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation>Rimuovi</translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>Aggiorna</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>Aggiugi percorso di ricerca dei plugins</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished">Rimuovi</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished">Applicazione per la cattura video da Webcam.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation>Carica impostazioni dal Percorso. Se il Percorso è vuoto, carica le configurazioni dalla directory dell&apos;applicazione.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation>PERCORSO</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation>PERCORSO1;PERCORSO2;...</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation>Cerca ricorsivamente nei percorsi per i plugins ricorsivamente.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation>Lista separata da punto evirgola dei percorsi in cui cercare i plugins.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation>Lista separata da punto evirgola dei percorsi da cui non caricare.</translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation type="unfinished">Preferenze Generali</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation type="unfinished">Plugins</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation type="unfinished">Aggiornamenti</translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation>Notifica per nuove versioni</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation>Ricerca nuove versioni</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>Giornalmente</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>Ogni due giorni</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>Settimanalmente</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>Ogni due settimane</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>Mensilmente</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>Mai</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>Ultimo aggiornamento</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>La tua versione di %1 è obsoleta. Ultima versione &lt;b&gt;%2&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation>Aggiorna ora!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>Grazie per l&apos;uso di una &lt;b&gt;versione di sviluppo&lt;/b&gt;&lt;br /&gt;Sarebbe molto utile se riportassi tutti i bug ed i tuoi suggerimenti.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>Segnala un Bug</translation>
     </message>
@@ -618,12 +685,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation type="unfinished">Scarica %1 %2 SUBITO!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation type="unfinished">Bitrate</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished">Bitrate (bits/secondo)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation type="unfinished">Rimuovi</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation type="unfinished"></translation>
     </message>
@@ -747,7 +824,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation type="unfinished"></translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation type="unfinished">File</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation type="unfinished">URL</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation type="unfinished">Descrizione</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation type="unfinished">Cerca</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation type="unfinished">Scegli il file da aggiungere come risorsa</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation type="unfinished">Modifica</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation type="unfinished">Rimuovi</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation type="unfinished">Tutti i File Video</translation>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation type="unfinished">GIF Animata</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation type="unfinished">Modifica</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation type="unfinished">Rimuovi</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation type="unfinished">Cerca</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation type="unfinished">Cerca</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
-        <translation>Numero di colori</translation>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>Scegli un colore</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>Modo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
-        <translation>Naturale</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
-        <translation>Fisso</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>Simboli</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation type="unfinished">Cerca</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>Stile</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>Dispositivo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>Qualità</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation>Compatibile con OpenGL</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>Colore sfondo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation>Seppia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation>Raggi X</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
-        <translation>N° di frames</translation>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation>Frame rate</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation>Ampiezza</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>Frequenza</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation>Dimensione griglia</translation>
     </message>
@@ -1664,1138 +1952,1377 @@
         <translation>Velocità</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation>Inverti</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation>Occhiali</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation>Bocca</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>Naso</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>Sorriso</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation>Rana</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation>Zoom</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation>Soglia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation>Colore del cursore</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation>Scegli il colore del cursore</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation>Mostra cursore</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation>Traccia video</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation>Traccia audio</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation>Traccia sottotitoli</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation>Semplice</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation>Luminosità</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>Contrasto</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation>Rileva movimento</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation>Mostra linee</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation>Nascondi linee</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation>Nascondi colore</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation>Scegli il colore da nascondere</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
-        <translation>Sincronizzazione verticale</translation>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation>Rumore</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation>Maschera</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation>Gradi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>Temperatura</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>Formato video</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>Risoluzione</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation>FPS</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>Resetta</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation>Aspetto</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation>Scala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation>Scegli il colore della vignetta</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation>Adesso</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation>%1 secondi</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation>Scatta una foto</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation>Registra video</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
-        <source>Face margin (% of face size)</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
-        <source>e.g. 16:9, 4:3</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
-        <source>Lock viewport</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
-        <source>Debug mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
-        <source>Flip horizontally</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
+        <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
-        <source>Flip vertically</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
-        <source>Width</source>
-        <translation type="unfinished">Larghezza</translation>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
-        <source>Aspect ratio width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
-        <source>Height</source>
-        <translation type="unfinished">Altezza</translation>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
-        <source>Aspect ratio height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
+        <source>e.g. 16:9, 4:3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
+        <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
+        <source>Debug mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
+        <source>Flip horizontally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
+        <source>Flip vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
+        <source>Width</source>
+        <translation type="unfinished">Larghezza</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
+        <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
+        <source>Height</source>
+        <translation type="unfinished">Altezza</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
+        <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2811,19 +3338,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/ja.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/ja.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Qt %1 を使用</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>ウェブサイト</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>ウェブカメラキャプチャアプリケーション。</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>画像と動画キャプチャのための、シンプルなWebカメラ アプリケーション。</translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished"></translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>オーディオコーデック オプション</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>ビットレート</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>ビットレート (ビット/秒)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation type="unfinished"></translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation type="unfinished"></translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation type="unfinished">サーチ</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation type="unfinished">削除</translation>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
+        <source>Update</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
-        <source>Update</source>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished">削除</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished">ウェブカメラキャプチャアプリケーション。</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation type="unfinished"></translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation type="unfinished"></translation>
     </message>
@@ -618,12 +685,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation type="unfinished">ビットレート</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished">ビットレート (ビット/秒)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation type="unfinished">削除</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation type="unfinished"></translation>
     </message>
@@ -747,7 +824,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation type="unfinished"></translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation type="unfinished">ファイル</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation type="unfinished">URL</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation type="unfinished">説明</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation type="unfinished">ソースのタイトル</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation type="unfinished">パス</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation type="unfinished">ファイルのパス</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation type="unfinished">サーチ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation type="unfinished">ソースとして追加するファイルを選ぶ</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation type="unfinished">すべての動画ファイル</translation>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation type="unfinished">エディット</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation type="unfinished">削除</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation type="unfinished">ソースの追加</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation type="unfinished">3GPビデオ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation type="unfinished">AVIビデオ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation type="unfinished">Flashビデオ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation type="unfinished">アニメーションGIF</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation type="unfinished">MKVビデオ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation type="unfinished">アニメーションPNG</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation type="unfinished">QuickTimeビデオ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation type="unfinished">MP4ビデオ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation type="unfinished">MPEGビデオ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation type="unfinished">Oggビデオ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation type="unfinished">RealMediaビデオ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation type="unfinished">DVDビデオ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation type="unfinished">WebMビデオ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="167"/>
         <source>Windows Media Video</source>
         <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation type="unfinished">Windows Mediaビデオ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation type="unfinished">すべてのファイル</translation>
-    </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
-    <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation type="unfinished">エディット</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation type="unfinished">削除</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
-        <translation type="unfinished">ソースの追加</translation>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation type="unfinished">すべてのファイル</translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation type="unfinished">サーチ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation type="unfinished">サーチ</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation type="unfinished">サーチ</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1664,1138 +1952,1377 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
-        <source>Face margin (% of face size)</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
-        <source>e.g. 16:9, 4:3</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
-        <source>Lock viewport</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
-        <source>Debug mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
-        <source>Flip horizontally</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
+        <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
-        <source>Flip vertically</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
-        <source>Width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
-        <source>Aspect ratio width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
-        <source>Height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
-        <source>Aspect ratio height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
+        <source>e.g. 16:9, 4:3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
+        <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
+        <source>Debug mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
+        <source>Flip horizontally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
+        <source>Flip vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
+        <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
+        <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
+        <source>Height</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
+        <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2811,19 +3338,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/kab.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/kab.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
-        <source>Using Qt %1</source>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/About.qml" line="80"/>
+        <source>Using Qt %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished"></translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
@@ -113,12 +128,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -131,33 +146,41 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation type="unfinished"></translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation type="unfinished"></translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
+        <source>Update</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
-        <source>Update</source>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation type="unfinished"></translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation type="unfinished"></translation>
     </message>
@@ -618,12 +685,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation type="unfinished"></translation>
     </message>
@@ -747,7 +824,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation type="unfinished"></translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1664,1138 +1952,1377 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
-        <source>Face margin (% of face size)</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
-        <source>e.g. 16:9, 4:3</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
-        <source>Lock viewport</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
-        <source>Debug mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
-        <source>Flip horizontally</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
+        <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
-        <source>Flip vertically</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
-        <source>Width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
-        <source>Aspect ratio width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
-        <source>Height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
-        <source>Aspect ratio height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
+        <source>e.g. 16:9, 4:3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
+        <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
+        <source>Debug mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
+        <source>Flip horizontally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
+        <source>Flip vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
+        <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
+        <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
+        <source>Height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
+        <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2811,19 +3338,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/ko.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/ko.ts
@@ -12,25 +12,40 @@
         <location filename="../qml/About.qml" line="66"/>
         <source>Built from</source>
         <extracomment>Built from &quot;short commit hash&quot;</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>&quot; &quot; 기반으로 구축됨</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation>%1부터 구축됨</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation>웹 브라우저에서 커밋 열기</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Qt %1 사용함</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>웹사이트</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation>%1 웹 사이트로 이동하기</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>웹캠 캡처 응용프로그램.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>사진과 영상을 캡처하기 위한 간단한 웹캠 응용프로그램.</translation>
     </message>
@@ -40,67 +55,67 @@
     <message>
         <location filename="../qml/AboutDialog.qml" line="32"/>
         <source>About %1</source>
-        <translation type="unfinished"></translation>
+        <translation>약 %1</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
-        <translation type="unfinished">정보</translation>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
+        <translation>정보</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
-        <translation type="unfinished">기여하신 분들</translation>
+        <translation>기여하신 분들</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
-        <translation type="unfinished">라이센스</translation>
+        <translation>라이선스</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
-        <translation type="unfinished">제3자 라이센스</translation>
+        <translation>제3자 라이선스</translation>
     </message>
 </context>
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation>비디오 포맷 추가</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation>비디오 포맷 변경</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation>비디오 포맷 삭제</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>비디오 포맷</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
-        <translation>가로</translation>
+        <translation>폭</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation>세로</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation>프레임율</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>오디오 코덱 옵션</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>비트레이트</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>비트레이트 (비트/초)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation>오디오 장치 옵션</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation>샘플링 포맷</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation>채널</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation>샘플링 레이트</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation>지연시간 (ms)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation>입력 구성</translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation>무음</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation>출력 구성</translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -224,32 +255,32 @@
     <message>
         <location filename="../qml/DownloadDialog.qml" line="32"/>
         <source>Downloading %1</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 다운로드 중</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>보낸 사람: %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>받는 사람: %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
-        <translation type="unfinished"></translation>
+        <translation>크기: %1 %2B / %3 %4B</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
-        <translation type="unfinished"></translation>
+        <translation>속도: %1 %2B/s</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>남은 시간: %1</translation>
     </message>
 </context>
 <context>
@@ -257,7 +288,7 @@
     <message>
         <location filename="../qml/DownloadFailedDialog.qml" line="31"/>
         <source>Download failed</source>
-        <translation type="unfinished"></translation>
+        <translation>다운로드 실패</translation>
     </message>
 </context>
 <context>
@@ -265,64 +296,64 @@
     <message>
         <location filename="../qml/DownloadSucceededDialog.qml" line="31"/>
         <source>Download ready</source>
-        <translation type="unfinished"></translation>
+        <translation>다운로드 준비</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
-        <translation type="unfinished"></translation>
+        <translation>가상 카메라를 설치하시겠습니까?</translation>
     </message>
 </context>
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>비디오 캡처</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>바탕화면 캡처</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>오디오 캡처/재생</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>비디오 변환</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>가상 카메라 드라이버</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>비디오 재생출력</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation>시작할 때 입력을 재생</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>프레임워크와 라이브러리</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation>스크린 캡쳐</translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation>오디오 캡처/재생</translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation>비디오 녹화</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation>기본 방법</translation>
@@ -331,37 +362,50 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation>이미지 폴더</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation>검색</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>파일 포맷</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation>품질</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation>사진을 저장할 폴더를 선택</translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation>%1 패널 닫기</translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
-        <translation type="unfinished"></translation>
+        <translation>파이프와이어 스크린</translation>
     </message>
 </context>
 <context>
@@ -377,76 +421,89 @@
         <translation>플러그인</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation>하위폴더에서 플러그인을 검색</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation>경로 추가</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation>삭제</translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>업데이트</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation>플러그인 목록 업데이트</translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>플러그인을 검색할 경로 추가</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation>삭제</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation>웹캠 캡처 응용 프로그램.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation>PATH에서 설정을 불러옵니다. PATH가 없으면, 응용프로그램 폴더에서 설정을 불러옵니다.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation>PATH</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation>PATH1;PATH2;PATH3;...</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
-        <translation type="unfinished"></translation>
+        <translation>디버그 출력을 파일로 보내기</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
-        <translation type="unfinished"></translation>
+        <translation>FILE</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation>%1의 새 인스턴스를 열기.</translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
-        <translation>지정한 플러그인 경로에서 재귀검색합니다.</translation>
+        <translation>지정한 플러그인 경로에서 재귀적으로 검색합니다.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation>플러그인을 검색할 경로의 목록은 세미콜론으로 구분합니다.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation>불러오지 않을 경로의 목록은 세미콜론으로 구분합니다.</translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation>%1/Video %2.%3</translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation>이미지 캡처</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation>비디오 녹화</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation>일반적인 옵션</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation>플러그인</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation>업데이트</translation>
     </message>
@@ -516,12 +573,12 @@
     <message>
         <location filename="../qml/SettingsMenu.qml" line="58"/>
         <source>Donate</source>
-        <translation type="unfinished"></translation>
+        <translation>기부하다</translation>
     </message>
     <message>
         <location filename="../qml/SettingsMenu.qml" line="64"/>
         <source>About</source>
-        <translation type="unfinished">정보</translation>
+        <translation>정보</translation>
     </message>
     <message>
         <location filename="../qml/SettingsMenu.qml" line="71"/>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
-        <translation type="unfinished">새 색깔을 선택하세요</translation>
+        <translation>새 색상을 선택하세요</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation>색상 %1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation>색상% 1제거</translation>
     </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation>새 버전 알림</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation>업데이트 대화상자 표시</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation>새 버전 확인</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>매일</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>이틀마다</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>매주</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>격주마다</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>매월</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>하지 않음</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>마지막 업데이트</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>%1 의 버전이 오래되었습니다. 최신 버전은 &lt;b&gt;%2 입니다.&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation>지금 업그레이드!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>&lt;b&gt;개발 버전&lt;/b&gt;을 사용해 주셔서 감사합니다!&lt;br /&gt;제안이나 버그 제보를 해주시면 큰 도움이 됩니다.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>버그 제보</translation>
     </message>
@@ -618,12 +685,12 @@
         <translation>새 버전이 있습니다!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation>%1 %2 지금 다운로드!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation>다음에도 이 대화상자를 표시</translation>
     </message>
@@ -633,7 +700,7 @@
     <message>
         <location filename="../qml/VCamInstallFailedDialog.qml" line="31"/>
         <source>Installation failed</source>
-        <translation type="unfinished"></translation>
+        <translation>설치 실패</translation>
     </message>
 </context>
 <context>
@@ -641,12 +708,12 @@
     <message>
         <location filename="../qml/VCamInstallSucceededDialog.qml" line="31"/>
         <source>Installation succeeded</source>
-        <translation type="unfinished"></translation>
+        <translation>설치 성공</translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
-        <translation type="unfinished"></translation>
+        <translation>Webcamoid를 다시 시작하시겠습니까?</translation>
     </message>
 </context>
 <context>
@@ -654,12 +721,12 @@
     <message>
         <location filename="../qml/VCamManualDownloadDialog.qml" line="31"/>
         <source>Can&apos;t get latest version</source>
-        <translation type="unfinished"></translation>
+        <translation>최신 버전을 받을 수 없습니다</translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
-        <translation type="unfinished"></translation>
+        <translation>가상 카메라를 수동으로 다운로드하시겠습니까?</translation>
     </message>
 </context>
 <context>
@@ -670,18 +737,18 @@
         <translation>비디오 코덱 옵션</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation>비트레이트</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation>비트레이트 (비트/초)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation>키 프레임 간격</translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation>삭제</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation>%1 비디오 효과 제거</translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation>비디오 이펙트 추가</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation>이펙트 검색</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation>비디오 이펙트 검색</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation>이펙트 연결</translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation>이펙트 추가</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation>모든 이펙트 삭제</translation>
     </message>
@@ -747,7 +824,7 @@
         <translation>비디오 포맷 설정</translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation>파일 확장자</translation>
     </message>
@@ -755,180 +832,280 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation>입력 수정</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation>입력 추가</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation>파일</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation>URL</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation>상세설명</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation>입력 제목</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation>경로</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation>파일 경로</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation>검색</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation>소스로 사용할 파일 검색</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation>입력으로 추가할 파일을 선택하세요</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation>수정</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation>삭제</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation>입력 추가</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation>소스 구성</translation>
+    </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation>모든 비디오 파일</translation>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation>웹캠이 없습니다</translation>
     </message>
+</context>
+<context>
+    <name>VideoLayer</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation>3GP 비디오</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation>AVI 비디오</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation>Windows 비트맵</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation>마이크로소프트 윈도우 커서</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation>Flash 비디오</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation>움직이는 GIF</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation>그래픽 교환 형식</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation>사과 아이콘 이미지</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation>마이크로소프트 윈도우 아이콘</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation>공동 사진 전문가 그룹</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation>MKV 비디오</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation>움직이는 PNG</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation>다중 이미지 네트워크 그래픽</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation>QuickTime 비디오</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation>MP4 비디오</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation>MPEG 비디오</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation>Ogg 비디오</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation>휴대용 비트맵</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation>휴대용 그레이맵</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation>휴대용 네트워크 그래픽</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation>휴대용 픽스맵</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation>RealMedia 비디오</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation>확장 가능한 벡터 그래픽</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation>트루비전 TGA</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation>태그가 지정된 이미지 파일 형식</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation>DVD 비디오</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation>무선 비트맵</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation>WebM 비디오</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
+        <translation>웹피</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="167"/>
         <source>Windows Media Video</source>
         <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation>윈도우 미디어 비디오</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation>모든 파일</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation>X11 비트맵</translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation>수정</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation>X11 픽스맵</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation>삭제</translation>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
+        <translation>모든 이미지 및 비디오 파일</translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
-        <translation>입력 추가</translation>
-    </message>
-    <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation>웹캠이 없습니다</translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation>모든 파일</translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation>출력 없음</translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
-        <translation type="unfinished"></translation>
+        <translation>가상 카메라</translation>
     </message>
 </context>
 <context>
@@ -947,60 +1124,60 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation>가상 카메라 수정</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation>가상 카메라 추가</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation>가상 카메라 이름</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation>포맷 추가</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation>포맷 지우기</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
-        <translation type="unfinished"></translation>
+        <translation>가상 카메라를 편집할 수 없습니다</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
-        <translation type="unfinished"></translation>
+        <translation>가상 카메라를 추가할 수 없습니다</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
-        <translation type="unfinished"></translation>
+        <translation>가상 카메라 편집 중 오류 발생</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
-        <translation type="unfinished"></translation>
+        <translation>가상 카메라 추가 중 오류 발생</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
-        <translation type="unfinished"></translation>
+        <translation>가상 카메라 생성 중 오류 발생</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
-        <translation>카메라 상세설명과 포맷은 비워둘 수 없습니다.</translation>
+        <translation>카메라 상세 설명과 포맷은 비워둘 수 없습니다.</translation>
     </message>
 </context>
 <context>
@@ -1023,7 +1200,7 @@
     <message>
         <location filename="../qml/VideoOutputOptions.qml" line="95"/>
         <source>Error removing the virtual camera</source>
-        <translation type="unfinished"></translation>
+        <translation>가상 카메라 제거 중 오류 발생</translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputOptions.qml" line="99"/>
@@ -1039,27 +1216,32 @@
         <translation>가상 카메라 출력 이미지</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation>가상 카메라 기본 출력 이미지</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation>검색</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
-        <translation type="unfinished"></translation>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
+        <translation>기본 출력 사진으로 사용할 검색 이미지</translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation>가상 카메라 사진을 설정할 수 없습니다</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation>가상 카메라 삭제 중 오류</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation>이미지 파일을 선택하세요</translation>
     </message>
@@ -1067,98 +1249,129 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
-        <translation type="unfinished"></translation>
+        <translation>가상 카메라가 오래되었습니다(%1). 최신 버전(%2)을 설치하시겠습니까?</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
-        <translation type="unfinished"></translation>
+        <translation>설치하다</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation>가상 카메라 설치</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation>출력 구성</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
-        <translation type="unfinished"></translation>
+        <translation>출력 추가</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
-        <translation type="unfinished"></translation>
+        <translation>가상 카메라 생성 중 오류 발생</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
-        <translation type="unfinished"></translation>
+        <translation>모든 출력 삭제하기</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
-        <translation type="unfinished"></translation>
+        <translation>가상 카메라 제거 중 오류 발생</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
-        <translation type="unfinished">가상 카메라 삭제 중 오류</translation>
+        <translation>가상 카메라 제거 중 오류</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
-        <translation type="unfinished"></translation>
+        <translation>출력 이미지 설정하기</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
-        <translation type="unfinished"></translation>
+        <translation>가상 카메라가 설치되지 않았습니다, 설치하시겠습니까?</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
-        <translation type="unfinished"></translation>
+        <translation>가상 카메라는 이 플랫폼에서 지원되지 않습니다</translation>
     </message>
 </context>
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation>비디오 폴더</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation>검색</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation>비디오를 저장할 디렉토리 검색하기</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation>오디오 녹음</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation>파일 포맷</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation>환경설정</translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation>파일 형식 구성</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation>비디오 코덱</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation>비디오 코덱 구성</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation>오디오 코덱</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation>오디오 코덱 구성</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation>비디오를 저장할 폴더를 선택하세요</translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation>긁힌 자국의 갯수</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation>먼지 추가</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation>반지름</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
+        <translation>색상 수</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
-        <translation type="unfinished"></translation>
+        <translation>색상 차이</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
-        <translation type="unfinished"></translation>
+        <translation>가장자리 표시하기</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation>선 색깔</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
-        <translation type="unfinished"></translation>
+        <translation>블록 스캔하기</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>색깔을 선택하세요</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation>행렬 변환</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation>열 0, 행 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation>열 1, 행 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation>열 2, 행 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation>열 3, 행 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation>열 0, 행 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation>열 1, 행 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation>열 2, 행 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation>열 3, 행 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation>열 0, 행 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation>열 1, 행 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation>열 2, 행 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation>열 3, 행 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>모드</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
-        <translation type="unfinished"></translation>
+        <translation>자연스러운</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
-        <translation type="unfinished"></translation>
+        <translation>고정된</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>기호</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>글꼴</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
-        <translation type="unfinished">검색</translation>
+        <translation>검색</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation>사용할 글꼴 검색</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
-        <translation type="unfinished"></translation>
+        <translation>힌팅</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
-        <translation type="unfinished"></translation>
+        <translation>기본값</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
-        <translation type="unfinished"></translation>
+        <translation>힌팅 없음</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
-        <translation type="unfinished"></translation>
+        <translation>수직 힌팅</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
-        <translation type="unfinished"></translation>
+        <translation>전체 힌팅</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>스타일</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation>비트맵</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>장치</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation>외곽선</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
-        <translation type="unfinished"></translation>
+        <translation>아웃라인 강제 적용</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation>일치</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>품질</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>앤티 앨리어스 적용</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation>앤티 앨리어스 미적용</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation>OpenGL과 호환</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation>정수 메트릭 강제적용</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
-        <translation>하위픽셀 앤티 앨리어스 미적용</translation>
+        <translation>서브픽셀 안티앨리어스 미적용</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation>글꼴 병합 하지 않음</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation>전경색</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>배경색</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation>반전</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation>글꼴을 선택하세요</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation>전경색을 선택하세요</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation>배경색을 선택하세요</translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>크기</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>색깔</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
-        <translation type="unfinished"></translation>
+        <translation>스트립 색상 선택하기</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation>소프트</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation>걸러낼 색깔을 선택하세요</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation>이전 색깔</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation>새 색깔</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation>변경할 색깔을 선택하세요</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation>새 색깔을 선택하세요</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation>색상 표</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation>베이스</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation>메탈</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation>히트</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation>옛날 사진</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>적록</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation>세피아</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation>X-프로</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation>X-레이</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>황청</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
-        <translation type="unfinished"></translation>
+        <translation>커스텀</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
-        <translation type="unfinished"></translation>
+        <translation>소스 팔레트</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation>팔레트로 사용할 이미지 파일</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation>팔레트로 사용할 이미지 파일 검색</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation>이미지 파일을 선택하세요</translation>
     </message>
@@ -1554,109 +1847,104 @@
         <translation>행렬 합성</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
-        <translation type="unfinished"></translation>
+        <translation>요인</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
-        <translation type="unfinished"></translation>
+        <translation>편향</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
-        <translation type="unfinished"></translation>
+        <translation>잡기 모드</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
-        <translation type="unfinished"></translation>
+        <translation>랜덤 제곱</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
-        <translation type="unfinished"></translation>
+        <translation>수직 증가</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
-        <translation type="unfinished"></translation>
+        <translation>수평 증가</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
-        <translation type="unfinished"></translation>
+        <translation>고리가 늘어남</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
-        <translation type="unfinished"></translation>
+        <translation>블록 사이즈</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
+        <translation>프레임 수</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>뮤</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>시그마</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
-        <translation type="unfinished">프레임율</translation>
+        <translation>프레임율</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
-        <translation type="unfinished"></translation>
+        <translation>진폭</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
-        <translation type="unfinished"></translation>
+        <translation>빈도</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
-        <translation type="unfinished"></translation>
+        <translation>그리드 크기</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="51"/>
@@ -1664,1165 +1952,1532 @@
         <translation>속도</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
-        <translation type="unfinished"></translation>
+        <translation>확대율</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
-        <translation type="unfinished"></translation>
+        <translation>힘</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>캐니 모드</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
+        <translation>캐니 임계값</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>동등하게 하다</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
-        <translation type="unfinished"></translation>
+        <translation>반전</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>하르 파일</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>눈</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation>안경</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
-        <translation type="unfinished"></translation>
+        <translation>전면 대안 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
-        <translation type="unfinished"></translation>
+        <translation>전면 대안 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
-        <translation type="unfinished"></translation>
+        <translation>전면 대안 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
-        <translation type="unfinished"></translation>
+        <translation>전면 기본값</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
-        <translation type="unfinished"></translation>
+        <translation>전신</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation>왼쪽 눈 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
-        <translation type="unfinished"></translation>
+        <translation>하체</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
-        <translation type="unfinished"></translation>
+        <translation>큰 눈 쌍</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
-        <translation type="unfinished"></translation>
+        <translation>작은 눈 쌍</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation>왼쪽 귀</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation>왼쪽 눈 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation>입</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>코</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation>오른쪽 귀</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation>오른쪽 눈 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
-        <translation type="unfinished"></translation>
+        <translation>상체 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
-        <translation type="unfinished"></translation>
+        <translation>프로필 얼굴</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation>오른쪽 눈 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
-        <translation type="unfinished"></translation>
+        <translation>웃다</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
-        <translation type="unfinished"></translation>
+        <translation>상체</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation>마커 타입</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation>사각형</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation>타원</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation>이미지</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
-        <translation type="unfinished"></translation>
+        <translation>픽셀화</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
-        <translation type="unfinished"></translation>
+        <translation>블러</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
-        <translation type="unfinished"></translation>
+        <translation>외부 블러</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation>배경 이미지</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation>마커 스타일</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation>실선</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation>파선</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation>점선</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation>1점 쇄선</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation>2점 쇄선</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
-        <translation type="unfinished"></translation>
+        <translation>마커 색상</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
-        <translation type="unfinished"></translation>
+        <translation>마커 너비</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
-        <translation type="unfinished"></translation>
+        <translation>마스크</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation>천사</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>곰</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation>비버</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>고양이</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation>닭</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>소</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation>악마</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation>개</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation>달마시안 개</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation>행복한 개</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>드래곤</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation>코끼리 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation>코끼리 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation>엘크</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation>개구리</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation>유령</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation>기린</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation>누 영양</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation>염소</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation>하마</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>말</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation>회색 말</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation>코알라</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>원숭이</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation>회색 쥐</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation>흰 쥐</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation>판다곰</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation>펭귄</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation>호박 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation>호박 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation>라쿤</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation>코뿔소</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation>양</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation>해골 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation>해골 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation>트리케라톱스</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation>얼룩말</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
-        <translation type="unfinished"></translation>
+        <translation>마커 그림</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
-        <translation type="unfinished"></translation>
+        <translation>얼굴을 이 사진으로 바꾸기</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
+        <translation>감지된 사각형에 넣을 이미지를 검색한다</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
+        <translation>배경</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
+        <translation type="unfinished">가로 간격띄우기</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
+        <translation type="unfinished">세로 간격띄우기</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
+        <translation type="unfinished">가로 반지름 %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
+        <translation type="unfinished">세로 반지름 %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
+        <translation type="unfinished">검은 사각형</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
-        <translation>가로 오프셋</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
+        <translation type="unfinished">배경 사진</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
-        <translation>세로 오프셋</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
+        <translation type="unfinished">배경을 이 사진으로 바꾸기</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
-        <translation>가로 조정 %</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
+        <translation type="unfinished">배경으로 사용할 이미지 검색한다</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
-        <translation>세로 조정 %</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
+        <translation type="unfinished">픽셀 그리드 크기</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
+        <translation type="unfinished">블러 반지름</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
+        <translation type="unfinished">얼굴 영역 설정</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
+        <translation>폭 조정 %</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
+        <translation>높이 조정 %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
+        <translation>원형 영역</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
-        <translation type="unfinished"></translation>
+        <translation>마커 색상 선택</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
-        <translation type="unfinished"></translation>
+        <translation>어려운</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
-        <translation type="unfinished"></translation>
+        <translation>차갑게</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
-        <translation type="unfinished"></translation>
+        <translation>녹다</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
-        <translation type="unfinished"></translation>
+        <translation>확대</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
-        <translation type="unfinished"></translation>
+        <translation>임계값</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>루마 임계값</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>알파 차이</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>알파 변화</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
-        <translation type="unfinished"></translation>
+        <translation>보폭</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation>패턴</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
-        <translation type="unfinished"></translation>
+        <translation>90% 명암 중간부 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
-        <translation type="unfinished"></translation>
+        <translation>클러스터 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
-        <translation type="unfinished"></translation>
+        <translation>클러스터 4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
-        <translation type="unfinished"></translation>
+        <translation>클러스터 8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
-        <translation type="unfinished"></translation>
+        <translation>4x4 라인</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
-        <translation type="unfinished"></translation>
+        <translation>매직 2x2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
-        <translation type="unfinished"></translation>
+        <translation>매직 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
-        <translation type="unfinished"></translation>
+        <translation>4x4 순서의</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
-        <translation type="unfinished"></translation>
+        <translation>6x6 순서의</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
-        <translation type="unfinished"></translation>
+        <translation>8x8 순서의</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation>비트맵 패턴</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation>패턴으로 사용할 이미지</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation>패턴으로 사용할 이미지 검색</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation>패턴 크기</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
+        <translation>기울기</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
-        <translation type="unfinished"></translation>
+        <translation>절편</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
-        <translation type="unfinished"></translation>
+        <translation>나선형 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
-        <translation type="unfinished"></translation>
+        <translation>나선형 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
-        <translation type="unfinished"></translation>
+        <translation>포물선</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
-        <translation type="unfinished"></translation>
+        <translation>가로 줄무늬</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
-        <translation type="unfinished"></translation>
+        <translation>속도 증가</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
-        <translation type="unfinished"></translation>
+        <translation>양</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>루마 임계값</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>오토마타 색상 선택</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
+        <translation>드롭 개수</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation>선택</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation>글꼴 선택</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation>커서 색깔</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation>커서 색깔을 선택하세요</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation>최소 드롭 길이</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
-        <translation type="unfinished"></translation>
+        <translation>최소. 드롭 길이</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation>최대 드롭 길이</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
-        <translation type="unfinished"></translation>
+        <translation>최대. 드롭 길이</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation>최소 속도</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation>최소 속도</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation>최대 속도</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation>최대 속도</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation>커서 보이기</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation>비디오 트랙</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation>오디오 트랙</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation>자막 트랙</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
-        <source>Simple</source>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
+        <source>Simple</source>
+        <translation>단순</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation>밝기</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>대비</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
-        <translation type="unfinished"></translation>
+        <translation>소프트 노멀</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
-        <translation type="unfinished"></translation>
+        <translation>하드 노멀</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
-        <translation type="unfinished"></translation>
+        <translation>부드러운 색상</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
-        <translation type="unfinished"></translation>
+        <translation>하드 색상</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>알파 미분</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
-        <translation type="unfinished"></translation>
+        <translation>방사선 색상</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
-        <translation type="unfinished"></translation>
+        <translation>모션 감지기</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
+        <translation>비</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
+        <translation>부패</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation>선 보이기</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation>선 숨기기</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation>색깔 숨기기</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation>숨길 색깔을 선택하세요</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
-        <translation>수직 동기</translation>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation>노이즈</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation>마스크</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
-        <translation type="unfinished"></translation>
+        <translation>정도</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
-        <translation type="unfinished"></translation>
+        <translation>온도</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>비디오 포맷</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>해상도</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
-        <translation type="unfinished"></translation>
+        <translation>초당 프레임</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
-        <translation type="unfinished"></translation>
+        <translation>리셋</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation>기본값으로 재설정</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>측면</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
-        <translation type="unfinished"></translation>
+        <translation>규모</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
-        <translation type="unfinished"></translation>
+        <translation>부드러움</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
-        <translation type="unfinished"></translation>
+        <translation>비네트 색상 선택</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
-        <translation type="unfinished"></translation>
+        <translation>잔물결</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
-        <translation type="unfinished"></translation>
+        <translation>플래시 사용</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation>지금</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation>%1 초</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
-        <translation type="unfinished"></translation>
+        <translation>사진 찍기</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
-        <translation type="unfinished"></translation>
+        <translation>%1/사진 %2.%3</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
-        <translation type="unfinished">데일리 빌드</translation>
+        <translation>데일리 빌드</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation>비디오 효과</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation>사진을 찍을 때 플래시 사용</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation>포토 타이머</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation>사진을 찍기 전에 기다리는 시간</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation>소스 및 출력 설정</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation>오픈 소스 및 출력 설정 메뉴</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation>마지막 사진 열기</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation>마지막으로 찍은 사진 열기</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation>이미지 캡처 모드</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation>캡처하여 이미지 파일에 저장</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation>%1을 이미지 캡처 모드로 설정</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation>비디오 녹화</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation>비디오 녹화 중지</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation>비디오 캡처 모드</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation>%1을 비디오 녹화 모드로 설정</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation>비디오 파일에 녹화 시작</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation>현재 비디오 녹화 중지</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation>마지막 비디오 열기</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation>마지막으로 녹화한 비디오 열기</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
-        <translation>가로세로비</translation>
+        <translation>종횡비</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
-        <translation type="unfinished"></translation>
+        <translation>얼굴 브라케팅
+지속 시간 (초)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
-        <translation type="unfinished"></translation>
+        <translation>얼굴 브라켓 수</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
-        <translation type="unfinished"></translation>
+        <translation>축소율</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
-        <translation type="unfinished"></translation>
+        <translation>확대율</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
-        <translation type="unfinished"></translation>
+        <translation>얼굴 패딩(얼굴 사이즈의 %)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
+        <translation>패딩 맨 위</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
+        <translation>패딩 왼쪽</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
+        <translation>패딩 오른쪽</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
+        <translation>패딩 아래</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
         <source>Face margin (% of face size)</source>
-        <translation type="unfinished"></translation>
+        <translation>얼굴 여백(얼굴 크기의 %)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
+        <translation>여백 맨 위</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation>여백 왼쪽</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
+        <translation>여백 오른쪽</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation>여백 아래</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
         <source>e.g. 16:9, 4:3</source>
         <translation>예를 들면, 16:9, 4:3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
         <source>Lock viewport</source>
         <translation>뷰포트 고정</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
         <source>Debug mode</source>
         <translation>디버그 모드</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
         <source>Flip horizontally</source>
         <translation>좌우반전</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
         <source>Flip vertically</source>
         <translation>상하반전</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
         <source>Width</source>
         <translation>가로</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
         <source>Aspect ratio width</source>
-        <translation type="unfinished"></translation>
+        <translation>종횡비 폭</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
         <source>Height</source>
-        <translation>세로</translation>
+        <translation>높이</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
         <source>Aspect ratio height</source>
+        <translation>종횡비 높이</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
+        <source>Levels</source>
+        <translation>레벨</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
+        <source>Add color</source>
+        <translation>색상 추가</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
+        <source>Clear all colors</source>
+        <translation>모든 색상 지우기</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
+        <source>Select the color to add</source>
+        <extracomment>Select the color to add to the color table</extracomment>
+        <translation>추가할 색상 선택</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="106"/>
+        <source></source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Gamma/share/qml/main.qml" line="40"/>
+        <source>Gamma</source>
+        <translation>감마</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
+        <source>Hue</source>
+        <translation>색조</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
+        <source>Saturation</source>
+        <translation>포화 상태</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
+        <source>Luminance</source>
+        <translation>휘도</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation>강제 프레임률</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
-        <translation>크기조절 모드</translation>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
-        <translation>빠름</translation>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
-        <translation>선형변환</translation>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished">새 색깔을 선택하세요</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
-        <translation>가로세로비 조절 모드</translation>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation>무시</translation>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
-        <translation>유지</translation>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
-        <source>Levels</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
-        <source>Add color</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
-        <source>Clear all colors</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
-        <source>Select the color to add</source>
-        <extracomment>Select the color to add to the color table</extracomment>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="106"/>
-        <source></source>
-        <translation></translation>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Gamma/share/qml/main.qml" line="40"/>
-        <source>Gamma</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
-        <source>Hue</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
-        <source>Saturation</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
-        <source>Luminance</source>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/nb_NO.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/nb_NO.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Som gjør bruk av Qt %1</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Nettside</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>Nettkameraopptaksprogram.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>Et enkelt nettkameraprogram for bildeknipsing og videoopptak.</translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished">Om</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished">Bidragsytere</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished">Lisens</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished">Tredjepartslisenser</translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation>Legg til videoformat</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation>Endre videoformat</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation>Fjern format</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>Format</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation>Bredde</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation>Høyde</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation type="unfinished">Rammetakt</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>Lydkodek-valg</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation type="unfinished">Bitrate</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished">Bitrate (bit/sek)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation>Lydenhetsvalg</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation type="unfinished">Samlingsformat</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation type="unfinished">Kanaler</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation type="unfinished">Samplingstakt</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation type="unfinished">Latens (ms)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation type="unfinished">Forstum</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation>Laster ned %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation>Fra: %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation>Til: %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation>Størrelse: %1 %2B/%3 %4B</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation>Hastighet: %1 %2B/s</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation>Gjenstående tid: %1</translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation>Installer det virtuelle kameraet?</translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>Videoopptak</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>Skrivebordsopptak</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>Lydopptak/avspilling</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>Videokonvertering</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>Virtuell kameradriver</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>Videoavspilling</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation type="unfinished">Spill kilder ved oppstart</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>Rammeverk og bibliotek</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation>Videoopptak</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation type="unfinished">Grunnleggende metode</translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation type="unfinished">Bildemappe</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation type="unfinished">Søk</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>Filformat</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation type="unfinished">Kvalitet</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation type="unfinished">Velg mappe å lagre bildene dine i</translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation>PipeWire-skjerm</translation>
     </message>
@@ -377,76 +421,89 @@
         <translation>Programtillegg</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation>Søk etter programtillegg i undermapper</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation>Legg til sti</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation type="unfinished">Fjern</translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>Oppdater</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>Legg til søkesti for programtillegg</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished">Fjern</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation>Nettkameraopptaksprogram.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation>Last inn innstillinger fra PATH. Hvis PATH er tom, last inn oppsett fra programmappe.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation>STI</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation type="unfinished">STI1;STI2;STI3;…</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation>Fil</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation>Søk i angitte programtilleggsstier rekursivt.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation>Semikolonsinndelt liste over å søke etter programtillegg i.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation type="unfinished">Semikolonsinndelt stisvarteliste.</translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation>%1/Video %2.%3</translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation type="unfinished">Generelle innstillinger</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation>Programtillegg</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation type="unfinished">Oppdateringer</translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished">Velg ny farge</translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation>Varsle om nye versjoner</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation>Se etter nye versjoner</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>Daglig</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>Annenhver dag</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>Ukentlig</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>Annenhver uke</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>Månedlig</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>Aldri</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>Sist oppdatert</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>Din versjon av %1 er utdatert. Siste versjon er &lt;b&gt;%2&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation type="unfinished">Oppgrader nå.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>Takk for at du bruker &lt;b&gt;utviklingsversjonen&lt;/b&gt;.&lt;br /&gt;Det kan komme godt med når du innrapporterer feil og ønsker.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>Innrapporter en feil</translation>
     </message>
@@ -618,12 +685,12 @@
         <translation type="unfinished">Ny versjon tilgjengelig!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation type="unfinished">Last ned %1 %2 NÅ!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation type="unfinished">Bitrate</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished">Bitrate (bit/sek)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation type="unfinished">Fjern</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation>Legg til videoeffekt</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation type="unfinished">Søkeeffekt</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation>Legg til effekt</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation>Fjern alle effekter</translation>
     </message>
@@ -747,7 +824,7 @@
         <translation>Videoformatinnstillinger</translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation>Filendelse</translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation>Rediger kilde</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation>Legg til kilde</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation type="unfinished">Fil</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation type="unfinished">Nettadresse</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation type="unfinished">Beskrivelse</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation type="unfinished">Kildetittel</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation type="unfinished">Sti</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation type="unfinished">Filsti</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation type="unfinished">Søk</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation type="unfinished">Velg fil å legge til som kilde</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation type="unfinished">Rediger</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation type="unfinished">Fjern</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation>Legg til kilde</translation>
+    </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation type="unfinished">Alle videofiler</translation>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation type="unfinished">Fant ingen nettkamera</translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation type="unfinished">3GP-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation type="unfinished">AVI-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation type="unfinished">Flash-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation type="unfinished">Animert GIF</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation type="unfinished">MKV-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation type="unfinished">Animert PNG</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation type="unfinished">QuickTime-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation type="unfinished">MP4-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation type="unfinished">MPEG-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation type="unfinished">Ogg-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation type="unfinished">RealMedia-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation type="unfinished">DVD-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation type="unfinished">WebM-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="167"/>
         <source>Windows Media Video</source>
         <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation type="unfinished">Windows Media-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation type="unfinished">Alle filer</translation>
-    </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
-    <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation type="unfinished">Rediger</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation type="unfinished">Fjern</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
-        <translation>Legg til kilde</translation>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation type="unfinished">Fant ingen nettkamera</translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation type="unfinished">Alle filer</translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation>Ingen utdata</translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation>Rediger virtuelt kamera</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation>Legg til virtuelt kamera</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation>Virtuelt kameranavn</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation>Legg til format</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation>Tøm formater</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation type="unfinished">Søk</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation type="unfinished">Velg ei bildefil</translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation type="unfinished">Søk</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation>Filformat</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation>Sett opp</translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation>Videokodek</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation>Lydkodek</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation>Velg en mappe å lagre videoene dine i</translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation>Antall riper</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation>Legg til støv</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation>Radius</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
-        <translation>Antall farger</translation>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation>Fargeforskjell</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation>Vis kanter</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation>Linjefarge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation>Skann blokk</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>Velg en farge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation>Transformasjonsmatrise</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>Modus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
-        <translation>Naturlig</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
-        <translation>Fastlåst</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>Symboler</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>Skrift</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation>Søk</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation>Hinting</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>Forvalg</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation>Ingen hinting</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation>Loddrett hinting</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation>Full hinting</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>Stil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation>Bitmap</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>Enhet</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation>Utriss</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation>Tving utriss</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation>Jamfør</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>Kvalitet</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>Antialisering</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation>Ingen antialisering</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation>Kompatibel med OpenGL</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation>Ingen antialisering av underpiksler</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation>Ingen skriftsammenblanding</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation>Forgrunnsfarge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>Bakgrunnsfarge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation>Reversert</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation>Velge en skrift</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation>Velg forgrunnsfarge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation>Velg bakgrunnsfarge</translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>Størrelse</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>Farge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation type="unfinished">Velg stripefargen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation>Myk</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation>Velg fargen å filtrere</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation>Gammel farge</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation>Ny farge</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation>Velg farge å erstatte</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation>Velg ny farge</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation type="unfinished">Fargetabell</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation type="unfinished">Grunnfarge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation type="unfinished">Metall</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation type="unfinished">Fargediagram</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation>Gammelt bilde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>Rød og grønn</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation type="unfinished">Sepia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation>Røntgen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>Gul og blå</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation>Egendefinert</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation>Velg ei bildefil</translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation type="unfinished">Foldingsmatrise</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation>Faktor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation>Bias</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation>Tilfeldig firkant</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation>Loddrett økning</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation>Vannrett økning</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation>Blokkstørrelse</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
-        <translation>Antall rammer</translation>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation type="unfinished">Aritmetisk gjennomsnitt (Mu)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation type="unfinished">Standardavvik (Sigma)</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation>Rammetakt</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation>Amplitude</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>Frekvens</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation>Rutenettstørrelse</translation>
     </message>
@@ -1664,1138 +1952,1377 @@
         <translation>Hastighet</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation>Forstørrelsesrate</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation>Styrke</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation type="unfinished">Canny-modus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation>Inverter</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation>Haar-fil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>Øye</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation type="unfinished">Briller</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation>Frontalfjes-alternativ 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation>Frontalfjes-alternativ 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation>Frontalfjes-alternativ 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation>Frontalfjes-forvalg</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation>Full kropp</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation>Venstre øye</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation>Underkropp</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation>Øyepar store</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation>Øyepar små</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation>Venstre øre</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation>Venstre øye 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation>Munn</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>Nese</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation>Høyre øye</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation>Høyre øye 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation>Overkropp 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation>Ansikt i profil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation>Høyre øye 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>Smil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation>Overkropp</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation>Markørtype</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation>Rektangel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation>Ellipse</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation>Bilde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation type="unfinished">Pikseler</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation>Tilsløring</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation>Markørstil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation>Bindestrek</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation>Punktum</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation>Bindestrek og punktum</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation>Bindestrek punktum punktum</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation>Markørfarge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation>Masker</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation>Engel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>Bjørn</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation>Bever</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>Katt</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation>Kylling</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>Ku</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation>Djevel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation>Hund</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation>Dalmatiner</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation>Glad hund</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>Drage</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation>Elefant 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation>Elefant 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation>Elg</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation>Frosk</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation>Spøkelse</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation>Giraff</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation>Gnu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation>Gjeit</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation>Flodhest</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>Hest</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation>Grå hest</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation>Koalabjørn</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>Apekatt</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation>Grå mus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation>Hvit mus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation>Panda</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation>Pingvin</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation>Gresskar 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation>Gresskar 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation>Vaskebjørn</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation>Neshorn</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation>Sau</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation>Hodeskalle 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation>Hodeskalle 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation>Sebra</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation>Markørbilde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
-        <translation>Pikselrutenettsstørrelse</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
-        <translation>Tilsløringsradius</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
+        <translation>Pikselrutenettsstørrelse</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
+        <translation>Tilsløringsradius</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation>Velg markørfarge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation>Har</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation>Kjøling</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation>Oppløs</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation>Forstørrelse</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation>Terskel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation>Mønster</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation>Gruppe 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation>Gruppe 4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation>Gruppe 8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation>Linjer 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation>Magisk 2x2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation>Magisk 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation>Mønsterstørrelse</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation>Spiral 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation>Spiral 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation>Parabol</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation>Vannrett stripe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation>Mengde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
-        <translation>Antall dråper</translation>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation>Vis peker</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation>Videospor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation>Lydspor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation>Undertekstspor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation>Enkel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>Kontrast</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation>Myk normal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation>Hard normal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation>Myk farge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation>Hard farge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation>Strålingsfarge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation>Bevegelsesoppdagelse</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation>Regn</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation>Vis linjer</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation>Skjul linjer</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation>Skjulingsfarge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation>Velg skjulingsfarge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
-        <translation>Loddrett synkronisering</translation>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation>Støy</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation type="unfinished">Maske</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation>Grader</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>Temperatur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>Videoformat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>Oppløsning</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation>BPS</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>Tilbakestill</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation>Bilderetning</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation>Skala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation>Mykhet</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation type="unfinished">Velg vignettfarge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
-        <translation>Fase</translation>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation type="unfinished">Nå</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation type="unfinished">%1 sekunder</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation>Knips et bilde</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation>%1/Bilde %2.%3</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished">Dagsbygg</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation>Ta opp video</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
-        <source>Face margin (% of face size)</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
-        <source>e.g. 16:9, 4:3</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
-        <source>Lock viewport</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
-        <source>Debug mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
-        <source>Flip horizontally</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
+        <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
-        <source>Flip vertically</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
-        <source>Width</source>
-        <translation type="unfinished">Bredde</translation>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
-        <source>Aspect ratio width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
-        <source>Height</source>
-        <translation type="unfinished">Høyde</translation>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
-        <source>Aspect ratio height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
+        <source>e.g. 16:9, 4:3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
+        <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
+        <source>Debug mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
+        <source>Flip horizontally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
+        <source>Flip vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation type="unfinished"></translation>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
+        <source>Width</source>
+        <translation type="unfinished">Bredde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
+        <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
+        <source>Height</source>
+        <translation type="unfinished">Høyde</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
+        <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2811,19 +3338,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished">Velg ny farge</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/nl.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/nl.ts
@@ -15,22 +15,37 @@
         <translation>Gebouwd op basis van</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation>Gebouwd op basis van %1</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation>Commit tonen in webbrowser</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Gebruikmakend van Qt %1</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Website</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation>Open de %1-website</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>Webcamprogramma voor het vastleggen van beelden.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>Een eenvoudig webcamprogramma voor het vastleggen van foto&apos;s en video&apos;s.</translation>
     </message>
@@ -43,25 +58,25 @@
         <translation>Over %1</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation>Over</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation>Bijdragers</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation>Licentie</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation>Externe licenties</translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation>Videoformaat toevoegen</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation>Videoformaat aanpassen</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation>Formaat verwijderen</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>Formaat</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation>Breedte</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation>Hoogte</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation>Framerate</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>Audiocodecopties</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>Bitsnelheid</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Bitsnelheid (bits/sec.)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation>Audio-apparaatinstellingen</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation>Sampleformaat</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation>Kanalen</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation>Samplesnelheid</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation>Vertraging (ms)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation>Invoerbronnen instellen</translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation>Stilte</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation>Uitvoerbronnen instellen</translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation>Bezig met downloaden van %1…</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation>Van: %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation>Naar: %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation>Grootte: %1 %2B / %3 %4B</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation>Snelheid: %1 %2B/s</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation>Resterende tijd: %1</translation>
     </message>
@@ -268,7 +299,7 @@
         <translation>Het downloaden is voltooid</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation>Wil je de virtuele camera installeren?</translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>Videovastlegging</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>Bureaubladvastlegging</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>Audiovastlegging/afspelen</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>Videoconvertering</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>Virtueel camerastuurprogramma</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>Video afspelen</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation>Bronnen afspelen na opstarten</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>Frameworks en bibliotheken</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation>Schermopname</translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation>Audio opnemen/beluisteren</translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation>Video opnemen</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation>Rootmethode</translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation>Afbeeldingenmap</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation>Zoeken</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation>De zoekmap waarin afbeeldingen moeten worden opgeslagen</translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>Bestandsformaat</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation>Kwaliteit</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation>Kies de map waarin de foto&apos;s moeten worden opgeslagen</translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation>%1paneel sluiten</translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation>PipeWire-scherm</translation>
     </message>
@@ -369,7 +413,7 @@
     <message>
         <location filename="../qml/PluginConfig.qml" line="35"/>
         <source>Paths</source>
-        <translation>Paden</translation>
+        <translation>Locaties</translation>
     </message>
     <message>
         <location filename="../qml/PluginConfig.qml" line="38"/>
@@ -377,85 +421,98 @@
         <translation>Plug-ins</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation>Plug-ins zoeken in onderliggende mappen</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
-        <translation>Pad toevoegen</translation>
+        <translation>Locatie toevoegen</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation>Verwijderen</translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>Bijwerken</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation>Werk de plug-inlijst bij</translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
-        <translation>Plug-inzoekpad toevoegen</translation>
+        <translation>Plug-inzoeklocatie toevoegen</translation>
+    </message>
+</context>
+<context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation>Verwijderen</translation>
     </message>
 </context>
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation>Webcamprogramma voor het vastleggen van beelden.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
-        <translation>Instellingen laden uit PAD. Als PAD leeg is, dan wordt de configuratie geladen uit de programmamap.</translation>
+        <translation>Instellingen laden uit LOCATIE. Als LOCATIE leeg is, dan wordt de configuratie geladen uit de programmamap.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
-        <translation>PAD</translation>
+        <translation>LOCATIE</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
-        <translation>PAD1;PAD2;PAD3;...</translation>
+        <translation>LOCATIE1;LOCATIE2;LOCATIE3;…</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation>Logboek met foutopsporingsinformatie aanleggen</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation>BESTAND</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation>Open een nieuwe instantie van %1.</translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
-        <translation>Opgegeven plug-inpaden recursief doorzoeken.</translation>
+        <translation>Doorzoek de opgegeven plug-inlocaties recursief.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
-        <translation>Puntkommagescheiden lijst met paden waarin gezocht moet worden naar plug-ins.</translation>
+        <translation>Puntkommagescheiden lijst met locaties waarin gezocht moet worden naar plug-ins.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
-        <translation>Puntkommagescheiden lijst met paden die niet moeten worden geladen.</translation>
+        <translation>Puntkommagescheiden lijst met locaties die niet moeten worden geladen.</translation>
     </message>
 </context>
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation>%1/video %2.%3</translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation>Afbeelding vastleggen</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation>Video-opname</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation>Algemene opties</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation>Plug-ins</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation>Updates</translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation>Kies de nieuwe kleur</translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation>Kleur %1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation>Kleur %1 verwijderen</translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation>Melding tonen bij updates</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation>Updatevenster tonen</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation>Controleren op updates</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>Dagelijks</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>Elke twee dagen</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>Wekelijks</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>Elke twee weken</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>Maandelijks</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>Nooit</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>Laatst bijgewerkt</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>De versie van %1 die je gebruikt is verouderd. De nieuwste versie is &lt;b&gt;%2&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation>Nu bijwerken!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>Bedankt voor het testen van de &lt;b&gt;ontwikkelingsversie&lt;/b&gt;!&lt;br /&gt;Het zou fijn zijn als je bugs wilt melden en ideeën wilt delen.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>Bug melden</translation>
     </message>
@@ -618,12 +685,12 @@
         <translation>Nieuwe versie beschikbaar!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation>Download %1 %2 NU!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation>Toon dit venster volgende keer weer</translation>
     </message>
@@ -644,7 +711,7 @@
         <translation>De installatie is voltooid</translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation>Wil je Webcamoid herstarten?</translation>
     </message>
@@ -657,7 +724,7 @@
         <translation>De nieuwste versie kan niet worden opgehaald</translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation>Wil je de virtuele camera handmatig starten?</translation>
     </message>
@@ -670,18 +737,18 @@
         <translation>Videocodecopties</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation>Bitsnelheid</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Bitsnelheid (bits/sec.)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation>Keyframes - stap-voor-stap</translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation>Verwijderen</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation>Verwijder het %1-video-effect</translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation>Video-effect toevoegen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation>Effect zoeken</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation>Zoek naar een video-effect</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation>Algeheel effect</translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation>Effect toevoegen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation>Alle effecten verwijderen</translation>
     </message>
@@ -747,7 +824,7 @@
         <translation>Videoformaatopties</translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation>Bestandsextensie</translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation>Invoer aanpassen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation>Invoer toevoegen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation>Bestand</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation>URL</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation>Omschrijving</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation>Naam van bron</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
-        <translation>Pad</translation>
+        <translation>Locatie</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
-        <translation>Bestandspad</translation>
+        <translation>Bestandslocatie</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation>Zoeken</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation>Zoek naar het bestand dat je wilt toevoegen als bron</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation>Kies het bestand dat je wilt toevoegen als bron</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation>Bewerken</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation>Verwijderen</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation>Invoer toevoegen</translation>
+    </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation>Alle videobestanden</translation>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation>Bron instellen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation>Geen webcams aangetroffen</translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation>3GP-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation>AVI-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation>Windows-bitmap</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation>Microsoft Windows-cursor</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation>Flash-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
-        <translation>Bewegend GIF-bestand</translation>
+        <translation>Bewegend gif-bestand</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation>Graphic Interchange Format</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation>Apple Icon Image</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation>Microsoft Windows-pictogram</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation>Joint Photographic Experts Group</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation>MKV-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
-        <translation>Bewegend PNG-bestand</translation>
+        <translation>Bewegend png-bestand</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation>Multiple-image Network Graphics</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation>QuickTime-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation>MP4-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation>MPEG-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation>Ogg-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation>Portable Bitmap</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation>Portable Graymap</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation>Portable Network Graphics</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation>Portable Pixmap</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation>RealMedia-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation>Scalable Vector Graphics</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation>Truevision TGA</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation>Tagged Image File Format</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation>DVD-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation>Wireless Bitmap</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation>WebM-video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
+        <translation>WebP</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="167"/>
         <source>Windows Media Video</source>
         <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation>Windows Media Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation>Alle bestanden</translation>
-    </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
-    <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation>Bewerken</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation>X11-bitmap</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation>Verwijderen</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation>X11-pixmap</translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
-        <translation>Invoer toevoegen</translation>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
+        <translation>Alle afbeeldings- en videobestanden</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation>Geen webcams aangetroffen</translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation>Alle bestanden</translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation>Geen uitvoer</translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation>Virtuele camera</translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation>Virtuele camera aanpassen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation>Virtuele camera toevoegen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation>Naam van virtuele camera</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation>Formaat toevoegen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation>Formaten wissen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation>De virtuele camera kan niet worden aangepast</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation>De virtuele camera kan niet worden toegevoegd</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation>Er is een fout opgetreden tijdens het aanpassen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation>Er is een fout opgetreden tijdens het toevoegen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation>Er is een fout opgetreden tijdens het aanmaken</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation>Geef een camera-omschrijving en formaten op.</translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation>Uitvoerfoto van virtuele camera</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation>Standaard uitvoerfoto van virtuele camera</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation>Zoeken</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
+        <translation>Zoek naar de afbeeling die je wilt gebruiken als standaard uitvoerafbeelding</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="95"/>
         <source>Can&apos;t set virtual camera picture</source>
         <translation>Er kan geen virtuelecamerafoto worden ingesteld</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation>Kan virtuele camera&apos;s niet verwijderen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation>Kies een afbeeldingsbestand</translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation>De virtuele camera is verouderd (%1). Wil je de nieuwste versie (%2) installeren?</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation>Installeren</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation>Installeer de virutele camera</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation>Uitvoerbron instellen</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation>Uitvoerapparaat toevoegen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation>De virtuele camera kan niet worden ingesteld</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation>Alle uitvoerapparaten verwijderen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation>De virtuele camera&apos;s kunnen niet worden verwijderd</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation>De virtuele camera&apos;s kunnen niet worden verwijderd</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation>Uitvoerafbeelding instellen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation>De virtuele camera is niet geïnstalleerd. Wil je deze nu installeren?</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation>De virtuele camera wordt niet ondersteund op dit systeem</translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation>Videomap</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation>Zoeken</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation>De zoekmap waarin video&apos;s moeten worden opgeslagen</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation>Audio opnemen</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation>Bestandsformaat</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation>Instellen</translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation>Stel het bestandsformaat in</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation>Videocodec</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation>Stel de videocodec in</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation>Audiocodec</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation>Stel de audiocodec in</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation>Kies de map waarin je de video&apos;s wilt opslaan</translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation>Aantal krassen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation>Stof toevoegen</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation>Straal</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
         <translation>Aantal kleuren</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation>Kleurverschil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation>Randen tonen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation>Lijnkleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation>Blok scannen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>Kies een kleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation>Matrix transformeren</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation>Kolom 0, rij 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation>Kolom 1, rij 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation>Kolom 2, rij 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation>Kolom 3, rij 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation>Kolom 0, rij 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation>Kolom 1, rij 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation>Kolom 2, rij 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation>Kolom 3, rij 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation>Kolom 0, rij 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation>Kolom 1, rij 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation>Kolom 2, rij 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation>Kolom 3, rij 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>Modus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
         <translation>Natuurlijk</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
         <translation>Vast</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>Symbolen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>Lettertype</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation>Zoeken</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation>Zoek naar het te gebruiken lettertype</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation>Hinten</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>Standaard</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation>Niet hinten</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation>Verticaal hinten</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation>Volledig hinten</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>Stijl</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation>Bitmap</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>Apparaat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation>Omlijnen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation>Omlijnen afdwingen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation>Overeenkomst</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>Kwaliteit</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>Anti-kartelvorming</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation>Geen anti-kartelvorming</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation>Compatibel met OpenGL</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation>Gehele metriek afdwingen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation>Geen subpixel-anti-kartelvorming</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation>Geen lettertypesamenvoeging</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation>Voorgrondkleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>Achtergrondkleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation>Omgekeerd</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation>Kies een lettertype</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation>Kies de voorgrondkleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation>Kies de achtergrondkleur</translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>Grootte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>Kleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation>Kies de stripkleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation>Zacht</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation>Kies de te filteren kleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation>Oorspronkelijke kleur</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation>Nieuwe kleur</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation>Kies de te vervangen kleur</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation>Kies de nieuwe kleur</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation>Kleurtabel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation>Basis</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation>Metaal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation>Hitte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation>Oude foto</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>Rood en groen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation>Sepia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation>X-Pro</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation>Röntgenscan</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>Geel en blauw</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation>Aangepast</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation>Bronpalet</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation>Palet-afbeeldingsbestand</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation>Zoek naar het als palet te gebruiken afbeeldingsbestand</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation>Kies een afbeeldingsbestand</translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation>Matrix samenspannen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation>Factor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation>Afwijking</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation>Vastlegmodus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation>Willekeurig vierkant</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation>Verticale stijging</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation>Horizontale stijging</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation>Ringstijging</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation>Blokgrootte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
         <translation>Aantal frames</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation>Mu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation>Sigma</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation>Framerate</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation>Omvang</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>Frequentie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation>Rastergrootte</translation>
     </message>
@@ -1664,1140 +1952,1379 @@
         <translation>Snelheid</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation>Zoomniveau</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation>Sterkte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation>Canny-modus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation>Hoge drempel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation>Lage drempelwaarde</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation>Hoge drempelwaarde</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation>Egaliseren</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation>Omkeren</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation>Haar-bestand</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>Oog</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation>Bril</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation>Voorkant van gezicht - alternatief 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation>Voorkant van gezicht - alternatief 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation>Voorkant van gezicht - alternatief 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation>Voorkant van gezicht - standaard</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation>Gehele lichaam</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation>Linkeroog 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation>Romp</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation>Ogen - groot</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation>Ogen - klein</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation>Linkeroor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation>Linkeroog 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation>Mond</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>Neus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation>Rechteroor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation>Rechteroog 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation>Torso 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation>Gezichtsprofiel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation>Rechteroog 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>Lach</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation>Torso</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation>Soort markering</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation>Rechthoek</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation>Ovaal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation>Afbeelding</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation>Pixelachtig</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation>Vervagen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation>Buitenste rand vervagen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation>Achtergrondafbeelding</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation>Markeerstijl</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation>Vast</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation>Streepjes</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation>Puntjes</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation>Streepjes en puntjes</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation>Streepje-punt-punt</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation>Markeerkleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation>Markeerbreedte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation>Verhullingen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation>Engel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>Beer</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation>Bever</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>Kat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation>Kip</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>Koe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation>Duivel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation>Hond</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation>Dalmatiër</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation>Blije hond</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>Draak</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation>Olifant 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation>Olifant 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation>Eland</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation>Kikker</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation>Spook</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation>Giraffe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation>Gnoe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation>Geit</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation>Nijlpaard</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>Paard</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation>Grijs paard</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation>Koalabeer</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>Aap</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation>Grijze muis</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation>Witte muis</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation>Pandabeer</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation>Pinguïn</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation>Pompoen 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation>Pompoen 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation>Wasbeer</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation>Neushoorn</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation>Schaap</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation>Schedel 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation>Schedel 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation>Triceratops</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation>Zebra</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation>Markeerafbeelding</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation>Gezicht vervangen door deze afbeelding</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
-        <translation>Achtergronden</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
+        <translation>Zoek naar de afbeelding die in de rechthoek moet worden geplaatst</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
+        <translation>Achtergrond</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
+        <translation>Uitgebreide gezichtsgebiedinstellingen voor
+achtergrondvervanging hieronder.</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
+        <translation>Horizontale verschuiving</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
+        <translation>Verticale verschuiving</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
+        <translation>Horizontale straal (in %)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
+        <translation>Verticale straal (in %)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
         <source>Black Square</source>
         <translation>Zwart vierkant</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
         <source>Background picture</source>
         <translation>Achtergrondafbeelding</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
         <source>Replace background with this picture</source>
         <translation>Achtergrond vervangen door deze afbeelding</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
+        <translation>Zoek naar de als achtergrond te gebruiken afbeelding</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
         <source>Pixel grid size</source>
         <translation>Grootte van pixelraster</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
         <source>Blur radius</source>
         <translation>Vervaagstraal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
         <source>Face Area Settings</source>
         <translation>Gezichtsveld-instellingen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
-        <translation>Geavanceerde gezichtsveld-instellingen
-aangaande achtergrondvervaging.</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
-        <translation>H-verschuiving</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
-        <translation>V-verschuiving</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
         <source>Width Adjust %</source>
         <translation>Breedte-aanpassing %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
         <source>Height Adjust %</source>
         <translation>Hoogte-aanpassing %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
         <source>Round Area</source>
         <translation>Rond gebied</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
-        <translation>H-straal %</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
-        <translation>V-straal %</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation>Kies markeerkleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation>Hard</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation>Gekoeld</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation>Opgelost</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation>Gezoomd</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation>Drempelwaarde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>Luma-drempelwaarde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Alfa-verschil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Alfa-variatie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation>Schrede</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation>Patroon</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation>90° Halftoon 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation>Cluster 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation>Cluster 4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation>Cluster 8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation>Lijnen 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation>Magie 2x2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation>Magie 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation>Geordend 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation>Geordend 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation>Geordend 8x8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation>Bitmappatroon</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation>Patroonafbeelding</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation>Zoek naar de afbeelding die als patroon moet worden gebruikt</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation>Patroongrootte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
-        <translation>Helderheid</translation>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
+        <translation>Belichting</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation>Heuvel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation>Onderschepping</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation>Onderscheppen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation>Spriraal 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation>Spriraal 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation>Parabool</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation>Horizontale streep</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation>Snelheidsverhoging</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation>Hoeveelheid</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>Luma-drempelwaarde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation>Kies de automata-kleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
         <translation>Aantal druppels</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation>Selecteren</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation>Kies een lettertype</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation>Cursorkleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation>Kies de cursorkleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation>Minimale druppellengte</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation>Min. druppellengte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation>Maximale druppellengte</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation>Max. druppellengte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation>Minimumsnelheid</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation>Min. snelheid</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation>Maximumsnelheid</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation>Max. snelheid</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation>Vloeiend vergroten/verkleinen</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation>Cursor tonen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation>Regen tonen</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation>Videospoor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation>Audiospoor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation>Ondertitelspoor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation>Synchroniseren</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation>Eenvoudig</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation>Helderheid</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>Contrast</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation>Normaal zacht</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation>Normaal hard</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation>Zachte kleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation>Harde kleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Alfa-verschil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation>Bestralingskleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation>Bewegingsdetectie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation>Regen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Algemene opties&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation>Aftakeling</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Bewegingsdetectie-opties&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Regenopties&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation>Minimale druppelgrootte</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation>Maximale druppelgrootte</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation>Druppeldikte</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation>Druppelsnelheid</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation>Lijnen tonen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation>Lijnen verbergen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation>Kleur verbergen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation>Kies de verbergkleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
         <translation>Verticale synchronisatie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation>Horizontale verschuiving</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation>Horizontale synchronisatiefactor</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation>Horizontale synchronisatievloeiendheid</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation>Tintafnamefactor</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation>Ruis</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation>Masker</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation>Graden</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>Temperatuur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>Videoformaat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>Resolutie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation>FPS</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>Standaardwaarden</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation>Standaardwaarden herstellen</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation>Verhouding</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation>Schaal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation>Zachtheid</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation>Kies de vignettekleur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation>Rimpelingen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
-        <translation>Fase</translation>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
+        <translation>Duur (in seconden)</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation>Flitser gebruiken</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation>Zojuist</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation>%1 seconden</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation>Foto maken</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation>%1/Afbeelding %2.%3</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation>Dagelijkse ontwikkelingsversie</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation>Video-effecten</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation>Video-effectenpaneel openen</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation>Flits gebruiken bij het maken van een foto</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation>Tijdklok</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation>De wachttijd alvorens een foto wordt genomen</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation>Schermfoto naar klembord</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation>Maakt een schermfoto en kopieert deze naar het klembord</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation>Schermfoto naar klembord</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation>In-/Uitvoerinstellingen</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation>Open het in-/uitvoerinstellingenmenu</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation>Recentste foto tonen</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation>Toon de recentst gemaakte foto</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation>Foto maken</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation>Maak een foto en sla op naar een bestand</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation>%1 in fotomodus zetten</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation>Video opnemen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation>Opname stoppen</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation>Video opnemen</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation>%1 in videomodus zetten</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation>Maak een opname en sla op naar een bestand</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation>Stop de huidige opname</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation>Recentste video tonen</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation>Toon de recentst opgenomen video</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation>Beeldverhouding</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation>Gezichtsherkenning-
 duur (in seconden)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation>Aantal gezichtsherkenningen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation>Uitzoomwaarde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation>Inzoomwaarde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation>Gezichtsopvulling (% van de gezichtsafmetingen)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
+        <translation>Opvulling aan bovenkant</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
+        <translation>Opvulling aan linkerkant</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
+        <translation>Opvulling aan rechterkant</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
+        <translation>Opvulling aan onderkant</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
         <source>Face margin (% of face size)</source>
         <translation>Gezichtscontouren (% van de gezichtsafmetingen)</translation>
     </message>
     <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
+        <translation>Marge aan bovenkant</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation>Marge aan linkerkant</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
+        <translation>Marge aan rechterkant</translation>
+    </message>
+    <message>
         <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation>Marge aan onderkant</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
         <source>e.g. 16:9, 4:3</source>
         <translation>bijv. 16:9, 4:3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
         <source>Lock viewport</source>
         <translation>Kijkhoek vastzetten</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
         <source>Debug mode</source>
         <translation>Foutopsporingsmodus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
         <source>Flip horizontally</source>
         <translation>Horizontaal spiegelen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
         <source>Flip vertically</source>
         <translation>Verticaal spiegelen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
         <source>Width</source>
         <translation>Breedte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
         <source>Aspect ratio width</source>
         <translation>Beeldverhouding - breedte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
         <source>Height</source>
         <translation>Hoogte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
         <source>Aspect ratio height</source>
         <translation>Beeldverhouding - hoogte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
-        <translation>Beelgroottemodus</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
-        <translation>Snel</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
-        <translation>Lineair</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
-        <translation>Beeldverhoudingsmodus</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation>Negeren</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
-        <translation>Behouden</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
-        <translation>Uitrekken</translation>
-    </message>
-    <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation>Niveaus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation>Kleur toevoegen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation>Alle kleuren wissen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation>Kies de toe te voegen kleur</translation>
@@ -2813,19 +3340,146 @@ duur (in seconden)</translation>
         <translation>Gamma</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation>Tint</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation>Verzadiging</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation>Helderheid</translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation>Framesnelheid afdwingen</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation>Oude kleur</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation>Kies de te vervangen kleur</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation>Nieuwe kleur</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation>Kies de nieuwe kleur</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation>Hoek</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation>Resolutie behouden</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation>Doorzichtigheid</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Palet&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation>Frameduur</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation>Tintverschuiving</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Schaduw&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation>Schaduwdrempelwaarde</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation>Lage schaduwdrempelwaarde</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation>Hoge schaduwdrempelwaarde</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation>Schaduwkleur</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation>Kies de kleur van de schaduw</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation>&lt;b&gt;X-as&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation>Reikwijdte (X)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation>Snelheid (X)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation>Fasering (X)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation>&lt;b&gt;Y-as&lt;/b&gt;</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation>Reikwijdte (Y)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation>Snelheid (Y)</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation>Fasering (Y)</translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/oc.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/oc.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Utiliza Qt %1</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Site web</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished">A prepaus de</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished">Contributors</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished">Licéncia</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished"></translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>Format</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation type="unfinished">Largor</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation type="unfinished">Nautor</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation>Frequéncia d&apos;imatge</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>Debit</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -131,33 +146,41 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation>Canals</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation>Taus d&apos;escandalhatge</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation>Silenci</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>Aquisicion Vidèo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation type="unfinished"></translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation type="unfinished">Recercar</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>Format de fichièr</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation>Qualitat</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation>Extensions</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation>Levar</translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>Actualizar</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished">Levar</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation>CAMIN</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation>Opcions generalas</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation>Extensions</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation>Mesas a jorn</translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>Jornalièr</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>Cada dos jorns</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>Setmanièr</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>Cada dos setmanas</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>Cada mes</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>Pas jamai</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>Darrièra mesa a jorn</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>Senhalar una anomalia</translation>
     </message>
@@ -618,12 +685,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation>Debit</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation>Levar</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation type="unfinished"></translation>
     </message>
@@ -747,7 +824,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation>Extension de fichièr</translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation>Apondre la font</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation>URL</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation>descripcion</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation>Camin d&apos;accès</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation type="unfinished">Recercar</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation>Editar</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation>Levar</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
-        <translation>Vidèo MPEG</translation>
+        <translation type="unfinished">Vidèo MPEG</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
-        <source>WebM Video</source>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <location filename="../../src/videolayer.cpp" line="164"/>
+        <source>WebM Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation>Totes los fichièrs</translation>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation>Editar</translation>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation>Levar</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation type="unfinished">Totes los fichièrs</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation type="unfinished">Recercar</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation type="unfinished">Recercar</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation>Format de fichièr</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation>Configurar</translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation>Codec Vidèo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation>Codecs àudio</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation>Ajustar posca</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation>Rai</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation>Color de linha</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>Mòde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
-        <translation>Natural</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
-        <translation>Fixat</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>Simbòls</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>Poliça</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation>Recercar</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation>Optimizacion</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>Valor per defaut</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>Estil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>Periferic</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation>Contorn</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation>Correspond</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>Qualitat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>Anti-crenelatge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation>Color de primièr plan</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>Color de rèireplan</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>Talha</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>Color</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation>Doç</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation>Basa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation>Metal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation>Calor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>Roge e verd</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation>Sépia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation>Rai X</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation>Personalizar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation>Factor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation>Talha del blòt</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation>Sigma</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation>Frequéncia d&apos;imatge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation>Amplitud</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>Frequéncia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1664,1165 +1952,1531 @@
         <translation>Velocitat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation>Fòrça</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation>Egalizar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation>Inversar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>Uèlh</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>Nas</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>Sorire especiat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation>Rectangle</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation>Ellipsa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation>Imatge</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation>Pixelizar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation>Fosc</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation>Plen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation>Jonhent</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation>Punt</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation>Àngel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>Ors</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation>Vibre</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>Cat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation>Polet</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>Vaca</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation>Diable</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>Drac</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation>Girafa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation>Craba</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>Caval</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation>Coalà</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>Monin</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation>Mirga grisa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation>Pingoïn</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation>Arraton lavaire</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation>Zèbra</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
-        <translation>Rai del fosc</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
+        <translation>Rai del fosc</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation>Dificil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation>Dissòlvre</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation>Sulhet</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation>Motiu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
-        <translation>Clartat</translation>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation>Quantitat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation>Seleccionar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation>Color del cursor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation>Pista àudio</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation>Simple</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation>Luminositat</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>Contraste</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation>Pluèja</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation>Bruch</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation>Masqueta</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation>Grases</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>Temperatura</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>Definicion</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation>FPS</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>Recomençar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation>Aspècte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation>Escala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation>Importància del degradat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation>Ara</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation>%1 segondas</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation>Proporcions</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
         <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
         <source>e.g. 16:9, 4:3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
         <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
         <source>Debug mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
         <source>Flip horizontally</source>
         <translation>Revirament orizontal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
         <source>Flip vertically</source>
         <translation>Revirar verticalament</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
         <source>Width</source>
         <translation>Largor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
         <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
         <source>Height</source>
         <translation>Nautor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
         <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
-        <translation>Mòde de redimensionament</translation>
+        <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
+        <source>Levels</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
-        <translation>Rapid</translation>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
+        <source>Add color</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
-        <translation>Linear</translation>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
+        <source>Clear all colors</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
+        <source>Select the color to add</source>
+        <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation>Ignorar</translation>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="106"/>
+        <source></source>
+        <translation></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
+        <location filename="../../../libAvKys/Plugins/Gamma/share/qml/main.qml" line="40"/>
+        <source>Gamma</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
+        <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
-        <source>Levels</source>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
+        <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
-        <source>Add color</source>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
+        <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
-        <source>Clear all colors</source>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
-        <source>Select the color to add</source>
-        <extracomment>Select the color to add to the color table</extracomment>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="106"/>
-        <source></source>
-        <translation></translation>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Gamma/share/qml/main.qml" line="40"/>
-        <source>Gamma</source>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
-        <source>Hue</source>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
-        <source>Saturation</source>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
-        <source>Luminance</source>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/pl.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/pl.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Używane Qt %1</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Strona internetowa</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>Aplikacja do przechwytywania kamer internetowych.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>Prosta aplikacja do przechwytywania zdjęć i filmów.</translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished">O programie</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished">Współtwórcy</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished">Licencja</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished">Licencje stron trzecich</translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation type="unfinished">Częstotliwość wyświetlania klatek</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>Opcje kodeków audio</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>Bitrate</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Bitrate (bity/sek)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation>Opcje urządzenia audio</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation>Przykładowy format</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation>Kanały</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation>Częstotliwość próbkowania</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation>Opóźnienie (ms)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation>Wycisz</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>Przechwytywanie wideo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>Przechwytywanie pulpitu</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>Przechwytywanie/odtwarzanie dźwięku</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>Konwersja wideo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>Sterownik kamery wirtualnej</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>Odtwarzanie wideo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation>Odtwarzaj źródła na starcie</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>Frameworki i biblioteki</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation>Nagrywanie wideo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation>Metoda korzeniowa</translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation>Katalog obrazów</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation>Szukaj</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>Format pliku</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation>Jakość</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation>Wybierz folder, aby zapisać swoje zdjęcia</translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation>Wtyczki</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation>Szukaj wtyczek w podfolderach</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation>Dodaj ścieżkę</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation>Usuń</translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>Aktualizuj</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>Dodaj ścieżkę wyszukiwania wtyczek</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished">Usuń</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation>Aplikacja do przechwytywania kamer internetowych.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation>Załaduj ustawienia z PATH. Jeśli PATH jest pusta, załaduj configs z katalogu aplikacji.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation>PATH</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation>PATH1;PATH2;PATH3;...</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation>Szukaj w określonych ścieżkach wtyczek rekurencyjnie.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation>Lista rozdzielona średnikami, zawierająca ścieżki do wyszukiwania wtyczek.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation>Lista ścieżek rozdzielona średnikami, aby uniknąć ładowania.</translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation>%1/Wideo %2.%3</translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation>Przechwytywanie obrazu</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation>Nagrywanie wideo</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation>Opcje ogólne</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation>Wtyczki</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation>Aktualizacje</translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished">Wybierz nowy kolor</translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation>Powiadamiaj o nowych wersjach</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation>Sprawdź nowe wersje</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>Codziennie</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>Co dwa dni</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>Co tydzień</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>Co dwa tygodnie</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>Miesięczne</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>Nigdy</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>Ostatnio zaktualizowany</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>Twoja wersja %1 jest nieaktualna. Najnowsza wersja to &lt;b&gt;%2&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation>Uaktualnij teraz!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>Dziękujemy za użycie &lt;b&gt;wersji rozwojowej&lt;/b&gt;!&lt;br /&gt;Będzie to bardzo pomocne, jeśli zgłosisz błędy i sugestie.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>Zgłoś błąd</translation>
     </message>
@@ -618,12 +685,12 @@
         <translation type="unfinished">Nowa wersja jest dostępna!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation type="unfinished">Pobierz %1 %2 TERAZ!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation>Opcje kodeka wideo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation>Bitrate</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Bitrate (bity/sek)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation>Usuń</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation>Dodaj efekt wideo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation>Szukaj efektu</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation>Efekt łańcucha</translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation>Dodaj efekt</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation>Usuń&#xa0;wszystkie efekty</translation>
     </message>
@@ -747,7 +824,7 @@
         <translation>Opcje formatu wideo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation>Rozszerzenie pliku</translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation type="unfinished">Plik</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation type="unfinished">URL</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation type="unfinished">Opis</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation type="unfinished">Tytuł&#xa0;źródłowy</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation type="unfinished">Ścieżka</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation type="unfinished">Ścieżka pliku</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation type="unfinished">Szukaj</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation type="unfinished">Wybierz plik, który chcesz dodać jako źródło</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation>Edycja</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation>Usuń</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation>Dodaj źródło</translation>
+    </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation type="unfinished">Wszystkie pliki wideo</translation>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation>Nie znaleziono kamer internetowych</translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation type="unfinished">Wideo 3GP</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation type="unfinished">Wideo AVI</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation type="unfinished">Flash Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation type="unfinished">Animowany GIF</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation type="unfinished">Wideo MKV</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation type="unfinished">Animowany PNG</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation type="unfinished">Wideo QuickTime</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation type="unfinished">Wideo MP4</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation type="unfinished">Wideo MPEG</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation type="unfinished">Wideo Ogg</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation type="unfinished">Wideo RealMedia</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation type="unfinished">DVD Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation type="unfinished">Wideo WebM</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="167"/>
         <source>Windows Media Video</source>
         <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation type="unfinished">Windows Media Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation type="unfinished">Wszystkie pliki</translation>
-    </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
-    <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation>Edycja</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation>Usuń</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
-        <translation>Dodaj źródło</translation>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation>Nie znaleziono kamer internetowych</translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation type="unfinished">Wszystkie pliki</translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation type="unfinished">Szukaj</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation type="unfinished">Wybierz plik obrazu</translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation>Katalog wideo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation>Szukaj</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation>Nagraj dźwięk</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation>Format pliku</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation>Konfiguruj</translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation>Kodek wideo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation>Kodek dźwięku</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation>Wybierz folder, w którym chcesz zapisać swoje filmy</translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation type="unfinished">Liczba zadrapań</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation>Dodaj kurz</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation>Promień</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
-        <translation>N° kolorów</translation>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation>Różnica barw</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation>Pokaż krawędzie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation>Kolor linii</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation>Skanuj blok</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>Wybierz kolor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation>Przekształcenie macierzy</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>Tryb</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
-        <translation>Naturalny</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
-        <translation>Naprawiony</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>Symbole</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>Czcionka</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation>Szukaj</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation>Podpowiedź</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>Domyślny</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation>Bez podpowiedzi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation>Pionowe podpowiedzi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation>Pełne podpowiedzi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>Styl</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation>Bitmapa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>Urządzenie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation>Zarys</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation type="unfinished">Zarys sił</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation>Dopasuj</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>Jakość</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>Antyalias</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation>Bez antyaliasów</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation>Zgodny z OpenGL</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation>Wymuś liczbę całkowitą</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation type="unfinished">Brak antyaliasów subpikseli</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation>Brak łączenia czcionek</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation>Kolor pierwszego planu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>Kolor tła</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation>Odwrócone</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation>Wybierz czcionkę</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation>Wybierz kolor pierwszego planu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation>Wybierz kolor tła</translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>Rozmiar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>Kolor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation>Wybierz kolor pasków</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation>Miękkie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation>Wybierz kolor do filtrowania</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation>Stary kolor</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation>Nowy kolor</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation>Wybierz kolor, który chcesz zastąpić</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation>Wybierz nowy kolor</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation>Tabela kolorów</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation>Podstawa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation>Metal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation>Ciepło</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation>Stara Fotografia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>Czerwony i Zielony</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation>Sepia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation>X-Pro</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation>X-Ray</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>Żółty i Niebieski</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation>Niestandardowe</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation>Paleta źródłowa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation>Wybierz plik obrazu</translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation>Rozmywanie/Wyostrzanie matrix</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation>Współczynnik</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation>Ukos</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation>Tryb przechwytywania</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation>Losowy kwadrat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation>Pionowy wzrost</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation>Poziomy wzrost</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation>Wzrost pierścieniowy</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation>Rozmiar bloku</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
-        <translation>N° ramek</translation>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation>Mu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation>Sigma</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation>Częstotliwość wyświetlania klatek</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation>Amplituda</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>Częstotliwość</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation>Rozmiar siatki</translation>
     </message>
@@ -1664,1138 +1952,1377 @@
         <translation>Prędkość</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation>Współczynnik powiększenia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation>Wytrzymałość</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation>Tryb Canny</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation>Próg Canny</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation>Wyrównanie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation>Odwróć</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation>Plik Haar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>Oko</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation>Okulary</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation>Portrety twarzy alternatywnych 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation>Portrety twarzy 2 alternatywne</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation>Portrety twarzy 3 alternatywne</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation>Domyślne portrety twarzy</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation>Całe ciało</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation>Lewe oko 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation>Dolne części ciała</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation>Duża para oczu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation>Mała para oczu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation>Lewe ucho</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation>Lewe oko 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation>Usta</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>Nos</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation>Prawe ucho</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation>Prawe Oko 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation>Górna część ciała 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation>Profil twarzy</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation>Prawe oko 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>Uśmiech</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation>Górna część ciała</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation>Typ znacznika</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation>Prostokąt</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation>Elipsa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation>Obraz</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation>Pikslowanie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation>Rozmycie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation>Styl znacznika</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation>Pełny</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation>Kreska</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation>Kropka</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation>Kreska kropka</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation>Kreska kropka kropka</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation>Kolor znacznika</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation>Szerokość znacznika</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation>Maska</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation>Anioł</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>Niedźwiedź</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation>Bóbr</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>Kot</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation>Kurczak</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>Krowa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation>Diabeł</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation>Pies</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation>Pies dalmatyńczyk</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation>Szczęśliwy pies</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>Smok</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation>Słoń 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation>Słoń 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation>Każdy</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation>Żaba</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation>Duch</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation>Żyrafa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation>Gnu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation>Koziorożec</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation>Hipopotam</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>Koń</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation>Szary koń</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation>Koala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>Małpa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation>Szara myszka</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation>Biała myszka</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation>Panda</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation>Pingwin</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation>Dynia 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation>Dynia 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation>Szop</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation>Nosorożec</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation>Owca</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation>Czaszka 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation>Czaszka 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation>Triceratops</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation>Zebra</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation>Zdjęcie znacznika</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation>Zastąp twarz tym obrazem</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
-        <translation>Rozmiar siatki pikseli</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
-        <translation>Promień rozmycia</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
+        <translation>Rozmiar siatki pikseli</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
+        <translation>Promień rozmycia</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation>Wybierz kolor znacznika</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation>Twardy</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation>Chłodzenie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation>Rozpuść</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation>Zoom</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation>Próg</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>Próg Luma</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Odmiana alfa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation>Krok</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation>Wzór</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation>90° półtony 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation>Grupa 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation>Grupa 4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation>Grupa 8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation>Linia 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation>Magiczny 2x2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation>Magiczny 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation>Regulacja 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation>Ustaw 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation>Ustaw 8x8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation>Wzór bitmapy</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation>Rozmiar wzoru</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
-        <translation>Lekkość</translation>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation>Nachylenie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation>Przechwyć</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation>Spirala 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation>Spirala 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation>Parabola</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation>Poziomy pasek</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation>Przyrost prędkości</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation>Kwota</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>Próg Luma</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation>Wybierz kolor automatów</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
-        <translation>Liczba kropli</translation>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation>Wybierz</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation>Kolor kursora</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation>Wybierz kolor kursora</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation>Min. długość zrzutu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation>Max. długość zrzutu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation>Min. prędkość</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation>Max. prędkość</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation>Pokaż&#xa0;kursor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation>Ścieżka wideo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation>Ścieżka dźwiękowa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation>Ścieżka napisów</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation>Proste</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation>Jasność</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>Kontrast</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation>Miękki normalny</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation>Twardy normalny</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation>Miękki kolor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation>Mocny kolor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Różnica alfa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation>Kolor promieniowania</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation>Wykrywanie ruchu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation>Deszcz</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation>Rozkład</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation>Pokaż linie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation>Ukryj linie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation>Ukryj kolor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation>Wybierz kolor ukrywania</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
-        <translation>Synchronizacja pionowa</translation>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation>Szum</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation>Maska</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation>Stopnie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>Temperatura</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>Format wideo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>Rozdzielczość</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation>Klatki na sekundę&#xa0;(FPS)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>Reset</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation>Wygląd</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation>Skala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation>Miękkość</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation>Wybierz kolor winiety</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation>Marszczenie</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
-        <translation>Faza</translation>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation>Użyj flasha</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation>Teraz</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation>%1 sekund</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation>Zrób zdjęcie</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation>%1/Obraz %2.%3</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished">Codzienna kompilacja</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation>Nagraj wideo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
-        <source>Face margin (% of face size)</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
-        <source>e.g. 16:9, 4:3</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
-        <source>Lock viewport</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
-        <source>Debug mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
-        <source>Flip horizontally</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
+        <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
-        <source>Flip vertically</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
-        <source>Width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
-        <source>Aspect ratio width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
-        <source>Height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
-        <source>Aspect ratio height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
+        <source>e.g. 16:9, 4:3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
+        <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
+        <source>Debug mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
+        <source>Flip horizontally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
+        <source>Flip vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
+        <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
+        <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
+        <source>Height</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
+        <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2811,19 +3338,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished">Wybierz nowy kolor</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/pt.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/pt.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Utilizando o Qt %1</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Site</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>Aplicação de captura da câmara web.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>Uma aplicação simples para captura de imagens e vídeos da câmara web.</translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished">Sobre</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished">Contribuidores</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished">Licença</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished">Licenças de Softwares de Terceiros</translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation>Adicionar formato do vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation>Mudar formato do vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation>Remover formato</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>Formato</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation>Largura</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation>Altura</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation>Taxa de quadros</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>Opções do codec de áudio</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>Taxa de bits</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Taxa de bits (bits/sec)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation>Opções do aparelho de áudio</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation>Formato de amostra</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation>Canais</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation>Taxa de amostragem</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation>Latência (ms)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation>Silêncio</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>Captura de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>Captura do ambiente de trabalho</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>Captura / reprodução do áudio</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>Conversão do vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>Controlador da câmara virtual</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>Reprodução do vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation>Executar fontes ao inicializar</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>Frameworks e bibliotecas</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation>Gravação de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation>Método de root</translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation>Imagens do diretório</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation>Pesquisar</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>Formato de ficheiro</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation>Qualidade</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation>Selecione a pasta para gravar as suas fotos</translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation>Plugins</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation>Pesquisar plugins em subpastas</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation>Adicionar caminho</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation>Remover</translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>Atualizar</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>Adicionar diretório de procura de plugins</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished">Remover</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation>Aplicação de captura da câmara web.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation>Carregar definições a partir de CAMINHO. Se CAMINHO estiver vazio, carregar definições a partir do diretório da aplicação.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation>CAMINHO</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation>CAMINHO1;CAMINHO2;CAMINHO3;...</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation>Pesquisar nos caminhos de plugins especificados recursivamente.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation>Lista separada por ponto e vírgula dos diretórios para pesquisa de plugins.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation>Lista separada por ponto e vírgula dos diretórios a evitar carregamento.</translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation>%1/Vídeo %2.%3</translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation>Captura de Imagem</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation>Gravação de Vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation>Opções Gerais</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation>Plugins</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation>Atualizações</translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished">Selecionar a nova cor</translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation>Notificar sobre novas versões</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation>Mostrar caixa de diálogo de atualizações</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation>Verificar se existe nova versão</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>Diariamente</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>A cada 2 dias</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>Semanalmente</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>A cada 2 semanas</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>Mensalmente</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>Nunca</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>Última atualização</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>A sua versão de %1 está desatualizada. A última versão é &lt;b&gt;%2&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation>Atualizar agora!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>Obrigado por usar a &lt;b&gt;versão de desenvolvimento&lt;/b&gt;!&lt;br /&gt;Seria muito útil se pudesse reportar qualquer erro ou sugestão que tenha.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>Reportar um erro</translation>
     </message>
@@ -618,12 +685,12 @@
         <translation>Nova versão disponível!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation>Baixe %1 %2 AGORA!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation>Mostrar esta caixa de diálogo na próxima vez</translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation>Opções do Codec de Vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation>Taxa de bits</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Taxa de bits (bits/sec)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation>Remover</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation>Adicionar efeito de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation>Buscar efeito</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation>Adicionar efeito</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation>Remover todos os efeitos</translation>
     </message>
@@ -747,7 +824,7 @@
         <translation>Opções de Formato de Vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation>Extensão do ficheiro</translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation>Editar Fonte</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation>Adicionar Fonte</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation>Ficheiro</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation>URL</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation>Descrição</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation>Título da fonte</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation>Caminho do ficheiro</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation>Pesquisar</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation>Escolher ficheiro para adicionar como fonte</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation>Editar</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation>Remover</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation>Adicionar fonte</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation>Todos os Ficheiros de Vídeo</translation>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation>Nenhuma webcam encontrada</translation>
     </message>
+</context>
+<context>
+    <name>VideoLayer</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
-        <translation>Vídeo 3GP</translation>
+        <translation type="unfinished">Vídeo 3GP</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
-        <translation>Vídeo AVI</translation>
+        <translation type="unfinished">Vídeo AVI</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
-        <translation>Vídeo Flash</translation>
+        <translation type="unfinished">Vídeo Flash</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
-        <translation>GIF Animada</translation>
+        <translation type="unfinished">GIF Animada</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
-        <translation>Vídeo MKV</translation>
+        <translation type="unfinished">Vídeo MKV</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
-        <translation>PNG Animada</translation>
+        <translation type="unfinished">PNG Animada</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
-        <translation>Vídeo QuickTime</translation>
+        <translation type="unfinished">Vídeo QuickTime</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
-        <translation>Vídeo MP4</translation>
+        <translation type="unfinished">Vídeo MP4</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
-        <translation>Vídeo MPEG</translation>
+        <translation type="unfinished">Vídeo MPEG</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
-        <translation>Vídeo Ogg</translation>
+        <translation type="unfinished">Vídeo Ogg</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
-        <translation>Vídeo RealMedia</translation>
+        <translation type="unfinished">Vídeo RealMedia</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
-        <translation>Vídeo DVD</translation>
+        <translation type="unfinished">Vídeo DVD</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
-        <translation>Vídeo WebM</translation>
+        <translation type="unfinished">Vídeo WebM</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
-        <translation>Windows Media Video</translation>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation>Todos os ficheiros</translation>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <translation type="unfinished">Windows Media Video</translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation>Editar</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation>Remover</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
-        <translation>Adicionar fonte</translation>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation>Nenhuma webcam encontrada</translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation type="unfinished">Todos os ficheiros</translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation>Nenhuma Saída de Vídeo</translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation>Editar Câmara Virtual</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation>Adicionar Câmara Virtual</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation>Nome da câmara virtual</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation>Adicionar formato</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation>Limpar formatos</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation>Descrição da câmara e formatos não podem estar vazios.</translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation>Imagem de saída da câmara virtual</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation>Imagem de saída padrão da câmara virtual</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation>Pesquisar</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation>Erro ao Remover as Câmaras Virtuais</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation>Por favor, escolha um ficheiro de imagem</translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished">Erro ao Remover as Câmaras Virtuais</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation>Vídeos do diretório</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation>Pesquisar</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation>Gravar áudio</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation>Formato de ficheiro</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation>Configurar</translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation>Codec de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation>Codec de áudio</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation>Selecione a pasta para gravar os seus vídeos</translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation>Número de riscos</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation>Adicionar pó</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation>Raio</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
-        <translation>Nº de cores</translation>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation>Diferença de cor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation>Mostrar bordas</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation>Cor da linha</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation>Bloco de digitalização</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>Escolher cor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation>Matriz de transformação</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>Modo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
-        <translation>Natural</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
-        <translation>Corrigido</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>Símbolos</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>Fonte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation>Pesquisar</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation>Sugestão</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>Padrão</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation>Sem sugestão</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation>Sugestão vertical</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation>Sugestão completa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>Estilo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation>Bitmap</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>Aparelho</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation>Contorno</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation>Forçar contorno</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation>Corresponder</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>Qualidade</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>Anti-serrilhado</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation>Sem anti-serrilhado</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation>Compatível com OpenGL</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation>Forçar métricas inteiras</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation>Sem anti-serrilhado de sub-píxel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation>Sem fusão de fontes</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation>Cor de cima</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>Cor do fundo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation>Invertido</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation>Por favor escolha uma fonte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation>Escolher a cor de cima</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation>Escolher a cor do fundo</translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>Tamanho</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>Cor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation>Escolher a cor das riscas</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation>Suave</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation>Selecionar a cor a filtrar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation>Cor antiga</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation>Nova cor</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation>Selecionar a cor a substituir</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation>Selecionar a nova cor</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation>Tabela de cores</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation>Base</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation>Metal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation>Calor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation>Foto antiga</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>Vermelho e verde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation>Sépia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation>X-Pro</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation>Raio X</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>Amarelo e azul</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation>Personalizado</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation>Paleta fonte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation>Por favor escolha um ficheiro de imagem</translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation>Matriz de convolver</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation>Fator</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation>Tendência</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation>Modo de colher</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation>Quadrado aleatório</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation>Aumento vertical</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation>Aumento horizontal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation>Aumento de anéis</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation>Tamanho do bloco</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
-        <translation>Nº de fotogramas</translation>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation>Mu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation>Sigma</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation>Fotogramas por segundo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation>Amplitude</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>Frequência</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation>Tamanho da grelha</translation>
     </message>
@@ -1664,1165 +1952,1531 @@
         <translation>Velocidade</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation>Rácio de ampliação</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation>Força</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation>Modo Canny</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation>Equalizar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation>Inverter</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation>Ficheiro Haar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>Olho</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation>Óculos dos olhos</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation>Face frontal alternativa 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation>Face frontal alternativa 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation>Face frontal alternativa 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation>Face frontal padrão</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation>Corpo inteiro</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation>Olho esquerdo 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation>Parte de baixo do corpo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation>Par de olhos grande</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation>Par de olhos pequeno</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation>Orelha esquerda</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation>Olho esquerdo 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation>Boca</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>Nariz</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation>Orelha direira</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation>Olho direito 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation>Parte de cima do corpo 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation>Face de perfil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation>Olho direito 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>Sorriso</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation>Parte de cima do corpo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation>Tipo de marcador</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation>Retângulo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation>Elipse</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation>Imagem</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation>Pixelizar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation>Desfocar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation>Desfocar Exterior</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation>Estilo de marcador</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation>Sólido</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation>Traço</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation>Ponto</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation>Traço ponto</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation>Traço ponto ponto</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation>Cor do marcador</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation>Espessura do marcador</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation>Máscaras</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation>Anjo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>Urso</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation>Castor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>Gato</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation>Galinha</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>Vaca</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation>Diabo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation>Cão</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation>Cão dálmata</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation>Cão feliz</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>Dragão</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation>Elefante 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation>Elefante 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation>Alce</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation>Rã</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation>Fantasma</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation>Girafa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation>Gnu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation>Cabra</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation>Hipopótamo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>Cavalo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation>Cavalo cinzento</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation>Coala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>Macaco</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation>Rato cinzento</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation>Rato branco</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation>Panda</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation>Pinguim</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation>Abóbora 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation>Abóbora 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation>Guaxinim</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation>Rinoceronte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation>Ovelha</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation>Caveira 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation>Caveira 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation>Tricerátops</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation>Zebra</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation>Marcador de imagem</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation>Substituir face com esta imagem</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
-        <translation>Tamanho da grelha do píxel</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
-        <translation>Raio da desfocagem</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
+        <translation>Tamanho da grelha do píxel</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
+        <translation>Raio da desfocagem</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation>Selecionar cor do marcador</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation>Duro</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation>Refrescante</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation>Dissolver</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation>Ampliação</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation>Limiar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>Limiar de luminância</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Diferença de alfa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Variação de alfa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation>Passo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation>Padrão</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation>Meio-tom 90° 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation>Aglomerado 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation>Aglomerado 4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation>Aglomerado 8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation>Linhas 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation>Mágico 2x2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation>Mágico 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation>Ordenado 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation>Ordenado 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation>Ordenado 8x8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation>Tamanho do padrão</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
-        <translation>Luminosidade</translation>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation>Declive</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation>Interseção</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation>Espiral 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation>Espiral 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation>Parábola</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation>Risca horizontal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation>Incremento de velocidade</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation>Quantidade</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>Limiar de luminância</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation>Escolher a cor do autómata</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
-        <translation>Nº de gotas</translation>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation>Selecionar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation>Cor do cursor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation>Escolha a cor do cursor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation>Velocidade mín</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation>Velocidade máx</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation>Mostrar cursor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation>Faixa de vídeo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation>Faixa de áudio</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation>Faixa de legendas</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation>Simples</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation>Brilho</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>Contraste</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation>Normal suave</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation>Normal duro</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation>Cor suave</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation>Cor dura</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Diferencial alfa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation>Cor da radiação</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation>Deteção de movimento</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation>Chuva</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation>Degradação</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation>Mostrar linhas</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation>Esconder linhas</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation>Esconder cor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation>Escolha a cor de esconder</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
-        <translation>Sincronização vertical</translation>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation>Ruído</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation>Máscara</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation>Graus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>Temperatura</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>Formato do vídeo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>Resolução</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation>FPS</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>Repor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation>Proporção</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation>Escala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation>Suavidade</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation>Escolha a cor da vinhetagem</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation>Ondas</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
-        <translation>Fase</translation>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation>Usar flash</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation>Agora</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation>%1 segundos</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation>Tirar uma foto</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished">Compilação diária</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation>Gravar vídeo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation>Proporção de ecrã</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
         <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
         <source>e.g. 16:9, 4:3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
         <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
         <source>Debug mode</source>
         <translation>Modo de depuração</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
         <source>Flip horizontally</source>
         <translation>Girar horizontalmente</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
         <source>Flip vertically</source>
         <translation>Girar verticalmente</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
         <source>Width</source>
         <translation type="unfinished">Largura</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
         <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
         <source>Height</source>
         <translation type="unfinished">Altura</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
         <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
+        <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
-        <translation>Rápido</translation>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
+        <source>Add color</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
-        <translation>Linear</translation>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
+        <source>Clear all colors</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
-        <translation>Modo da proporção de ecrã</translation>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
+        <source>Select the color to add</source>
+        <extracomment>Select the color to add to the color table</extracomment>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation>Ignorar</translation>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="106"/>
+        <source></source>
+        <translation></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
-        <translation>Manter</translation>
+        <location filename="../../../libAvKys/Plugins/Gamma/share/qml/main.qml" line="40"/>
+        <source>Gamma</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
+        <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
-        <source>Levels</source>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
+        <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
-        <source>Add color</source>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
+        <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
-        <source>Clear all colors</source>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
-        <source>Select the color to add</source>
-        <extracomment>Select the color to add to the color table</extracomment>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="106"/>
-        <source></source>
-        <translation></translation>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Gamma/share/qml/main.qml" line="40"/>
-        <source>Gamma</source>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
-        <source>Hue</source>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished">Selecionar a nova cor</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
-        <source>Saturation</source>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
-        <source>Luminance</source>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/pt_BR.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/pt_BR.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Utilizando o Qt %1</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Site</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>Aplicativo de captura da Webcam.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>Um aplicativo simples para captura de imagens e vídeos da webcam.</translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished">Sobre</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished">Contribuidores</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished">Licença</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished">Licenças de Softwares de Terceiros</translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation>Adicionar Formato do Vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation>Mudar Formato do Vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation>Remover formato</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>Formato</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation>Largura</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation>Altura</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation>Taxa de quadros</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>Opções do Codec de Áudio</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>Taxa de bits</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Taxa de bits (bits/seg)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation>Opções do Dispositivo de Áudio</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation>Formato de Amostra</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation>Canais</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation>Taxa de Amostragem</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation>Latência (ms)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation>Silêncio</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>Captura de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>Captura de desktop</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>Play/captura de áudio</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>Conversão de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>Driver da câmera virtual</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>Reprodução de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation>Executar fontes ao inicializar</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>Frameworks e bibliotecas</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation>Gravação de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation>Método root</translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation>Imagens do diretório</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation>Pesquisar</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>Formato de arquivo</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation>Qualidade</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation>Selecione a pasta para salvar suas fotos</translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation>Plugins</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation>Pesquisar plugins em subpastas</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation>Adicionar caminho</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation>Remover</translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>Atualizar</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>Adicionar plugins ao caminho de busca</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished">Remover</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished">Aplicativo de captura da Webcam.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation>Captura de Imagem</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation>Gravação de Vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation>Opções Gerais</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation>Plugins</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation>Atualizações</translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished">Selecione a nova cor</translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation>Notificar sobre novas versões</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation>Mostrar caixa de diálogo de atualizações</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation>Procurar novas versões</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>Diariamente</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>A cada dois dias</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>Semanalmente</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>A cada duas semanas</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>Mensalmente</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>Nunca</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>Última atualização</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>Sua versão de %1 está desatualizada. A última versão é &lt;b&gt;%2&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation>Atualizar Agora!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>Obrigado por utilizar uma &lt;b&gt;versão de desenvolvimento&lt;/b&gt;!&lt;br /&gt;Será muito útil se você puder reportar qualquer bugs ou sugestão que você possa ter.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>Reportar um Bug</translation>
     </message>
@@ -618,12 +685,12 @@
         <translation>Nova versão disponível!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation>Baixe %1 %2 AGORA!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation>Mostrar esta caixa de diálogo na próxima vez</translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation>Opções do Codec de Vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation>Taxa de bits</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Taxa de bits (bits/seg)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation>Remover</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation>Adicionar efeito de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation>Buscar efeito</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation>Adicionar efeito</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation>Remover todos os efeitos</translation>
     </message>
@@ -747,7 +824,7 @@
         <translation>Opções de Formato de Vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation>Extensão do arquivo</translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation>Editar Fonte</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation>Adicionar Fonte</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation>Arquivo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation>URL</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation>Descrição</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation>Título da fonte</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation>Caminho do arquivo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation>Pesquisar</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation>Escolher arquivo para adicionar como fonte</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation>Editar</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation>Remover</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation>Adicionar fonte</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation>Todos os Arquivos de Vídeo</translation>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation>Nenhuma webcam encontrada</translation>
     </message>
+</context>
+<context>
+    <name>VideoLayer</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
-        <translation>Vídeo 3GP</translation>
+        <translation type="unfinished">Vídeo 3GP</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
-        <translation>Vídeo AVI</translation>
+        <translation type="unfinished">Vídeo AVI</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
-        <translation>Vídeo Flash</translation>
+        <translation type="unfinished">Vídeo Flash</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
-        <translation>GIF Animada</translation>
+        <translation type="unfinished">GIF Animada</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
-        <translation>Vídeo MKV</translation>
+        <translation type="unfinished">Vídeo MKV</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
-        <translation>PNG Animada</translation>
+        <translation type="unfinished">PNG Animada</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
-        <translation>Vídeo QuickTime</translation>
+        <translation type="unfinished">Vídeo QuickTime</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
-        <translation>Vídeo MP4</translation>
+        <translation type="unfinished">Vídeo MP4</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
-        <translation>Vídeo MPEG</translation>
+        <translation type="unfinished">Vídeo MPEG</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
-        <translation>Vídeo Ogg</translation>
+        <translation type="unfinished">Vídeo Ogg</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
-        <translation>Vídeo RealMedia</translation>
+        <translation type="unfinished">Vídeo RealMedia</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
-        <translation>Vídeo DVD</translation>
+        <translation type="unfinished">Vídeo DVD</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
-        <translation>Vídeo WebM</translation>
+        <translation type="unfinished">Vídeo WebM</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
-        <translation>Windows Media Video</translation>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation>Todos os arquivos</translation>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <translation type="unfinished">Windows Media Video</translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation>Editar</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation>Remover</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
-        <translation>Adicionar fonte</translation>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation>Nenhuma webcam encontrada</translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation type="unfinished">Todos os arquivos</translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation>Nenhuma Saída de Vídeo</translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation>Editar Câmera Virtual</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation>Adicionar Câmera Virtual</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation>Nome da câmera virtual</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation>Adicionar formato</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation>Limpar formatos</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation>Descrição da câmera e formatos não podem estar vazios.</translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation>Imagem de saída da câmera virtual</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation>Imagem de saída padrão da câmera virtual</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation>Pesquisar</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation>Erro ao Remover as Câmeras Virtuais</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation>Por favor, escolha um arquivo de imagem</translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished">Erro ao Remover as Câmeras Virtuais</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation>Vídeos do diretório</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation>Pesquisar</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation>Gravar áudio</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation>Formato de arquivo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation>Configurar</translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation>Codec de vídeo</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation>Codec de áudio</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation>Selecione a pasta para salvar os seus vídeos</translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation>Raio</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
-        <translation>Nº de cores</translation>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation>Diferença de cor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation>Mostrar bordas</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation>Cor da linha</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation>Escanear bloco</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>Escolher uma cor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation>Matriz de Transformação</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>Modo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
-        <translation>Natural</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
-        <translation>Fixo</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>Símbolos</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>Fonte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation>Pesquisar</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>Padrão</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>Estilo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation>Mapa de bits</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>Dispositivo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation>Contorno</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation>Forçar contorno</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>Qualidade</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>Antisserrilhamento</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation>Sem antisserrilhamento</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation>Compatível com OpenGL</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation>Forçar métricas inteiras</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation>Sem antisserrilhamento de subpíxel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation>Sem fusão de fontes</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation>Cor do primeiro plano</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>Cor de fundo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation>Invertido</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation>Por favor, escolha uma fonte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation>Escolha a cor do primeiro plano</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation>Escolha a cor de fundo</translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>Tamanho</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>Cor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation>Suave</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation>Selecione a cor para filtrar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation>Cor antiga</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation>Nova cor</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation>Selecione a cor para substituir</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation>Selecione a nova cor</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation>Tabela de cores</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation>Base</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation>Metal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation>Foto Antiga</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>Vermelho e Verde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation>Sépia</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation>X-Pro</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation>Raio-X</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>Amarelo e Azul</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation>Customizado</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation>Paleta fonte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation>Por favor, escolha um arquivo de imagem</translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation>Fator</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation>Quadrado aleatório</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation>Aumento vertical</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation>Aumento horizontal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation>Tamanho do bloco</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
-        <translation>Nº de frames</translation>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation>MA</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation>Sigma</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation>Taxa de quadros</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation>Amplitude</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>Frequência</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation>Tamanho do grid</translation>
     </message>
@@ -1664,1165 +1952,1531 @@
         <translation>Velocidade</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation>Taxa de zoom</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation>Força</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation>Modo Canny</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation>Equalizar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation>Inverter</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation>Arquivo Haar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>Olho</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation>Óculos</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation>Face frontal alternativa 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation>Face frontal alternativa 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation>Face frontal alternativa 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation>Face frontal padrão</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation>Corpo completo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation>Olho esquerdo 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation>Inferior do corpo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation>Par de olhos grandes</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation>Par de olhos pequenos</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation>Orelha esquerda</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation>Olho esquerdo 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation>Boca</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>Nariz</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation>Orelha direita</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation>Olho direito 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation>Parte superior do corpo 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation>Face de perfil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation>Olho direito 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>Sorriso</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation>Parte superior do corpo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation>Tipo de marcador</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation>Retângulo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation>Elipse</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation>Imagem</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation>Pixelado</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation>Desfocar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation>Desfocar Exterior</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation>Estilo de marcador</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation>Sólido</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation>Ponto</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation>Marcador de cor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation>Largura do marcador</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation>Máscaras</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation>Anjo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>Urso</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation>Castor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>Gato</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation>Galinha</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>Vaca</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation>Diabo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation>Cão</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation>Dálmata</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation>Cão feliz</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>Dragão</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation>Elefante 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation>Elefante 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation>Alce</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation>Sapo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation>Fantasma</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation>Girafa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation>Antílope</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation>Cabra</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation>Hipopótamo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>Cavalo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation>Cavalo cinza</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation>Coala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>Macaco</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation>Rato cinza</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation>Rato branco</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation>Panda</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation>Pinguim</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation>Abóbora 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation>Abóbora 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation>Guaxinim</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation>Rinoceronte</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation>Ovelha</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation>Caveira 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation>Caveira 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation>Zebra</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation>Marcador de imagem</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation>Substituir face com esta imagem</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
-        <translation>Raio de desfoque</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
+        <translation>Raio de desfoque</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation>Selecionar marcador de cor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation>Dissolver</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation>Zoom</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Diferencial alfa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Variação alfa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation>Padrão</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation>Grupo 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation>Grupo 4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation>Grupo 8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation>Linhas 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation>Mágica 2x2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation>Mágica 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation>Ordenado 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation>Ordenado 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation>Ordenado 8x8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation>Tamanho padrão</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation>Declive</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation>Intercepto</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation>Espiral 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation>Espiral 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation>Parábola</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation>Velocidade de incremento</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation>Quantidade</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation>Selecionar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation>Cor do cursor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation>Escolha a cor do cursor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation>Velocidade mín</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation>Velocidade máx</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation>Mostrar cursor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation>Faixa de vídeo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation>Faixa de áudio</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation>Faixa de legendas</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation>Simples</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation>Brilho</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>Contraste</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation>Cor suave</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Diferencial alfa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation>Cor de radiação</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation>Detector de movimento</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation>Chuva</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation>Mostrar linhas</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation>Ocultar linhas</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation>Ocultar cor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation>Escolha a cor a esconder</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
-        <translation>Sincronização Vertical</translation>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation>Ruído</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation>Máscara</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation>Graus</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>Temperatura</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>Formato de vídeo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>Resolução</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation>FPS</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>Resetar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation>Proporção</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation>Escala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation>Suavidade</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation>Ondulações</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
-        <translation>Fase</translation>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation>Usar flash</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation>Agora</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation>%1 segundos</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation>Tirar uma foto</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation>Gravar vídeo</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation>Proporção de tela</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
         <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
         <source>e.g. 16:9, 4:3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
         <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
         <source>Debug mode</source>
         <translation>Modo de depuração</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
         <source>Flip horizontally</source>
         <translation>Girar horizontalmente</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
         <source>Flip vertically</source>
         <translation>Girar verticalmente</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
         <source>Width</source>
         <translation type="unfinished">Largura</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
         <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
         <source>Height</source>
         <translation type="unfinished">Altura</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
         <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
+        <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
-        <translation>Rápido</translation>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
+        <source>Add color</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
-        <translation>Linear</translation>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
+        <source>Clear all colors</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
-        <translation>Modo da proporção de tela</translation>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
+        <source>Select the color to add</source>
+        <extracomment>Select the color to add to the color table</extracomment>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation>Ignorar</translation>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="106"/>
+        <source></source>
+        <translation></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
-        <translation>Manter</translation>
+        <location filename="../../../libAvKys/Plugins/Gamma/share/qml/main.qml" line="40"/>
+        <source>Gamma</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
+        <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
-        <source>Levels</source>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
+        <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
-        <source>Add color</source>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
+        <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
-        <source>Clear all colors</source>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
-        <source>Select the color to add</source>
-        <extracomment>Select the color to add to the color table</extracomment>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="106"/>
-        <source></source>
-        <translation></translation>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Gamma/share/qml/main.qml" line="40"/>
-        <source>Gamma</source>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
-        <source>Hue</source>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished">Selecione a nova cor</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
-        <source>Saturation</source>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
-        <source>Luminance</source>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/ru.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/ru.ts
@@ -12,27 +12,42 @@
         <location filename="../qml/About.qml" line="66"/>
         <source>Built from</source>
         <extracomment>Built from &quot;short commit hash&quot;</extracomment>
-        <translation type="unfinished"></translation>
+        <translation>Собрана из</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
-        <source>Using Qt %1</source>
-        <translation>Используется Qt</translation>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation>Собрана из %1</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation>Открыть коммит в браузере</translation>
     </message>
     <message>
         <location filename="../qml/About.qml" line="80"/>
+        <source>Using Qt %1</source>
+        <translation>С использованием Qt %1</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Сайт</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation>Перейти на сайт %1</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>Приложение для захвата веб-камеры.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
-        <translation>Простое приложение веб-камеры для захвата изображения и видео.</translation>
+        <translation>Простое приложение для захвата изображения и видео с веб-камеры.</translation>
     </message>
 </context>
 <context>
@@ -40,67 +55,67 @@
     <message>
         <location filename="../qml/AboutDialog.qml" line="32"/>
         <source>About %1</source>
-        <translation type="unfinished"></translation>
+        <translation>О %1</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
-        <translation type="unfinished">О программе</translation>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
+        <translation>О программе</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
-        <translation type="unfinished">Авторы</translation>
+        <translation>Авторы</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
-        <translation type="unfinished">Лицензия</translation>
+        <translation>Лицензия</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
-        <translation type="unfinished">Лицензии третьих лиц</translation>
+        <translation>Лицензии сторонних компонентов</translation>
     </message>
 </context>
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation>Добавить формат видео</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation>Изменить формат видео</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation>Удалить формат</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>Формат</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation>Ширина</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation>Высота</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation>Частота кадров</translation>
     </message>
@@ -113,14 +128,14 @@
         <translation>Параметры аудиокодека</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>Битрейт</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
-        <translation>Битрат (бит/сек)</translation>
+        <translation>Битрейт (бит/сек)</translation>
     </message>
 </context>
 <context>
@@ -131,33 +146,41 @@
         <translation>Параметры аудиоустройства</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation>Образец формата</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation>Каналы</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation>Частота дискретизации</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation>Задержка (мс)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation>Настроить ввод</translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation>Тишина</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation>Настроть выход</translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -203,7 +234,7 @@
     <message>
         <location filename="../qml/Commons.qml" line="28"/>
         <source>The virtual camera is in use by the following applications:</source>
-        <translation>Виртуальная камера используется в следующих приложениях:</translation>
+        <translation>Виртуальная камера используется приложениями:</translation>
     </message>
     <message>
         <location filename="../qml/Commons.qml" line="40"/>
@@ -227,27 +258,27 @@
         <translation>Скачивание %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Из: %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>В: %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation>Размер: %1 %2Б / %3 %4Б</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation>Скорость: %1 %2Б/с</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation>Оставшееся время: %1</translation>
     </message>
@@ -265,10 +296,10 @@
     <message>
         <location filename="../qml/DownloadSucceededDialog.qml" line="31"/>
         <source>Download ready</source>
-        <translation type="unfinished"></translation>
+        <translation>Успешно загружено</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation>Установить виртуальную камеру?</translation>
     </message>
@@ -276,92 +307,105 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>Захват видео</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>Захват рабочего стола</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>Захват/воспроизведение аудио</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>Конвертер видео</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>Драйвер виртуальной камеры</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>Воспроизведение видео</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation>Воспроизведение источников при запуске</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>Фреймворки и библиотеки</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation>Захват экрана</translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation>Захват/воспроизведение аудио</translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
-        <translation>Видеозапись</translation>
+        <translation>Запись видео</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
-        <translation>Корневой метод</translation>
+        <translation>Повышение привилегий</translation>
     </message>
 </context>
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation>Каталог изображений</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
-        <translation>Поиск</translation>
+        <translation>Обзор</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>Формат файла</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation>Качество</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation>Выберите папку для сохранения ваших фотографий</translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation>Закрыть панель %1</translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
-        <translation type="unfinished"></translation>
+        <translation>Экран PipeWire</translation>
     </message>
 </context>
 <context>
@@ -377,85 +421,98 @@
         <translation>Плагины</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
-        <translation>Поиск плагинов в подпапках</translation>
+        <translation>Искать плагины в подкаталогах</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation>Добавить путь</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation>Удалить</translation>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
+        <source>Update</source>
+        <translation>Обновить</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
-        <source>Update</source>
-        <translation>Обновление</translation>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation>Обновить список плагинов</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>Добавить путь поиска плагинов</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation>Удалить</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation>Приложение для захвата веб-камеры.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
-        <translation>Загрузить настройки из PATH. Если PATH пуст, загрузите конфиги из каталога приложения.</translation>
+        <translation type="unfinished">Загрузить настройки из PATH. Если PATH пуст, загрузить конфиги из каталога приложения.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
-        <translation>ПУТЬ</translation>
+        <translation>PATH</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
-        <translation>ПУТЬ1;ПУТЬ2;ПУТЬ3;...</translation>
+        <translation>PATH1;PATH2;PATH3;...</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
-        <translation type="unfinished"></translation>
+        <translation>Сохранить отладочный вывод в файл</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
-        <translation>ФАЙЛ</translation>
+        <translation>FILE</translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation>Открыть новый экземпляр %1.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
-        <translation>Рекурсивный поиск по указанным путям подключаемых плагинов.</translation>
+        <translation>Рекурсивный поиск плагинов по указанным путям.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
-        <translation>Список путей для поиска плагинов разделен точкой с запятой.</translation>
+        <translation>Список путей для поиска плагинов, разделённых точкой с запятой.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
-        <translation>Список путей, чтобы избежать нагрузки разделен точкой с запятой.</translation>
+        <translation>Список игнорируемых при поиске путей, разделённых точкой с запятой.</translation>
     </message>
 </context>
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation>%1/Видео %2.%3</translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation>Захват изображения</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation>Запись видео</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation>Общие настройки</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation>Плагины</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation>Обновления</translation>
     </message>
@@ -516,12 +573,12 @@
     <message>
         <location filename="../qml/SettingsMenu.qml" line="58"/>
         <source>Donate</source>
-        <translation type="unfinished"></translation>
+        <translation>Пожертвовать</translation>
     </message>
     <message>
         <location filename="../qml/SettingsMenu.qml" line="64"/>
         <source>About</source>
-        <translation type="unfinished">О программе</translation>
+        <translation>О программе</translation>
     </message>
     <message>
         <location filename="../qml/SettingsMenu.qml" line="71"/>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
-        <translation type="unfinished">Выберите новый цвет</translation>
+        <translation>Выберите новый цвет</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation>Цвет %1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation>Убрать цвет %1</translation>
     </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation>Уведомлять о новых версиях</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
-        <translation>Показать диалоговое окно обновления</translation>
+        <translation>Показать диалог обновления</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
-        <translation>Проверка новых версий</translation>
+        <translation>Проверять новые версии</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>Ежедневно</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>Каждые два дня</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>Еженедельно</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>Каждые две недели</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>Ежемесячно</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>Никогда</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
-        <translation>Последнее обновление</translation>
+        <translation>Последняя проверка</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>Ваша версия %1 устарела. Последняя версия &lt;b&gt;%2&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation>Обновить сейчас!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>Спасибо за использование &lt;b&gt;версии для разработчиков&lt;/b&gt;!&lt;br /&gt;Будет очень полезно, если вы сообщите о любых ошибках и предложениях, которые у вас есть.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>Сообщить об ошибке</translation>
     </message>
@@ -618,14 +685,14 @@
         <translation>Доступна новая версия!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation>Скачать %1 %2 СЕЙЧАС!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
-        <translation>Показать это диалоговое окно в следующий раз</translation>
+        <translation>Показать это окно в следующий раз</translation>
     </message>
 </context>
 <context>
@@ -644,7 +711,7 @@
         <translation>Установка прошла успешно</translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation>Перезапустить Webcamoid?</translation>
     </message>
@@ -654,12 +721,12 @@
     <message>
         <location filename="../qml/VCamManualDownloadDialog.qml" line="31"/>
         <source>Can&apos;t get latest version</source>
-        <translation type="unfinished"></translation>
+        <translation>Не удалось скачать последнюю версию</translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
-        <translation type="unfinished"></translation>
+        <translation>Скачать виртуальную камеру вручную?</translation>
     </message>
 </context>
 <context>
@@ -670,18 +737,18 @@
         <translation>Параметры видеокодека</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation>Битрейт</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
-        <translation>Битрат (бит/сек)</translation>
+        <translation>Битрейт (бит/сек)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation>Ключевые кадры</translation>
     </message>
@@ -693,35 +760,45 @@
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation>Удалить %1 видеоэффект</translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
     <message>
         <location filename="../qml/VideoEffectsDialog.qml" line="36"/>
         <source>Add video effect</source>
-        <translation>Добавить видео эффект</translation>
+        <translation>Добавить видеоэффект</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation>Поиск эффекта</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation>Искать видеоэффект</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
-        <translation>Цепной эффект</translation>
+        <translation>Добавить в список</translation>
     </message>
 </context>
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation>Добавить эффект</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation>Удалить все эффекты</translation>
     </message>
@@ -736,7 +813,7 @@
     <message>
         <location filename="../qml/VideoEffectsPanel.qml" line="28"/>
         <source>%1 options</source>
-        <translation>%1 опции</translation>
+        <translation>%1 настройки</translation>
     </message>
 </context>
 <context>
@@ -747,7 +824,7 @@
         <translation>Параметры формата видео</translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation>Расширение файла</translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation>Изменить источник</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation>Добавить источник</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation>Файл</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation>URL</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation>Описание</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation>Название источника</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation>Путь</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation>Путь к файлу</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
-        <translation>Поиск</translation>
+        <translation>Обзор</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation>Выбрать файл для использования в качестве источника</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation>Выберите файл для добавления в качестве источника</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation>Редактировать</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation>Удалить</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation>Добавить источник</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation>Настроить источник</translation>
+    </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation>Все Видеофайлы</translation>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation>Веб-камеры не найдены</translation>
     </message>
+</context>
+<context>
+    <name>VideoLayer</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
-        <translation>Видео 3GP</translation>
+        <translation>3GP видео</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
-        <translation>Видео AVI</translation>
+        <translation>AVI видео</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation>Точечный рисунок Windows</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation>Курсор Microsoft Windows</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
-        <translation>Flash Video</translation>
+        <translation>Flash видео</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation>Анимированный GIF</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation>Graphic Interchange Format</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation>Иконка Apple</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation>Иконка Microsoft Windows</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation>Joint Photographic Experts Group</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
-        <translation>Видео MKV</translation>
+        <translation>MKV видео</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation>Анимированный PNG</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation>Multiple-image Network Graphics</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
-        <translation>Видео QuickTime</translation>
+        <translation>QuickTime видео</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
-        <translation>Видео MP4</translation>
+        <translation>MP4 видео</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
-        <translation>Видео MPEG</translation>
+        <translation>MPEG видео</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
-        <translation>Видео Ogg</translation>
+        <translation>Ogg видео</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation>Portable Bitmap</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation>Portable Graymap</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation>Portable Network Graphics</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation>Portable Pixmap</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
-        <translation>Видео RealMedia</translation>
+        <translation>RealMedia видео</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation>Scalable Vector Graphics</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation>Truevision TGA</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation>Tagged Image File Format</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
-        <translation>Видео DVD</translation>
+        <translation>DVD видео</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation>Wireless Bitmap</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
-        <translation>Видео WebM</translation>
+        <translation>WebM видео</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
-        <translation>Видео Windows Media</translation>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
+        <translation>WebP</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation>Все файлы</translation>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <translation>Windows Media видео</translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation>Редактировать</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation>Точечный рисунок X11</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation>Удалить</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation>X11 Pixmap</translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
-        <translation>Добавить источник</translation>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
+        <translation>Все картинки и видео</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation>Веб-камеры не найдены</translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation>Все файлы</translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
-        <translation>Нет выхода</translation>
+        <translation>Выхода нет</translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation>Виртуальная камера</translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation>Изменить виртуальную камеру</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation>Добавить виртуальную камеру</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation>Название виртуальной камеры</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation>Добавить формат</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation>Очистить форматы</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation>Не удается изменить виртуальную камеру</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation>Не удается добавить виртуальную камеру</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation>Ошибка изменения виртуальной камеры</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation>Ошибка добавления виртуальной камеры</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation>Ошибка создания виртуальной камеры</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation>Описание камеры и формат не может быть пустым.</translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation>Выходное изображение виртуальной камеры</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation>Выходное изображение виртуальной камеры по умолчанию</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
-        <translation>Поиск</translation>
+        <translation>Обзор</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
-        <translation type="unfinished"></translation>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
+        <translation>Выбрать изображение для записи по умолчанию</translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation>Не удалось выбрать картинку по умолчанию</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation>Ошибка удаления виртуальных камер</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation>Пожалуйста, выберите файл изображения</translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
-        <translation type="unfinished"></translation>
+        <translation>Виртуальная камера %1 устарела, установить последнюю версию %1?</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation>Установить</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation>Установить виртуальную камеру</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation>Настроить вывод</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
-        <translation type="unfinished"></translation>
+        <translation>Добавить вывод</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation>Ошибка создания виртуальной камеры</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
-        <translation type="unfinished"></translation>
+        <translation>Удалить все выводы</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation>Ошибка удаления виртуальных камер</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation>Ошибка удаления виртуальных камер</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
-        <translation type="unfinished"></translation>
+        <translation>Выбрать картинку для вывода</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
-        <translation type="unfinished"></translation>
+        <translation>Виртуальная камера не установлены, хотите её установить?</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation>Виртуальная камера не поддерживается на этой платформе</translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation>Каталог видео</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
-        <translation>Поиск</translation>
+        <translation>Обзор</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation>Выбрать каталог для сохранения видео</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation>Запись звука</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation>Формат файла</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
-        <translation>Конфигурирация</translation>
+        <translation>Настройка</translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation>Настроить формат файла</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
-        <translation>Видео кодек</translation>
+        <translation>Видеокодек</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation>Настроить видеокодек</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
-        <translation>Аудио кодек</translation>
+        <translation>Аудиокодек</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation>Настроить аудиокодек</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation>Выберите папку для сохранения видео</translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation>Количество царапин</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation>Добавить пыль</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation>Радиус</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
-        <translation>N° цвета</translation>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
+        <translation>Количество цветов</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation>Разница в цвете</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation>Показывать края</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation>Цвет линии</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation>Блок сканирования</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
-        <translation>Выберите цвет</translation>
+        <translation>Выбрать цвет</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation>Матрица перехода</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation>Столбец 0, строка 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation>Столбец 1, строка 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation>Столбец 2, строка 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation>Столбец 3, строка 0</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation>Столбец 0, строка 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation>Столбец 1, строка 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation>Столбец 2, строка 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation>Столбец 3, строка 1</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation>Столбец 0, строка 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation>Столбец 1, строка 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation>Столбец 2, строка 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation>Столбец 3, строка 2</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>Режим</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
-        <translation>Натуральный</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
-        <translation>Фиксированный</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>Символы</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>Шрифт</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
-        <translation>Поиск</translation>
+        <translation>Выбрать</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation>Выбрать шрифт</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation>Хинтинг</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>По умолчанию</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation>Без хинтинга</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation>Вертикальный хинтинг</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation>Полный хинтинг</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>Стиль</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation>Битовая карта</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>Устройство</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation>Контур</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation>Усилить контур</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation>Сопоставить</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>Качество</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>Сглаживание</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation>Без сглаживания</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
-        <translation>Совместимость с OpenGL</translation>
+        <translation type="unfinished">Совместимость с OpenGL</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation>Использовать целочисленные метрики</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
-        <translation>Нет субпиксельного сглаживания</translation>
+        <translation type="unfinished">Нет субпиксельного сглаживания</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
-        <translation>Нет слияния шрифтов</translation>
+        <translation type="unfinished">Нет слияния шрифтов</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation>Цвет переднего плана</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>Цвет фона</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
-        <translation>Реверсивный</translation>
+        <translation type="unfinished">Реверсивный</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation>Пожалуйста, выберите шрифт</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation>Выберите цвет переднего плана</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation>Выберите цвет фона</translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>Размер</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>Цвет</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation>Выберите цвет полос</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation>Мягкий</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation>Выберите цвет для фильтра</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation>Предыдущий цвет</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation>Новый цвет</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation>Выберите цвет для замены</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation>Выберите новый цвет</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation>Палитра цветов</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation>Базовый</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation>Металлик</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation>Теплый</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation>Предыдущая фотография</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>Красный и зеленый</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation>Сепия</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation>X-Pro</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
-        <translation>X-Ray</translation>
+        <translation type="unfinished">X-Ray</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>Желтый и синий</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation>Собственная комбинация</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation>Исходная палитра</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation>Выбрать файл для палитры</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation>Выбрать файл для палитры</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation>Пожалуйста, выберите файл изображения</translation>
     </message>
@@ -1551,110 +1844,105 @@
         <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="48"/>
         <source>Convolve matrix</source>
         <extracomment>https://en.wikipedia.org/wiki/Kernel_(image_processing)</extracomment>
-        <translation>Свернутая матрица</translation>
+        <translation>Матрица свертки</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
-        <translation>Фактор</translation>
+        <translation>Коэффициент</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
-        <translation>Смещение</translation>
+        <translation type="unfinished">Смещение</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation>Режим захвата</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation>Случайный квадрат</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation>Вертикальное увеличение</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation>Горизонтальное увеличение</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
-        <translation>Кольца увеличиваются</translation>
+        <translation>Радиальное увеличение</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation>Размер блока</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
-        <translation>N° кадра</translation>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
+        <translation>Количество кадров</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation>Мю</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation>Сигма</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation>Частота кадров</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation>Амплитуда</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>Частота</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation>Размер сетки</translation>
     </message>
@@ -1664,1167 +1952,1532 @@
         <translation>Скорость</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
-        <translation>Кратность зума</translation>
+        <translation>Увеличение</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation>Сила</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation>Алгоритм Кэнни</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
-        <translation>Порог Canny</translation>
+        <translation>Порог Кэнни</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation>Выравнивание</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation>Инвертировать</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation>Признаки Хаара</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>Глаз</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation>Очки</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation>Другое лицо 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation>Другое лицо 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation>Другое лицо 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation>Обычное лицо</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation>Всё тело</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation>Левый Глаз 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation>Нижняя часть тела</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation>Большая пара глаз</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation>Маленькая пара глаз</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation>Левое ухо</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation>Левый глаз 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation>Рот</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>Нос</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation>Правое ухо</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation>Правый глаз 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation>Верхняя часть тела 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation>Профиль лица</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation>Правый глаз 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>Улыбка</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation>Верхняя часть тела</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation>Тип маркера</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation>Прямоугольник</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation>Эллипс</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation>Изображение</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation>Пикселизация</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation>Размытие</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
-        <translation>Размытие внешнего</translation>
+        <translation>Размытие фона</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation>Фоновое изображение</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation>Стиль маркера</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
-        <translation>Твердый</translation>
+        <translation>Линия</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
-        <translation>Тире</translation>
+        <translation>Пунктир</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
-        <translation>Точка</translation>
+        <translation>Точки</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation>Тире точка</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation>Тире точка точка</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation>Цвет маркера</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation>Ширина маркера</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation>Маски</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation>Ангел</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>Медведь</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation>Бобр</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>Кот</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation>Курица</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>Корова</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation>Дьявол</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation>Собака</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation>Далматинская собака</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation>Счастливая собака</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>Дракон</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation>Слон 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation>Слон 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation>Лось</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation>Лягушка</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation>Привидение</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation>Жираф</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
-        <translation>Антилопа</translation>
+        <translation>Антилопа гну</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation>Коза</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation>Гиппопотам</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>Лошадь</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation>Серая лошадь</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation>Коала</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>Обезьяна</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation>Серая мышь</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation>Белая мышь</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation>Панда</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation>Пингвин</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation>Тыква 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation>Тыква 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation>Енот</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation>Носорог</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation>Овца</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation>Череп 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation>Череп 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation>Трицератопс</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation>Зебра</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation>Изображения маркера</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
-        <translation>Заменять лицо этой картинкой</translation>
+        <translation>Заменить лицо этой картинкой</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
+        <translation>Выбрать картинку, которой будет заменено лицо</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
+        <translation>Фон</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
+        <translation>Горизонтальное смещение</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
+        <translation>Вертикальное смещение</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
+        <translation>Горизонтальный радиус, %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
-        <translation>Фоны</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
+        <translation>Вертикальный радиус, %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
         <source>Black Square</source>
         <translation>Черный квадрат</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
         <source>Background picture</source>
         <translation>Фоновое изображение</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
         <source>Replace background with this picture</source>
-        <translation>Заменять фон этой картинкой</translation>
+        <translation>Заменить фон этой картинкой</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
+        <translation>Выбрать картинку для фона</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
         <source>Pixel grid size</source>
         <translation>Размер пиксельной сетки</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
         <source>Blur radius</source>
         <translation>Радиус размытия</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
         <source>Face Area Settings</source>
         <translation>Настройка области лица</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
-        <translation>Расширенные настройки области лица для 
-размытия фона или изображения ниже.</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
         <source>Width Adjust %</source>
-        <translation>Регулировка ширины %</translation>
+        <translation>Изменение ширины, %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
         <source>Height Adjust %</source>
-        <translation>Регулировка высоты %</translation>
+        <translation>Регулировка высоты, %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
         <source>Round Area</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Область скругления</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation>Выберите цвет маркера</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
-        <translation>Тяжелый</translation>
+        <translation>Сильное</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
-        <translation>Охлаждение</translation>
+        <translation>Температура</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation>Растворение</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
-        <translation>Зум</translation>
+        <translation type="unfinished">Зум</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation>Порог</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>Порог яркости</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Альфа-разница</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
-        <translation>Альфа-вариация</translation>
+        <translation type="unfinished">Альфа-вариация</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
-        <translation>Шаг</translation>
+        <translation type="unfinished">Шаг</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation>Шаблон</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation>90° Полутон 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation>Кластер 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation>Кластер 4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation>Кластер 8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation>Линии 4х4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation>Магия 2х2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation>Магия 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
-        <translation>Упорядоченно 4x4</translation>
+        <translation type="unfinished">Упорядоченно 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
-        <translation>Упорядоченно 6x6</translation>
+        <translation type="unfinished">Упорядоченно 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
-        <translation>Упорядоченно 8x8</translation>
+        <translation type="unfinished">Упорядоченно 8x8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation>Растровый узор</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation>Изображение для шаблона</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation>Выбрать изображение для шаблона</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation>Размер узора</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
-        <translation>Освещенность</translation>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
-        <translation>Склон</translation>
+        <translation>Наклон</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
-        <translation>Перехват</translation>
+        <translation type="unfinished">Перехват</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation>Спираль 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation>Спираль 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation>Парабола</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation>Горизонтальная полоса</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
-        <translation>Прирост скорости</translation>
+        <translation type="unfinished">Прирост скорости</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation>Количество</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>Порог света</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation>Выберите цвет автомата</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
-        <translation>Количество капель</translation>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
+        <translation>Число струй</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation>Выбрать</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation>Выбрать шрифт</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation>Цвет курсора</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
-        <translation>Выберите цвет курсора</translation>
+        <translation>Выбрать цвет курсора</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation>Минимальная длина струи</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
-        <translation>Минимальная длина капли</translation>
+        <translation>Мин. длина капли</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation>Максимальная длина струи</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
-        <translation>Максимальная длина капли</translation>
+        <translation>Макс. длина капли</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
-        <source>Min. speed</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
         <translation>Минимальная скорость</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
-        <source>Max. speed</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
+        <source>Min. speed</source>
+        <translation>Мин. скорость</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
         <translation>Максимальная скорость</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
+        <source>Max. speed</source>
+        <translation>Макс. скорость</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation>Показать курсор</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation>Видеодорожка</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation>Звуковая дорожка</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation>Дорожка субтитров</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation>Простой</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation>Яркость</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>Контрастность</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation>Мягкая нормализация</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation>Сильная нормализация</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation>Мягкий цвет</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation>Жесткий цвет</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Альфа-дифференциал</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation>Цвет излучения</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation>Обнаружение движения</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation>Дождь</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation>Распад</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation>Показать линии</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation>Скрыть линии</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation>Скрыть цвет</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
-        <translation>Выберите скрытый цвет</translation>
+        <translation>Выберите цвет для скрытия</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
-        <translation>Вертикальная синхронизация</translation>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation>Шум</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation>Маска</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
-        <translation>Степени</translation>
+        <translation type="unfinished">Степени</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>Температура</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>Формат видео</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>Разрешение</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation>FPS</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>Сброс</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation>Сброс на настройки по умолчанию</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation>Пропорция</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation>Масштаб</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation>Мягкость</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation>Выберите цвет виньетки</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation>Рябь</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
-        <translation>Фаза</translation>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation>Использовать вспышку</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation>Сейчас</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation>%1 секунд</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation>Сделать фото</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation>%1/Изображение %2.%3</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation>Ежедневная сборка</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation>Видеоэффекты</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation>Использовать вспышку при фото</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation>Таймер фото</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation>Задержка перед съёмкой фото</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation>Настройки входов и выходов</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation>Открыть меню входов и выходов</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation>Открыть последнее фото</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation>Открыть последнее снятое фото</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation>Режим захвата картинки</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation>Захватить картинку и сохранить её в файл</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation>Запись видео</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation>Остановить запись видео</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation>Режим захвата видео</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation>Начать запись видео в файл</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation>Остановить запись текущего видео</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation>Открыть последнее видео</translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation>Открыть последнее записанное видео</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation>Соотношение сторон</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation>Выделение лица
 продолжительность (секунды)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation>Количество выделений лица</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
-        <translation>Скорость уменьшения зума</translation>
+        <translation type="unfinished">Скорость уменьшения зума</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
-        <translation>Скорость увеличения зума</translation>
+        <translation type="unfinished">Скорость увеличения зума</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation>Отступ лица (% от размера лица)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
+        <translation>Отступ сверху</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
+        <translation>Отступ слева</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
+        <translation>Отступ справа</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
+        <translation>Отступ снизу</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
         <source>Face margin (% of face size)</source>
         <translation>Граница лица (% от размера лица)</translation>
     </message>
     <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
+        <translation>Граница сверху</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation>Граница слева</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
+        <translation>Граница справа</translation>
+    </message>
+    <message>
         <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation>Граница снизу</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
         <source>e.g. 16:9, 4:3</source>
-        <translation>например 16:9, 4:3</translation>
+        <translation>например, 16:9, 4:3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
         <source>Lock viewport</source>
         <translation>Заблокировать область просмотра</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
         <source>Debug mode</source>
         <translation>Режим отладки</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
         <source>Flip horizontally</source>
         <translation>Отразить по горизонтали</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
         <source>Flip vertically</source>
         <translation>Отразить по вертикали</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
         <source>Width</source>
         <translation>Ширина</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
         <source>Aspect ratio width</source>
-        <translation type="unfinished"></translation>
+        <translation>Соотношение по ширине</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
         <source>Height</source>
         <translation>Высота</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
         <source>Aspect ratio height</source>
+        <translation>Соотношение по высоте</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
+        <source>Levels</source>
+        <translation>Уровни</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
+        <source>Add color</source>
+        <translation>Добавить цвет</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
+        <source>Clear all colors</source>
+        <translation>Очистить все цвета</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
+        <source>Select the color to add</source>
+        <extracomment>Select the color to add to the color table</extracomment>
+        <translation>Выберите цвет для добавления</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="106"/>
+        <source></source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Gamma/share/qml/main.qml" line="40"/>
+        <source>Gamma</source>
+        <translation>Гамма</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
+        <source>Hue</source>
+        <translation>Оттенок</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
+        <source>Saturation</source>
+        <translation>Насыщенность</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
+        <source>Luminance</source>
+        <translation>Яркость</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation>Принудительная частота кадров</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
-        <translation>Режим масштабирования</translation>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
-        <translation>Быстрый</translation>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
-        <translation>Линейный</translation>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished">Выберите новый цвет</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
-        <translation>Режим соотношения сторон</translation>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation>Игнорировать</translation>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
-        <translation>Оставить</translation>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
-        <translation>Расширение</translation>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
-        <source>Levels</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
-        <source>Add color</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
-        <source>Clear all colors</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
-        <source>Select the color to add</source>
-        <extracomment>Select the color to add to the color table</extracomment>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="106"/>
-        <source></source>
-        <translation></translation>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Gamma/share/qml/main.qml" line="40"/>
-        <source>Gamma</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
-        <source>Hue</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
-        <source>Saturation</source>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
-        <source>Luminance</source>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/si.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/si.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
-        <source>Using Qt %1</source>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/About.qml" line="80"/>
+        <source>Using Qt %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished"></translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
@@ -113,12 +128,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -131,33 +146,41 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation type="unfinished"></translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation type="unfinished"></translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
+        <source>Update</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
-        <source>Update</source>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation type="unfinished"></translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation type="unfinished"></translation>
     </message>
@@ -618,12 +685,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation type="unfinished"></translation>
     </message>
@@ -747,7 +824,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation type="unfinished"></translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1664,1138 +1952,1377 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
-        <source>Face margin (% of face size)</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
-        <source>e.g. 16:9, 4:3</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
-        <source>Lock viewport</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
-        <source>Debug mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
-        <source>Flip horizontally</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
+        <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
-        <source>Flip vertically</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
-        <source>Width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
-        <source>Aspect ratio width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
-        <source>Height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
-        <source>Aspect ratio height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
+        <source>e.g. 16:9, 4:3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
+        <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
+        <source>Debug mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
+        <source>Flip horizontally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
+        <source>Flip vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
+        <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
+        <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
+        <source>Height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
+        <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2811,19 +3338,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/sv.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/sv.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
-        <source>Using Qt %1</source>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/About.qml" line="80"/>
+        <source>Using Qt %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished"></translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
@@ -113,12 +128,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -131,33 +146,41 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation type="unfinished"></translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,54 +307,54 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation type="unfinished"></translation>
     </message>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,85 +421,98 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
+        <source>Update</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
-        <source>Update</source>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation type="unfinished"></translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation type="unfinished"></translation>
     </message>
@@ -618,12 +685,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation type="unfinished"></translation>
     </message>
@@ -747,7 +824,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation type="unfinished"></translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1171,71 +1384,68 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1243,194 +1453,284 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1441,121 +1741,112 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1566,107 +1857,102 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1676,1126 +1962,1367 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
-        <source>Scale</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
+        <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
         <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
-        <source>Aspect ratio</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
+        <source>Aspect ratio</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
         <source>e.g. 16:9, 4:3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
         <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
         <source>Debug mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
         <source>Flip horizontally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
         <source>Flip vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
-        <source>Decay</source>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
-        <source>Width</source>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
+        <source>Decay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
-        <source>Aspect ratio width</source>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
-        <source>Height</source>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
-        <source>Aspect ratio height</source>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
+        <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
+        <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
+        <source>Height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
+        <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2811,19 +3338,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/tr.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/tr.ts
@@ -15,22 +15,37 @@
         <translation>Derleme</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Qt %1 Kullanılıyor</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Web Sayfası</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation>%1 web sayfasına git</translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>Web kamerası yakalama uygulaması.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>Resim ve video yakalama için basit bir web kamerası uygulaması.</translation>
     </message>
@@ -43,25 +58,25 @@
         <translation>%1 Hakkında</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation>Hakkında</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation>Katkıda Bulunanlar</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation>Lisans</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation>3. Taraf Lisansları</translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation>Video Biçimi Ekle</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation>Video Biçimi Değiştir</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation>Biçimi kaldır</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>Biçim</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation>Genişlik</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation>Yükseklik</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation>Kare hızı</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>Ses Kodeği Seçenekleri</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>Bit hızı</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Bit hızı (bit/sn)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation>Ses Aygıtı Seçenekleri</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation>Örnekleme Biçimi</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation>Kanal</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation>Örnekleme Oranı</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation>Gecikme (ms)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished">Girişi yapılandır</translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation>Sessizlik</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished">Çıkışı yapılandır</translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation>İndiriliyor %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation>Şundan: %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation>Şuna: %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation>Boyut: %1 %2B / %3 %4B</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation>Hız: %1 %2B/s</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation>Kalan süre: %1</translation>
     </message>
@@ -268,7 +299,7 @@
         <translation>İndirme hazır</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation>Sanal kamera kurulsun mu?</translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>Video yakalama</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>Masaüstü yakalama</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>Ses yakalama/oynatma</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>Video dönüştürme</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>Sanal kamera sürücüsü</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>Video oynatma</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation>Tüm kaynak girdilerini başlangıçta yürüt</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>Yapılar ve kitaplıklar</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation>Ekran kaydı</translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation>Ses kaydı/oynatma</translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation>Video kaydı</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation>Yönetici yöntemi</translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation>Resimler dizini</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation>Ara</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>Dosya biçimi</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation>Kalite</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation>Fotoğraflarınızı kaydedeceğiniz klasörü seçin</translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation>PipeWire Ekranı</translation>
     </message>
@@ -377,76 +421,89 @@
         <translation>Eklentiler</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation>Eklentileri alt klasörlerde ara</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation>Yol ekle</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation>Kaldır</translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>Güncelle</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation>Eklenti listesini güncelle</translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>Eklenti arama yolu ekle</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished">Kaldır</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation>Web kamerası yakalama uygulaması.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation>Ayarları YOL&apos;dan yükle. Eğer YOL boş ise yapılandırmayı uygulama dizininden yükle.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation>YOL</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation>YOL1;YOL2:YOL3;...</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation>Hata ayıklama çıktısını bir dosyaya gönder</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation>DOSYA</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation>Belirlenen eklenti yollarında yineleyerek ara.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation>Eklentileri aramak için noktalı virgülle ayrılmış yol listesi.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation>Yüklemeden kaçınılacak noktalı virgülle ayrılmış yol listesi.</translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation>%1/Video %2.%3</translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation>Resim Yakalama</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation>Video Kaydı</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation>Genel Seçenekler</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation>Eklentiler</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation>Güncellemeler</translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation>Yeni rengi seç</translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished">%1 rengini sil</translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation>Yeni sürümler hakkında bilgilendir</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation>Güncellemeler ekranını göster</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation>Yeni sürümleri denetle</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>Günlük</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>İki günde bir</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>Haftalık</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>İki haftada bir</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>Aylık</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>Asla</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>Son güncelleme</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>%1 sürümünüz güncel değil. En son sürüm &lt;b&gt;%2&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation>Şimdi Yükselt!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>Bir &lt;b&gt;geliştirici sürümünü&lt;/b&gt; kullandığınız için teşekkürler!&lt;br /&gt;Eğer herhangi bir hatayı ve önerinizi bildirebilirseniz bu, çok yardımcı olacaktır.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>Hata Bildir</translation>
     </message>
@@ -618,12 +685,12 @@
         <translation>Yeni sürüm mevcut!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation>%1 %2 ŞİMDİ indir!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation>Bu iletiyi gelecek sefer göster</translation>
     </message>
@@ -644,7 +711,7 @@
         <translation>Kurulum başarılı</translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation>Webcamoid Yeniden Başlatılsın mı?</translation>
     </message>
@@ -657,7 +724,7 @@
         <translation>En son sürüm alınamıyor</translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation>Sanal kamera elle indirilsin mi?</translation>
     </message>
@@ -670,18 +737,18 @@
         <translation>Video Kodek Seçenekleri</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation>Bit hızı</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Bit hızı (bit/s)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation>Anahtar kare atlaması</translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation>Kaldır</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation>Video efekti ekle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation>Efekt ara</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation>Efekti üste uygula</translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation>Efekt ekle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation>Tüm efektleri kaldır</translation>
     </message>
@@ -747,7 +824,7 @@
         <translation>Video Biçim Seçenekleri</translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation>Dosya uzantısı</translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation>Kaynağı Düzenle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation>Kaynak Ekle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation>Dosya</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation>URL</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation>Tanım</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation>Kaynak başlığı</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation>Yol</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation>Dosya yolu</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation>Ara</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation>Kaynak olarak eklenecek dosyayı seç</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation>Tüm Video Dosyaları</translation>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation>Düzenle</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation>Kaldır</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation>Kaynak ekle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation>Web kamerası bulunamadı</translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
-        <translation>3GP Video</translation>
+        <translation type="unfinished">3GP Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
-        <translation>AVI Video</translation>
+        <translation type="unfinished">AVI Video</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
-        <translation>Flash Video</translation>
+        <translation type="unfinished">Flash Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
-        <translation>Hareketli GIF</translation>
+        <translation type="unfinished">Hareketli GIF</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
-        <translation>MKV Video</translation>
+        <translation type="unfinished">MKV Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
-        <translation>Hareketli PNG</translation>
+        <translation type="unfinished">Hareketli PNG</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
-        <translation>QuickTime Video</translation>
+        <translation type="unfinished">QuickTime Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
-        <translation>MP4 Video</translation>
+        <translation type="unfinished">MP4 Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
-        <translation>MPEG Video</translation>
+        <translation type="unfinished">MPEG Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
-        <translation>Ogg Video</translation>
+        <translation type="unfinished">Ogg Video</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
-        <translation>RealMedia Video</translation>
+        <translation type="unfinished">RealMedia Video</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
-        <translation>DVD Video</translation>
+        <translation type="unfinished">DVD Video</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
-        <translation>WebM Video</translation>
+        <translation type="unfinished">WebM Video</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="167"/>
         <source>Windows Media Video</source>
         <extracomment>Also known as WMV, is a video file format.</extracomment>
-        <translation>Windows Ortam Videosu</translation>
+        <translation type="unfinished">Windows Ortam Videosu</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation>Tüm Dosyalar</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation>Düzenle</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation>Kaldır</translation>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
-        <translation>Kaynak ekle</translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation type="unfinished">Tüm Dosyalar</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation>Web kamerası bulunamadı</translation>
-    </message>
-</context>
-<context>
-    <name>VideoLayer</name>
-    <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation>Çıktı Yok</translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation>Sanal Kamera</translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation>Sanal Kamerayı Düzenle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation>Sanal Kamera Ekle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation>Sanal kamera adı</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation>Biçim ekle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation>Biçimleri temizle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation>Sanal kamera düzenlenemiyor</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation>Sanal kamera eklenemiyor</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation>Sanal kamera düzenleme hatası</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation>Sanal kamera ekleme hatası</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation>Sanal kamera oluşturma hatası</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation>Kamera tanımı ve biçimler boş olamaz.</translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation>Sanal kamera çıktı resmi</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation>Sanal kamera varsayılan çıktı resmi</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation>Ara</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="95"/>
         <source>Can&apos;t set virtual camera picture</source>
         <translation>Sanal kamera resmi ayarlanamıyor</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation>Sanal Kameraları Kaldırma Hatası</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation>Lüften bir resim dosyası seçin</translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation>Sanal kamera güncel değil (%1), en son sürüm kurulsun mu (%2)?</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation>Kur</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished">Çıkışı yapılandır</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation>Çıktı ekle</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation>Sanal Kamera Oluşturma Hatası</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation>Tüm çıktıları kaldır</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation>Sanal kameraları kaldırma hatası</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation>Sanal Kameraları Kaldırma Hatası</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation>Çıktı resmini ayarla</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation>Sanal kamera kurulu değil, kurmak ister misiniz?</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation>Sanal kamera bu platformda desteklenmiyor</translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation>Videolar dizini</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation>Ara</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation>Ses kaydet</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation>Dosya biçimi</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation>Yapılandır</translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation>Video kodeki</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation>Ses kodeki</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation>Videolarınızı kaydedeceğiniz klasörü seçin</translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation>Çizik sayısı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation>Toz ekle</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation>Yarıçap</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
-        <translation>Renklere ait N°</translation>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation>Renk farkı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation>Kenarları göster</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation>Çizgi rengi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation>Blok tara</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>Bir renk seçin</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation>Dönüşüm matrisi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>Kip</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
-        <translation>Doğal</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
-        <translation>Sabit</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>Simgeler</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>Yazı Tipi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation>Ara</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation>Yazı Düzeltme</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>Varsayılan</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation>Yazı düzeltme yok</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation>Dikey yazı düzeltme</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation>Tam yazı düzeltme</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>Tarz</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation>Bitmap</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>Aygıt</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation>Dış Hat</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation>Dış hattı zorla</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation>Eşleştir</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>Kalite</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>Kenar Yumuşatma</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation>Kenar yumuşatma yok</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation>OpenGL ile uyumlu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation>Tam sayı ölçüye zorla</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation>Alt piksel düzeltme yok</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation>Yazı tipi birleştirme yok</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation>Ön plan rengi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>Arka plan rengi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation>Ters çevrilmiş</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation>Lütfen bir yazı tipi seçin</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation>Ön plan rengi seçin</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation>Arka plan rengi seçin</translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>Boyut</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>Renk</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation>Şerit rengini seç</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation>Yumuşak</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation>Süzgeç uygulanacak rengi seçin</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation>Eski renk</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation>Yeni renk</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation>Yer değiştirilecek rengi seç</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation>Yeni rengi seç</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation>Renk tablosu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation>Esas</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation>Metal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation>Isı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation>Eski Fotoğraf</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>Kırmızı &amp; Yeşil</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation>Sepya</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation>X-Pro</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation>X Işını</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>Sarı &amp; Mavi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation>Özel</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation>Kaynak paleti</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation>Lütfen bir resim dosyası seçin</translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation>Evriştirme matrisi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation>Etken</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation>Sapma</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation>Kapma kipi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation>Rastgele kare</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation>Dikey artış</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation>Yatay artış</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation>Halka artışı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation>Blok boyutu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
-        <translation>Karelere ait N°</translation>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation>Mu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation>Sigma</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation>Kare hızı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation>Genlik</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>Sıklık</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation>Izgara boyutu</translation>
     </message>
@@ -1664,1140 +1952,1378 @@
         <translation>Hız</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation>Yaklaştırma oranı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation>Şiddet</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation>Canny kenar algılama kipi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation>Canny kenar algılama eşiği</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation>Dengele</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation>Ters Çevir</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation>Deniz sisi dosyası</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>Göz</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation>Gözlük</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation>Cepheden yüz alternatifi 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation>Cepheden yüz alternatifi 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation>Cepheden yüz alternatifi 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation>Cepheden yüz varsayılanı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation>Tüm gövde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation>Sol Göz 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation>Alt gövde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation>Büyük göz çifti</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation>Küçük göz çifti</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation>Sol kulak</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation>Sol göz 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation>Ağız</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>Burun</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation>Sağ kulak</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation>Sağ Göz 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation>Üst gövde 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation>Yan yüz</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation>Sağ göz 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>Gülümseme</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation>Üst gövde</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation>İşaretçi türü</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation>Dikdörtgen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation>Elips</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation>Resim</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation>Mozaikle</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation>Buğu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation>Dış Buğu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation>Arka Plan Resmi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation>İşaretçi türü</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation>Katı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation>Tire</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation>Nokta</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation>Tire nokta</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation>Tire nokta nokta</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation>İşaretçi rengi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation>İşaretçi genişliği</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation>Maskeler</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation>Melek</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>Ayı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation>Kunduz</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>Kedi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation>Tavuk</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>İnek</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation>Şeytan</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation>Köpek</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation>Dalmaçya köpeği</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation>Mutlu köpek</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>Ejderha</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation>Fil 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation>Fil 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation>Geyik</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation>Kurbağa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation>Hayalet</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation>Zürafa</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation>Antilop</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation>Keçi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation>Su Aygırı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>At</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation>Gri at</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation>Koala</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>Maymun</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation>Gri fare</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation>Beyaz fare</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation>Panda</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation>Penguen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation>Balkabağı 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation>Balkabağı 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation>Rakun</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation>Gergedan</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation>Koyun</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation>Kafatası 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation>Kafatası 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation>Dinozor</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation>Zebra</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation>İşaretçi resmi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation>Yüzü bu resimle değiştir</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
-        <translation>Arka planlar</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
         <source>Black Square</source>
         <translation>Siyah Kare</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
         <source>Background picture</source>
         <translation>Arka plan resmi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
         <source>Replace background with this picture</source>
         <translation>Arka planı bu resimle değiştir</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
         <source>Pixel grid size</source>
         <translation>Piksel ızgara boyutu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
         <source>Blur radius</source>
         <translation>Buğu yarıçapı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
         <source>Face Area Settings</source>
         <translation>Yüz Alanı Ayarları</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
         <source>Advanced face area settings for 
 background blur or image below.</source>
-        <translation>Arka plan buğusu veya alttaki resim
-için gelişmiş yüz alanı ayarları.</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
-        <translation>Y-Sapma</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
-        <translation>D-Sapma</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
         <source>Width Adjust %</source>
         <translation>Genişlik Ayarı %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
         <source>Height Adjust %</source>
         <translation>Yükseklik Ayarı %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
         <source>Round Area</source>
         <translation>Yuvarlak Alan</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
-        <translation>Y-Yarıçap %</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
-        <translation>D-Yarıçap %</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation>İşaretçi rengi seçin</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation>Sert</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation>Soğutma</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation>Dağılma</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation>Yakınlaştırma</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation>Eşik</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>Parlaklık eşiği</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Alfa farkı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Alfa çeşidi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation>Atlama</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation>Desen</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation>90° Yarı ton 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation>Demet 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation>Demet 4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation>Demet 8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation>Çizgiler 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation>Sihir 2x2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation>Sihir 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation>Sıralı 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation>Sıralı 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation>Sıralı 8x8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation>Bitmap deseni</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation>Desen boyutu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
-        <translation>Aydınlık</translation>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation>Eğim</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation>Kesişim</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation>Sarmal 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation>Sarmal 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation>Parabol</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation>Yatay çubuk</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation>Hız artışı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation>Miktar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>Parlaklık Eşiği</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation>Otomat renk seç</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
-        <translation>Damlaya ait N°</translation>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation>Seç</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation>İmleç rengi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation>İmleç rengini seç</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation>Min. damla uzunluğu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation>Maks. damla uzunluğu</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation>Min. hız</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation>Maks. hız</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation>İmleci göster</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation>Video parçası</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation>Ses parçası</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation>Alt yazı parçası</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation>Basit</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation>Parlaklık</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>Karşıtlık</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation>Yumuşak normal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation>Sert normal</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation>Yumuşak renk</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation>Sert renk</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Alfa değer farkı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation>Yayınım rengi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation>Hareket tespiti</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation>Yağmur</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation>Sönüm</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation>Çizgileri göster</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation>Çizgileri gizle</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation>Rengi gizle</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation>Gizli rengi seçin</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
-        <translation>Dikey Eşleştirme</translation>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation>Gürültü</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation>Maske</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation>Derece</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>Sıcaklık</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>Video biçimi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>Çözünürlük</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation>FPS</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>Sıfırla</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation>En Boy</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation>Ölçek</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation>Yumuşaklık</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation>Süsleme rengini seç</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation>Dalgacıklar</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
-        <translation>Aşama</translation>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation>Flaş kullan</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation>Şimdi</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation>%1 saniye</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation>Fotoğraf çek</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation>%1/Resim %2.%3</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation>Günlük Yapım</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation>Video kaydet</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation>En boy oranı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation>Yüz basamaklama
 süresi (saniye)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation>Yüz basamak sayısı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation>Uzaklaştırma oranı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation>Yakınlaştırma oranı</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation>Yüz doldurma (yüz boyutunun %&apos;si)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
         <source>Face margin (% of face size)</source>
         <translation>Yüz kenar boşluğu (yüz boyutunun %&apos;si)</translation>
     </message>
     <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
         <source>e.g. 16:9, 4:3</source>
         <translation>örn. 16:9, 4:3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
         <source>Lock viewport</source>
         <translation>Görüntü alanını kilitle</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
         <source>Debug mode</source>
         <translation>Hata ayıklama kipi</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
         <source>Flip horizontally</source>
         <translation>Yatay çevir</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
         <source>Flip vertically</source>
         <translation>Dikey çevir</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
         <source>Width</source>
         <translation>Genişlik</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
         <source>Aspect ratio width</source>
         <translation>En boy oranı genişliği</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
         <source>Height</source>
         <translation>Yükseklik</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
         <source>Aspect ratio height</source>
         <translation>En boy oranı yüksekliği</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
-        <translation>Ölçekleme kipi</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
-        <translation>Hızlı</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
-        <translation>Doğrusal</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
-        <translation>En boy oranı kipi</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation>Yoksay</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
-        <translation>Tut</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
-        <translation>Genişliyor</translation>
-    </message>
-    <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation>Seviyeler</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation>Renk ekle</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation>Tüm renkleri temizle</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation>Eklenecek rengi seç</translation>
@@ -2813,19 +3339,146 @@ süresi (saniye)</translation>
         <translation>Gama</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation>Ton</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation>Doygunluk</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation>Parlaklık</translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished">Yeni rengi seç</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/uk.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/uk.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Використати Qt %1</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Сайт</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>Застосунок захоплення веб-камери.</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>Простий застосунок для захоплення світлин та відео з вебкамери.</translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished">Про нас</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished">Вкладники</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished">Ліцензія</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished">Ліцензії третьої сторони</translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation>Додати формат відео</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation>Змінити формат відео</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation>Видалити формат</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>Формат</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation>Ширина</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation>Висота</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation>Частота кадрів</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>Параметри авдіокодека</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>Бітрейт</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Бітрейт (біт/сек)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation>Параметри звукового пристрою</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation>Зразок формату</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation>Канали</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation>Частота дискретизації</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation>Затримка (мс)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation>Тиша</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>Захоплення відео</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>Захоплення робочого столу</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>Аудіо захоплення/відтворення</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>Конвертувати відео</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>Драйвер віртуальної камери</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>Відтворення відео</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation>Відтворити джерела на початку</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>Фреймворки та бібліотеки</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation>Відеозапис</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation>Кореневий метод</translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation>Тека зображень</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation>Пошук</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>Формат файлу</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation>Якість</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation>Виберіть теку, щоб зберегти свої світлини</translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation>Втулки</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation>Пошук втулків у підтеках</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation>Додати шлях</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation>Видалити</translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>Оновлення</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>Додати шлях пошуку втулків</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished">Видалити</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation>Застосунок захоплення веб-камери.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation>Завантажити параметри з PATH. Якщо PATH порожній, завантажте конфігурацію з каталогу додатку.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation>Шлях(PATH)</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation>шлях1;шлях2;шлях3;...</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation>Пошук в зазначених шляхах втулків рекурсивно.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation>Список шляхів для пошуку втулків розділено крапкою з комою.</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation>Розділений крапка з комою список шляхів, щоб уникнути навантаження.</translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation>%1/Відео %2.%3</translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation>Захоплення зображення</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation>Запис відео</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation>Загальні параметри</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation>Втулки</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation>Оновлення</translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished">Виберіть новий колір</translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation>Сповіщати про нові версії</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation>Показати діалогове вікно оновлення</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation>Перевірити нові версії</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>Щоденно</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>Кожні два дні</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>Щотижня</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>Кожних два тижні</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>Щомісяця</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>Ніколи</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>Останнє оновлення</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>Ваша версія %1 застаріла. Остання версія &lt;b&gt;%2&lt;/b&gt;.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation>Оновити вже!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>Дякуємо за користування &lt;b&gt;версії для розробки&lt;/b&gt;!&lt;br /&gt;Буде дуже корисно, якщо ви зможете повідомити про будь-які помилки та внести пропозиції.</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>Повідомити про помилку</translation>
     </message>
@@ -618,12 +685,12 @@
         <translation>Доступна нова версія!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation>Завантажити %1 %2 ЗАРАЗ!</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation>Показати це діалогове вікно наступного разу</translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation>Параметри відеокодека</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation>Бітрейт</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation>Бітрейт (біт/сек)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation>Ключові кадри</translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation>Видалити</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation>Додатм відеоефект</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation>Пошук ефекта</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation>Ланцюговий ефект</translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation>Додати ефект</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation>Видалити всі ефекти</translation>
     </message>
@@ -747,7 +824,7 @@
         <translation>Параметри формату відео</translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation>Розширення файлу</translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation>Правити джерело</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation>Додати джерело</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation>Файл</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation>URL-адреса</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation>Опис</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation>Назва джерела</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation>Шлях</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation>Шлях до файлу</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation>Пошук</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation>Виберіть файл, який потрібно додати як джерело</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation>Усі відеофайли</translation>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation>Правити</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation>Видалити</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation>Додати джерело</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation>Веб-камери не знайдено</translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
-        <translation>Відео 3GP</translation>
+        <translation type="unfinished">Відео 3GP</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
-        <translation>Відео AVI</translation>
+        <translation type="unfinished">Відео AVI</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
-        <translation>Флешвідео</translation>
+        <translation type="unfinished">Флешвідео</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
-        <translation>Анімована GIF</translation>
+        <translation type="unfinished">Анімована GIF</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
-        <translation>Відео MKV</translation>
+        <translation type="unfinished">Відео MKV</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
-        <translation>Анімований png</translation>
+        <translation type="unfinished">Анімований png</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
-        <translation>Відео QuickTime</translation>
+        <translation type="unfinished">Відео QuickTime</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
-        <translation>Відео MP4</translation>
+        <translation type="unfinished">Відео MP4</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
-        <translation>Відео MPEG</translation>
+        <translation type="unfinished">Відео MPEG</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
-        <translation>Відео Ogg</translation>
+        <translation type="unfinished">Відео Ogg</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
-        <translation>Відео RealMedia</translation>
+        <translation type="unfinished">Відео RealMedia</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
-        <translation>Відео DVD</translation>
+        <translation type="unfinished">Відео DVD</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
-        <translation>Відео WebM</translation>
+        <translation type="unfinished">Відео WebM</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
-        <translation>Відео Windows Media Video (.wmv)</translation>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation>Усі файли</translation>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <translation type="unfinished">Відео Windows Media Video (.wmv)</translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation>Правити</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation>Видалити</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
-        <translation>Додати джерело</translation>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation>Веб-камери не знайдено</translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation type="unfinished">Усі файли</translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation>Немає виходу</translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation>Правка віртуальної камери</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation>Додати віртуальну камеру</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation>Назва віртуальної камери</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation>Додати формат</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation>Очистити формати</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation>Опис і формати камери не можуть бути порожніми.</translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation>Вихідне зображення віртуальної камери</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation>Усталене вихідне зображення віртуальної камери</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation>Пошук</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation>Помилка видалення віртуальних камер</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation>Будь ласка, оберіть зображення</translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished">Помилка видалення віртуальних камер</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation>Тека для відео</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation>Пошук</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation>Звукозаписування</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation>Формат файлу</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation>Налаштувати</translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation>Відеокодек</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation>Авдіокодек</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation>Виберіть теку, щоб зберегти свої відео</translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation>Кількість подряпин</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation>Додати пилу</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation>Радіус</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
-        <translation>N° колоьрів</translation>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation>різниця кольорів</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation>Показати краї</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation>Лінії кольорів</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation>Блок сканування</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>Вибір кольору</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation>Матриця трансформації</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation>Режим</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
-        <translation>Натурально</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
-        <translation>Зафіксовано</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>Символи</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>Шрифт</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation>Пошук</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation>Хінтінг</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>По замовчуванню</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation>Без хінтингу</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation>Вертикальний хінтинг</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation>Повний хінтинг</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>Стиль</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation>Зображення(растрове)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>Пристрій</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation>Контур</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation>Підсилити контур</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation>Співставити</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>Якість</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>Згладжування</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation>Без згладжування</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation>Сумісно з OpenGL</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation>Підсилити цільові метрики</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation>Не згладжувати субпікселі</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation>Не об&apos;єднувати шрифти</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation>Колір переднього плану</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>Колір фону</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation>Назад</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation>Будь ласка оберіть шрифт</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation>Оберіть колір переднього плану</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation>Оберіть колір фону</translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>Розмір</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>Колір</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation>Виберіть смуги кольору</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation>Пом&apos;якшення</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation>Оберіть колір фільтру</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation>Попередній колір</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation>Новий колір</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation>Оберіть колір для заміни</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation>Виберіть новий колір</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation>Палітра кольорів</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation>Базовий</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation>Металік</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation>Тепло</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation>Стара світлина</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>Червонозелений</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation>Сепія</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation>Рентген про</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation>Просто рентген</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>Жовтоблакитний</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation>Власна комбінація</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation>Палітра джерела</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation>Будь ласка оберіть зображення</translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation>Згорнути матрицю</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation>Фактори</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation>Упередження</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation>Режим захоплення</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation>Випадковий квадрат</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation>Вертикальне збільшення</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation>Горизонтальне збільшення</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation>Кільцеве збільшення</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation>Розмір блоку</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
-        <translation>N° кадру</translation>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation>Му</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation>Сігма</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation>Частота кадрів</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation>Амплітуда</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>Частота</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation>Розмір сітки</translation>
     </message>
@@ -1664,1140 +1952,1378 @@
         <translation>Швидкість</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation>Розмір зуму</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation>Сила</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation>Режим Canny</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation>Поріг Кенні</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation>Вирівнювання</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation>Інвертувати</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation>Файл Хаара</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>Око</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation>Окуляри</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation>Зміна обличчя 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation>Зміна обличчя 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation>Зміна обличчя 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation>Звичайне обличчя</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation>Все тіло</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation>Ліве око 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation>Нижня частина тіла</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation>Обидва ока великі</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation>Обидва ока зменшенні</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation>Ліве вухо</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation>ліве око 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation>Рот</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>Ніс</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation>Праве вухо</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation>Праве око 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation>Верхня частина тіла 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation>Профіль обличчя</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation>Праве око 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>Усмішка</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation>Верхня частина тіла</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation>Тип маркера</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation>Прямокутник</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation>Еліпс</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation>Картинка</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation>Піхселізація</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation>Розмиття</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation>Зовнішнє розмиття</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation>Зображення тла</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation>Стиль маркера</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation>Твердий</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation>Тире</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation>Крапки</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation>Крапки і тире</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation>Тире і двокрапки</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation>Колір маркера</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation>Ширина маркера</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation>Маски</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation>Ангел</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>Ведмідь</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation>Бобер</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>Кіт</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation>Курка</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>Корова</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation>Диявол</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation>Собака</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation>Далматинець</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation>Щасливий собака</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>Дракон</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation>Слон 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation>Слон 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation>Лось</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation>Жаба</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation>Привид</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation>Жирафа</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation>Антилопа гну</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation>Коза</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation>Гіпопотам</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>Кінь</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation>Сірий кінь</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation>Коала</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>Мавпа</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation>Сіра миша</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation>Біла миша</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation>Панда</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation>Пінгвін</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation>Гарбуз 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation>Гарбуз 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation>Єнот</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation>Носоріг</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation>Вівці</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation>Череп 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation>Череп 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation>Трицерапторс</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation>Зебра</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation>Зображення маркера</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation>Замінити обличчя цим малюнком</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
-        <translation>Тла</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
         <source>Black Square</source>
         <translation>Чорний квадрат</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
         <source>Background picture</source>
         <translation>Зображення тла</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
         <source>Replace background with this picture</source>
         <translation>Замініть тло цим зображенням</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
         <source>Pixel grid size</source>
         <translation>Розмір піксельної сітки</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
         <source>Blur radius</source>
         <translation>Радіус розмиття</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
         <source>Face Area Settings</source>
         <translation>Налаштування ділянки обличчя</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
-        <translation>Розширені параметри ділянки обличчя
-розмиття тла або зображення нижче.</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
-        <translation>H-зсув</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
-        <translation>V-зсув</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
         <source>Width Adjust %</source>
         <translation>Зміна ширини %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
         <source>Height Adjust %</source>
         <translation>Зміна висоти %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
         <source>Round Area</source>
         <translation>Кругла ділянка</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
-        <translation>H-радіус %</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
-        <translation>V-радіус %</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation>Виберіть колір маркера</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation>Важкий</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation>Охолодження</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation>Розчинити</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation>Збільшення</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation>Поріг</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>Поріг світла</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Альфа-різниця</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Альфа-варіація</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation>Крок</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation>Візерунок</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation>90° Півтон 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation>Кластерезація 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation>Кластерезація 4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation>Кластерезація 8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation>Лінії 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation>Магія 2x2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation>Магія 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation>Замовлено 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation>Замовлено 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation>Замовлено 8x8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation>Растровий візерунок</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation>Розмір візерунку</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
-        <translation>Освітленість</translation>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation>Схил</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation>Перехоплення</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation>Спіраль 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation>Спіраль 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation>Парабола</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation>Горизонтальна смуга</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation>Приріст швидкості</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation>Кількість</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>Поріг світла</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation>Оберіть колір автомата</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
-        <translation>N° з капель</translation>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation>Вибрати</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation>Колір курсору</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation>Вибрати колір курсора</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation>Найменша довжина краплі</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation>Найбільша довжина краплі</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation>Найменша швидкість</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation>Найбільша швидкість</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation>Показати курсор</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation>Відео доріжка</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation>Аудіотрек</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation>Субтитри треку</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation>Просто</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation>Яскравість</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>Контраст</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation>М&apos;яка нормалізація</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation>Сильна нормалізація</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation>М&apos;який колір</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation>Жорсткий колір</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Різниця Альфа каналу</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation>Колір радіації</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation>Виявлення руху</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation>Дощ</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation>Розпад</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation>Показати лінії</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation>Сховати лінії</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation>Сховати кольори</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation>Оберіть прихований колір</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
-        <translation>Вертикальна синхронізація</translation>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation>Шум</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation>Маска</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation>Ступені</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>Температура</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>Формат відео</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>Роздільна здатність</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation>Частота кадрів</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>Скинути</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation>Пропорція</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation>Масштаб</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation>М&apos;якість</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation>Оберіть колір він&apos;єтки</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation>Пульсації</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
-        <translation>Фаза</translation>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation>Використовувати спалах</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation>Вже</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation>%1 секунд</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation>Зробити світлину</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation>%1/Картинка %2.%3</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished">Денна збірка</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation>Записати відео</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation>Співвідношення сторін</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation>Обведення обличчя
 тривалість (секунди)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation>Кількість обведень облич</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation>Швидкість зменшення наближення</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation>Швидкість збільшення наближення</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation>Відступ обличчя (% від розміру обличчя)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
         <source>Face margin (% of face size)</source>
         <translation>Межа обличчя (% від розміру обличчя)</translation>
     </message>
     <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
         <source>e.g. 16:9, 4:3</source>
         <translation>наприклад 16:9, 4:3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
         <source>Lock viewport</source>
         <translation>Заблокувати вікно показу</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
         <source>Debug mode</source>
         <translation>Режим налагодження</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
         <source>Flip horizontally</source>
         <translation>Віддзеркалити поземно (горизонт.)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
         <source>Flip vertically</source>
         <translation>Віддзеркалити прямовисно (вертик.)</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
         <source>Width</source>
         <translation>Ширина</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
         <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
         <source>Height</source>
         <translation>Висота</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
         <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
-        <translation>Режим наближування</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
-        <translation>Швидко</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
-        <translation>Лінійний</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
-        <translation>Режим співвідношення сторін</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation>Нехтувати</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
-        <translation>Залишити</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
-        <translation>Розширення</translation>
-    </message>
-    <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2813,19 +3339,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished">Виберіть новий колір</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/vi.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/vi.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>Sử dụng Qt %1</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>Trang web</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>Một ứng dụng webcam đơn giản để ghi hình ảnh và video.</translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished"></translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
@@ -113,12 +128,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -131,33 +146,41 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation type="unfinished"></translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation type="unfinished"></translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
+        <source>Update</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
-        <source>Update</source>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation type="unfinished"></translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation type="unfinished"></translation>
     </message>
@@ -618,12 +685,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation type="unfinished"></translation>
     </message>
@@ -747,7 +824,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation type="unfinished"></translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation type="unfinished">Tệp</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation type="unfinished">URL</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation type="unfinished">Ghi chú</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation type="unfinished">Đường dẫn</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation type="unfinished">Tất cả tệp phim</translation>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1664,1138 +1952,1377 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
-        <source>Face margin (% of face size)</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
-        <source>e.g. 16:9, 4:3</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
-        <source>Lock viewport</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
-        <source>Debug mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
-        <source>Flip horizontally</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
+        <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
-        <source>Flip vertically</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
-        <source>Width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
-        <source>Aspect ratio width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
-        <source>Height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
-        <source>Aspect ratio height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
+        <source>e.g. 16:9, 4:3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
+        <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
+        <source>Debug mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
+        <source>Flip horizontally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
+        <source>Flip vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
+        <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
+        <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
+        <source>Height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
+        <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2811,19 +3338,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/zh_CN.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/zh_CN.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
-        <source>Using Qt %1</source>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/About.qml" line="80"/>
+        <source>Using Qt %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>网站</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished">摄像头捕捉软件。</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished"></translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
@@ -113,12 +128,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>比特率</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>比特率(比特/秒)</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation type="unfinished">采样率</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation type="unfinished">延迟(毫秒)</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation type="unfinished">静音</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -268,7 +299,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>视频捕捉</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>桌面捕捉</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>视频转换</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>虚拟相机驱动</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>框架与库</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation type="unfinished"></translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation type="unfinished">搜索</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>文件格式</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation>质量</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation>选择用于保存照片的文件夹</translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation>插件</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation>在子文件夹中搜索插件</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation>添加路径</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation>删除</translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>更新</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>添加插件搜索路径</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished">删除</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation type="unfinished">摄像头捕捉软件。</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation type="unfinished">从PATH载入设定。如果PATH为空，将从程序目录下载入设定。</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation type="unfinished"></translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation type="unfinished">常规选项</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation type="unfinished">插件</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation type="unfinished"></translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation type="unfinished"></translation>
     </message>
@@ -618,12 +685,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -644,7 +711,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation type="unfinished">比特率</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation type="unfinished">比特率(比特/秒)</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation type="unfinished"></translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation type="unfinished">删除</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation type="unfinished">搜索特效</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation type="unfinished"></translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation type="unfinished">添加特效</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation type="unfinished"></translation>
     </message>
@@ -747,7 +824,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation type="unfinished"></translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation type="unfinished">描述</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation type="unfinished">搜索</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
+    <message>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation type="unfinished">编辑</translation>
+    </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation type="unfinished">删除</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation type="unfinished">没有检测到摄像头</translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
         <translation type="unfinished">动态GIF</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
         <translation type="unfinished">MKV视频</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
         <translation type="unfinished">MP4视频</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
         <translation type="unfinished">MPEG视频</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
         <translation type="unfinished">DVD视频</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
         <translation type="unfinished">WebM视频</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation type="unfinished">全部文件</translation>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation type="unfinished">编辑</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation type="unfinished">删除</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation type="unfinished">没有检测到摄像头</translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation type="unfinished">全部文件</translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation type="unfinished">搜索</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation type="unfinished">搜索</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation type="unfinished">文件格式</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>选择一个颜色</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation>变换矩阵</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation type="unfinished">象征</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation type="unfinished">搜索</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>默认</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>风格（样式）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation type="unfinished">质量</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>颜色</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation>新颜色</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation>老照片</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>红色和绿色</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>黄色和蓝色</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1664,1138 +1952,1377 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>眼睛</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation>左眼睛1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation>左耳朵</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation>左眼睛2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>鼻子</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation>右耳朵</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation>右眼睛1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation>右眼睛2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>笑眯眯</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>熊</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>猫</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation>鸡</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>牛</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation>狗</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation>高兴的狗</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>龙</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>马</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation>灰色的马</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>猴</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation>熊猫</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation>南瓜1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation>南瓜2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation>羊</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
-        <source>Black Square</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
-        <source>Background picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
-        <source>Replace background with this picture</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
-        <source>Pixel grid size</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
-        <source>Blur radius</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
-        <source>Face Area Settings</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
+        <source>Black Square</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
+        <source>Background picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
+        <source>Replace background with this picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
-        <source>Width Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
-        <source>Height Adjust %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
+        <source>Pixel grid size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
-        <source>Round Area</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
+        <source>Blur radius</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
+        <source>Face Area Settings</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
+        <source>Width Adjust %</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
+        <source>Height Adjust %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
+        <source>Round Area</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation>雨</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>温度</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation>FPS</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation type="unfinished">现在</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation type="unfinished">%1秒</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
-        <source>Face margin (% of face size)</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
-        <source>e.g. 16:9, 4:3</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
-        <source>Lock viewport</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
-        <source>Debug mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
-        <source>Flip horizontally</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
+        <source>Face margin (% of face size)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
-        <source>Flip vertically</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
-        <source>Width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
-        <source>Aspect ratio width</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
-        <source>Height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
-        <source>Aspect ratio height</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
+        <source>e.g. 16:9, 4:3</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
+        <source>Lock viewport</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
+        <source>Debug mode</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
+        <source>Flip horizontally</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
+        <source>Flip vertically</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
+        <source>Width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
+        <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
+        <source>Height</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
+        <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2811,19 +3338,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/share/ts/zh_TW.ts
+++ webcamoid-9.0.0/StandAlone/share/ts/zh_TW.ts
@@ -15,22 +15,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="76"/>
+        <location filename="../qml/About.qml" line="72"/>
+        <source>Built from %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="74"/>
+        <source>Open the commit in your web browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="80"/>
         <source>Using Qt %1</source>
         <translation>使用 Qt %1</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="80"/>
+        <location filename="../qml/About.qml" line="84"/>
         <source>Website</source>
         <translation>網站</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="89"/>
+        <location filename="../qml/About.qml" line="88"/>
+        <source>Go to %1 website</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/About.qml" line="96"/>
         <source>Webcam capture application.</source>
         <translation>網路攝影機抓取應用程式。</translation>
     </message>
     <message>
-        <location filename="../qml/About.qml" line="92"/>
+        <location filename="../qml/About.qml" line="99"/>
         <source>A simple webcam application for picture and video capture.</source>
         <translation>一個簡單地網路攝影機應用程式，用於抓取照片與影片。</translation>
     </message>
@@ -43,25 +58,25 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="45"/>
+        <location filename="../qml/AboutDialog.qml" line="47"/>
         <source>About</source>
-        <extracomment>Information of the program, like name, description, vesion, etc..</extracomment>
+        <extracomment>Information of the program, like name, description, version, etc..</extracomment>
         <translation type="unfinished">關於</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="51"/>
+        <location filename="../qml/AboutDialog.qml" line="53"/>
         <source>Contributors</source>
         <extracomment>List of people contributing to the project: software developers, translators, designers, etc..</extracomment>
         <translation type="unfinished">貢獻者</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="55"/>
+        <location filename="../qml/AboutDialog.qml" line="57"/>
         <source>License</source>
         <extracomment>Program license.</extracomment>
         <translation type="unfinished">許可證</translation>
     </message>
     <message>
-        <location filename="../qml/AboutDialog.qml" line="61"/>
+        <location filename="../qml/AboutDialog.qml" line="63"/>
         <source>3rd Party Licenses</source>
         <extracomment>License for 3rd party components used in Webcamoid, like libraries and code snippets.</extracomment>
         <translation type="unfinished">第三方許可證</translation>
@@ -70,37 +85,37 @@
 <context>
     <name>AddVideoFormat</name>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="42"/>
+        <location filename="../qml/AddVideoFormat.qml" line="44"/>
         <source>Add Video Format</source>
         <translation>新增影片格式</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="43"/>
+        <location filename="../qml/AddVideoFormat.qml" line="45"/>
         <source>Change Video Format</source>
         <translation>更改影片格式</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="95"/>
+        <location filename="../qml/AddVideoFormat.qml" line="97"/>
         <source>Remove format</source>
         <translation>移除格式</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="106"/>
+        <location filename="../qml/AddVideoFormat.qml" line="109"/>
         <source>Format</source>
         <translation>格式</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="115"/>
+        <location filename="../qml/AddVideoFormat.qml" line="120"/>
         <source>Width</source>
         <translation>寬度</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="126"/>
+        <location filename="../qml/AddVideoFormat.qml" line="133"/>
         <source>Height</source>
         <translation>高度</translation>
     </message>
     <message>
-        <location filename="../qml/AddVideoFormat.qml" line="137"/>
+        <location filename="../qml/AddVideoFormat.qml" line="146"/>
         <source>Frame rate</source>
         <translation>影格率</translation>
     </message>
@@ -113,12 +128,12 @@
         <translation>音訊編解碼器選項</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="164"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="167"/>
         <source>Bitrate</source>
         <translation>位元率</translation>
     </message>
     <message>
-        <location filename="../qml/AudioCodecOptions.qml" line="168"/>
+        <location filename="../qml/AudioCodecOptions.qml" line="171"/>
         <source>Bitrate (bits/secs)</source>
         <translation>位元率 （bits/秒）</translation>
     </message>
@@ -131,33 +146,41 @@
         <translation>音訊裝置選項</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="134"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="137"/>
         <source>Sample Format</source>
         <extracomment>An sample represents the strength of the wave at a certain time. A sample can be expressed as the number of bits defining it (more bits better sound), the type of data representing it (signed integer, unsigned integer, floating point), and the endianness of the data (big endian, little endian). The sample format is the representation of that information. For example, &apos;s16le&apos; means that each sample format is represented by a 16 bits signed integer arranged as little endian.</extracomment>
         <translation>樣本格式</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="156"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="161"/>
         <source>Channels</source>
         <translation type="unfinished">頻道</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="179"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="186"/>
         <source>Sample Rate</source>
         <extracomment>Number of audio samples per channel to be played per second.</extracomment>
         <translation type="unfinished">採樣率</translation>
     </message>
     <message>
-        <location filename="../qml/AudioDeviceOptions.qml" line="210"/>
+        <location filename="../qml/AudioDeviceOptions.qml" line="219"/>
         <source>Latency (ms)</source>
         <extracomment>The latency is the amount of accumulated audio ready to play, measured in time. Higher latency == smoother audio playback, but more desynchronization with the video. Lowerer latency == audio synchronization near to the video, but glitchy audio playback. https://en.wikipedia.org/wiki/Latency_(audio)</extracomment>
         <translation>延遲（ms）</translation>
     </message>
 </context>
 <context>
+    <name>AudioInputs</name>
+    <message>
+        <location filename="../qml/AudioInputs.qml" line="44"/>
+        <source>Configure input</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioLayer</name>
     <message>
-        <location filename="../../src/audiolayer.cpp" line="248"/>
+        <location filename="../../src/audiolayer.cpp" line="244"/>
         <source>Silence</source>
         <translation type="unfinished">靜音</translation>
     </message>
@@ -176,6 +199,14 @@
     </message>
 </context>
 <context>
+    <name>AudioOutputs</name>
+    <message>
+        <location filename="../qml/AudioOutputs.qml" line="44"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>AudioVideoPanel</name>
     <message>
         <location filename="../qml/AudioVideoPanel.qml" line="27"/>
@@ -227,27 +258,27 @@
         <translation>正在下載 %1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="148"/>
+        <location filename="../qml/DownloadDialog.qml" line="150"/>
         <source>From: %1</source>
         <translation>來源：%1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="152"/>
+        <location filename="../qml/DownloadDialog.qml" line="154"/>
         <source>To: %1</source>
         <translation>目的地：%1</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="156"/>
+        <location filename="../qml/DownloadDialog.qml" line="158"/>
         <source>Size: %1 %2B / %3 %4B</source>
         <translation>大小：%1 %2B / %3 %4B</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="164"/>
+        <location filename="../qml/DownloadDialog.qml" line="166"/>
         <source>Speed: %1 %2B/s</source>
         <translation>速率：%1 %2B/s</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadDialog.qml" line="170"/>
+        <location filename="../qml/DownloadDialog.qml" line="172"/>
         <source>Time remaining: %1</source>
         <translation type="unfinished">剩餘時間: %1</translation>
     </message>
@@ -268,7 +299,7 @@
         <translation>下載已就緒</translation>
     </message>
     <message>
-        <location filename="../qml/DownloadSucceededDialog.qml" line="46"/>
+        <location filename="../qml/DownloadSucceededDialog.qml" line="47"/>
         <source>Install the virtual camera?</source>
         <translation>是否安裝虛擬攝影機？</translation>
     </message>
@@ -276,53 +307,53 @@
 <context>
     <name>GeneralConfig</name>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="91"/>
+        <location filename="../qml/GeneralConfig.qml" line="94"/>
         <source>Video capture</source>
         <translation>視訊抓取</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="108"/>
-        <source>Desktop capture</source>
-        <translation>桌面抓取</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="125"/>
-        <source>Audio capture/play</source>
-        <translation>音訊抓取／播放</translation>
-    </message>
-    <message>
-        <location filename="../qml/GeneralConfig.qml" line="142"/>
+        <location filename="../qml/GeneralConfig.qml" line="151"/>
         <source>Video convert</source>
         <translation>視訊轉換</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="193"/>
+        <location filename="../qml/GeneralConfig.qml" line="208"/>
         <source>Virtual camera driver</source>
         <translation>虛擬相機驅動程式</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="159"/>
+        <location filename="../qml/GeneralConfig.qml" line="170"/>
         <source>Video playback</source>
         <translation>視訊回放</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="72"/>
+        <location filename="../qml/GeneralConfig.qml" line="73"/>
         <source>Play sources on start</source>
         <extracomment>Start playing the webcam and other sources right after * opening Webcamoid.</extracomment>
         <translation>當開始時，播放其它來源</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="82"/>
+        <location filename="../qml/GeneralConfig.qml" line="84"/>
         <source>Frameworks and libraries</source>
         <translation>框架與函式庫</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="176"/>
+        <location filename="../qml/GeneralConfig.qml" line="113"/>
+        <source>Screen capture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="132"/>
+        <source>Audio capture/playback</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/GeneralConfig.qml" line="189"/>
         <source>Video record</source>
         <translation>視訊錄製</translation>
     </message>
     <message>
-        <location filename="../qml/GeneralConfig.qml" line="213"/>
+        <location filename="../qml/GeneralConfig.qml" line="230"/>
         <source>Root method</source>
         <extracomment>The preferred method for executing commands with elevated privileges in the system.</extracomment>
         <translation type="unfinished">根模式（Root method）</translation>
@@ -331,35 +362,48 @@
 <context>
     <name>ImageCapture</name>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="39"/>
+        <location filename="../qml/ImageCapture.qml" line="40"/>
         <source>Images directory</source>
         <translation>圖片資料夾</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="49"/>
+        <location filename="../qml/ImageCapture.qml" line="51"/>
         <source>Search</source>
         <translation>搜尋</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="57"/>
+        <location filename="../qml/ImageCapture.qml" line="52"/>
+        <source>Search directory to save images</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/ImageCapture.qml" line="61"/>
         <source>File format</source>
         <translation>檔案格式</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="86"/>
+        <location filename="../qml/ImageCapture.qml" line="92"/>
         <source>Quality</source>
         <translation>品質</translation>
     </message>
     <message>
-        <location filename="../qml/ImageCapture.qml" line="111"/>
+        <location filename="../qml/ImageCapture.qml" line="119"/>
         <source>Select the folder to save your photos</source>
         <translation>選擇一個資料夾，以存放你的照片</translation>
     </message>
 </context>
 <context>
+    <name>OptionsPanel</name>
+    <message>
+        <location filename="../qml/OptionsPanel.qml" line="199"/>
+        <source>Close %1 panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>PipewireScreenDev</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="217"/>
+        <location filename="../../../libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp" line="216"/>
         <source>PipeWire Screen</source>
         <translation type="unfinished"></translation>
     </message>
@@ -377,76 +421,89 @@
         <translation>擴充功能</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="110"/>
+        <location filename="../qml/PluginConfig.qml" line="164"/>
         <source>Search plugins in subfolders</source>
         <translation>在子資料夾中尋找擴充功能</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="119"/>
+        <location filename="../qml/PluginConfig.qml" line="173"/>
         <source>Add path</source>
         <translation>新增路徑</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="162"/>
-        <source>Remove</source>
-        <translation>移除</translation>
-    </message>
-    <message>
-        <location filename="../qml/PluginConfig.qml" line="196"/>
+        <location filename="../qml/PluginConfig.qml" line="211"/>
         <source>Update</source>
         <translation>更新</translation>
     </message>
     <message>
-        <location filename="../qml/PluginConfig.qml" line="246"/>
+        <location filename="../qml/PluginConfig.qml" line="212"/>
+        <source>Update plugins list</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/PluginConfig.qml" line="239"/>
         <source>Add plugins search path</source>
         <translation>新增擴充功能搜尋路徑</translation>
     </message>
 </context>
 <context>
+    <name>PluginsPathItem</name>
+    <message>
+        <location filename="../qml/PluginsPathItem.qml" line="52"/>
+        <source>Remove</source>
+        <translation type="unfinished">移除</translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
-        <location filename="../../src/clioptions.cpp" line="44"/>
+        <location filename="../../src/clioptions.cpp" line="45"/>
         <source>Webcam capture application.</source>
         <translation>網路攝影機抓取應用程式。</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="47"/>
+        <location filename="../../src/clioptions.cpp" line="48"/>
         <source>Load settings from PATH. If PATH is empty, load configs from application directory.</source>
         <translation>從 PATH 讀取設定。如果 PATH 是空的，就從程式資料夾讀取配置。</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="49"/>
+        <location filename="../../src/clioptions.cpp" line="50"/>
         <source>PATH</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="61"/>
-        <location filename="../../src/clioptions.cpp" line="70"/>
+        <location filename="../../src/clioptions.cpp" line="62"/>
+        <location filename="../../src/clioptions.cpp" line="71"/>
         <source>PATH1;PATH2;PATH3;...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="75"/>
+        <location filename="../../src/clioptions.cpp" line="76"/>
         <source>Send debug output to a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="76"/>
+        <location filename="../../src/clioptions.cpp" line="77"/>
         <source>FILE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="54"/>
+        <location filename="../../src/clioptions.cpp" line="81"/>
+        <source>Open a new instance of %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/clioptions.cpp" line="55"/>
         <source>Search in the specified plugins paths recursively.</source>
         <translation>在指定的擴充功能路徑中，遞歸地尋找。</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="59"/>
+        <location filename="../../src/clioptions.cpp" line="60"/>
         <source>Semi-colon separated list of paths to search for plugins.</source>
         <translation>以分號（;）分割的路徑列表，用於搜尋擴充功能。</translation>
     </message>
     <message>
-        <location filename="../../src/clioptions.cpp" line="68"/>
+        <location filename="../../src/clioptions.cpp" line="69"/>
         <source>Semi-colon separated list of paths to avoid loading.</source>
         <extracomment>Blacklist of plugins that could have conflicts when loading in Webcamoid.</extracomment>
         <translation>以分號（;）分割的路徑列表，用以避免用以避免被讀取。（載入至 Webcamoid 時可能造成衝突的插件黑名單）。</translation>
@@ -455,7 +512,7 @@
 <context>
     <name>Recording</name>
     <message>
-        <location filename="../../src/recording.cpp" line="372"/>
+        <location filename="../../src/recording.cpp" line="384"/>
         <source>%1/Video %2.%3</source>
         <translation>%1/視訊 %2.%3</translation>
     </message>
@@ -471,27 +528,27 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="76"/>
+        <location filename="../qml/SettingsDialog.qml" line="73"/>
         <source>Image Capture</source>
         <translation>圖片抓取</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="77"/>
+        <location filename="../qml/SettingsDialog.qml" line="76"/>
         <source>Video Recording</source>
         <translation>視訊錄製</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="78"/>
+        <location filename="../qml/SettingsDialog.qml" line="79"/>
         <source>General Options</source>
         <translation>一般選項</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="79"/>
+        <location filename="../qml/SettingsDialog.qml" line="82"/>
         <source>Plugins</source>
         <translation>擴充功能</translation>
     </message>
     <message>
-        <location filename="../qml/SettingsDialog.qml" line="80"/>
+        <location filename="../qml/SettingsDialog.qml" line="85"/>
         <source>Updates</source>
         <translation>更新</translation>
     </message>
@@ -532,80 +589,90 @@
 <context>
     <name>TableColor</name>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="37"/>
         <source>Select the new color</source>
         <translation type="unfinished">選擇新色彩</translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="39"/>
+        <source>Color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/TableColor.qml" line="45"/>
+        <source>Remove color %1</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UpdatesConfig</name>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="83"/>
+        <location filename="../qml/UpdatesConfig.qml" line="84"/>
         <source>Notify about new versions</source>
         <translation>通知新版本</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="93"/>
+        <location filename="../qml/UpdatesConfig.qml" line="96"/>
         <source>Show updates dialog</source>
         <translation>顯示更新對話框</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="101"/>
+        <location filename="../qml/UpdatesConfig.qml" line="106"/>
         <source>Check new versions</source>
         <translation>檢查新版本</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="109"/>
+        <location filename="../qml/UpdatesConfig.qml" line="115"/>
         <source>Daily</source>
         <translation>每日</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="113"/>
+        <location filename="../qml/UpdatesConfig.qml" line="119"/>
         <source>Every two days</source>
         <translation>每兩日</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="117"/>
+        <location filename="../qml/UpdatesConfig.qml" line="123"/>
         <source>Weekly</source>
         <translation>每週</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="121"/>
+        <location filename="../qml/UpdatesConfig.qml" line="127"/>
         <source>Every two weeks</source>
         <translation>每兩週</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="125"/>
+        <location filename="../qml/UpdatesConfig.qml" line="131"/>
         <source>Monthly</source>
         <translation>每月</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="129"/>
+        <location filename="../qml/UpdatesConfig.qml" line="135"/>
         <source>Never</source>
         <translation>永不</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="142"/>
+        <location filename="../qml/UpdatesConfig.qml" line="148"/>
         <source>Last updated</source>
         <translation>最後一次更新</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="163"/>
+        <location filename="../qml/UpdatesConfig.qml" line="169"/>
         <source>Your version of %1 is outdated. Latest version is &lt;b&gt;%2&lt;/b&gt;.</source>
         <translation>你的版本 %1 過舊。最新版本是 &lt;b&gt;%2&lt;/b&gt;。</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="169"/>
+        <location filename="../qml/UpdatesConfig.qml" line="175"/>
         <source>Upgrade Now!</source>
         <translation>立即升級！</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="184"/>
+        <location filename="../qml/UpdatesConfig.qml" line="190"/>
         <source>Thanks for using a &lt;b&gt;development version&lt;/b&gt;!&lt;br /&gt;It will be very helpful if you can report any bug and suggestions you have.</source>
         <translation>感謝使用&lt;b&gt;開發板&lt;/b&gt;！&lt;br /&gt;如果你可以回報錯誤以及建議，那對我們非常有幫助。</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesConfig.qml" line="189"/>
+        <location filename="../qml/UpdatesConfig.qml" line="195"/>
         <source>Report a Bug</source>
         <translation>回報錯誤</translation>
     </message>
@@ -618,12 +685,12 @@
         <translation>有新版本了！</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="71"/>
+        <location filename="../qml/UpdatesDialog.qml" line="72"/>
         <source>Download %1 %2 NOW!</source>
         <translation>現在下載 %1 %2！</translation>
     </message>
     <message>
-        <location filename="../qml/UpdatesDialog.qml" line="78"/>
+        <location filename="../qml/UpdatesDialog.qml" line="79"/>
         <source>Show this dialog next time</source>
         <translation>下次顯示這個對話框</translation>
     </message>
@@ -644,7 +711,7 @@
         <translation>安裝成功</translation>
     </message>
     <message>
-        <location filename="../qml/VCamInstallSucceededDialog.qml" line="38"/>
+        <location filename="../qml/VCamInstallSucceededDialog.qml" line="40"/>
         <source>Restart Webcamoid?</source>
         <translation>是否重新啟動 Webcamoid？</translation>
     </message>
@@ -657,7 +724,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VCamManualDownloadDialog.qml" line="38"/>
+        <location filename="../qml/VCamManualDownloadDialog.qml" line="40"/>
         <source>Download the virtual camera manually?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -670,18 +737,18 @@
         <translation>視訊編解碼器選項</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="167"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="170"/>
         <source>Bitrate</source>
         <translation>位元率</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="171"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="174"/>
         <source>Bitrate (bits/secs)</source>
         <translation>位元率（bits/秒）</translation>
     </message>
     <message>
-        <location filename="../qml/VideoCodecOptions.qml" line="182"/>
-        <location filename="../qml/VideoCodecOptions.qml" line="186"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="187"/>
+        <location filename="../qml/VideoCodecOptions.qml" line="191"/>
         <source>Keyframes stride</source>
         <translation>關鍵幀步幅</translation>
     </message>
@@ -693,6 +760,11 @@
         <source>Remove</source>
         <translation>移除</translation>
     </message>
+    <message>
+        <location filename="../qml/VideoEffectOptions.qml" line="58"/>
+        <source>Remove %1 video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>VideoEffectsDialog</name>
@@ -702,12 +774,17 @@
         <translation>新增視訊效果</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="69"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="87"/>
         <source>Search effect</source>
         <translation>搜尋效果</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsDialog.qml" line="188"/>
+        <location filename="../qml/VideoEffectsDialog.qml" line="88"/>
+        <source>Search video effect</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoEffectsDialog.qml" line="204"/>
         <source>Chain effect</source>
         <extracomment>Apply the effect over the other effects.</extracomment>
         <translation>效果鏈（效果應用的先後順序）</translation>
@@ -716,12 +793,12 @@
 <context>
     <name>VideoEffectsList</name>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="35"/>
+        <location filename="../qml/VideoEffectsList.qml" line="47"/>
         <source>Add effect</source>
         <translation>新增效果</translation>
     </message>
     <message>
-        <location filename="../qml/VideoEffectsList.qml" line="42"/>
+        <location filename="../qml/VideoEffectsList.qml" line="54"/>
         <source>Remove all effects</source>
         <translation>移除所有效果</translation>
     </message>
@@ -747,7 +824,7 @@
         <translation>視訊格式選項</translation>
     </message>
     <message>
-        <location filename="../qml/VideoFormatOptions.qml" line="169"/>
+        <location filename="../qml/VideoFormatOptions.qml" line="172"/>
         <source>File extension</source>
         <translation>檔案擴展名</translation>
     </message>
@@ -755,178 +832,278 @@
 <context>
     <name>VideoInputAddEdit</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="55"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="57"/>
         <source>Edit Source</source>
         <translation>編輯來源</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="56"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="58"/>
         <source>Add Source</source>
         <translation>新增來源</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="84"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="86"/>
         <source>File</source>
         <translation>檔案</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="87"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="89"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="180"/>
         <source>URL</source>
         <translation>網址</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="108"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="156"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="111"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="164"/>
         <source>Description</source>
         <translation>說明</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="114"/>
-        <location filename="../qml/VideoInputAddEdit.qml" line="162"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="117"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="170"/>
         <source>Source title</source>
         <translation>來源標題</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="122"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="127"/>
         <source>Path</source>
         <translation>路徑</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="129"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="134"/>
         <source>File path</source>
         <translation>檔案路徑</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="136"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="142"/>
         <source>Search</source>
         <translation>搜尋</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="215"/>
+        <location filename="../qml/VideoInputAddEdit.qml" line="143"/>
+        <source>Search file to use as source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
         <source>Choose the file to add as source</source>
         <translation>選擇要新增為來源的檔案</translation>
     </message>
+</context>
+<context>
+    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="218"/>
-        <source>All Video Files</source>
-        <translation>所有影片檔案</translation>
+        <location filename="../qml/VideoInputOptions.qml" line="61"/>
+        <source>Edit</source>
+        <translation>編輯</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="221"/>
+        <location filename="../qml/VideoInputOptions.qml" line="74"/>
+        <source>Remove</source>
+        <translation>移除</translation>
+    </message>
+</context>
+<context>
+    <name>VideoInputs</name>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="65"/>
+        <source>Add source</source>
+        <translation>新增來源</translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="57"/>
+        <source>Configure source</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoInputs.qml" line="76"/>
+        <source>No webcams found</source>
+        <translation>找不到網路攝影機</translation>
+    </message>
+</context>
+<context>
+    <name>VideoLayer</name>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="135"/>
         <source>3GP Video</source>
-        <translation>3GP 影片</translation>
+        <translation type="unfinished">3GP 影片</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="222"/>
+        <location filename="../../src/videolayer.cpp" line="136"/>
         <source>AVI Video</source>
-        <translation>AVI 影片</translation>
+        <translation type="unfinished">AVI 影片</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="224"/>
+        <location filename="../../src/videolayer.cpp" line="137"/>
+        <source>Windows Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="138"/>
+        <source>Microsoft Windows Cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="140"/>
         <source>Flash Video</source>
         <extracomment>Adobe FLV Flash video</extracomment>
-        <translation>Flash 影片</translation>
+        <translation type="unfinished">Flash 影片</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="225"/>
+        <location filename="../../src/videolayer.cpp" line="141"/>
         <source>Animated GIF</source>
-        <translation>GIF 動畫</translation>
+        <translation type="unfinished">GIF 動畫</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="226"/>
+        <location filename="../../src/videolayer.cpp" line="142"/>
+        <source>Graphic Interchange Format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="143"/>
+        <source>Apple Icon Image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="144"/>
+        <source>Microsoft Windows Icon</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="145"/>
+        <source>Joint Photographic Experts Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="146"/>
         <source>MKV Video</source>
-        <translation>MKV 影片</translation>
+        <translation type="unfinished">MKV 影片</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="227"/>
+        <location filename="../../src/videolayer.cpp" line="147"/>
         <source>Animated PNG</source>
-        <translation>PNG 動畫</translation>
+        <translation type="unfinished">PNG 動畫</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="228"/>
+        <location filename="../../src/videolayer.cpp" line="148"/>
+        <source>Multiple-image Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="149"/>
         <source>QuickTime Video</source>
-        <translation>QuickTime 影片</translation>
+        <translation type="unfinished">QuickTime 影片</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="229"/>
+        <location filename="../../src/videolayer.cpp" line="150"/>
         <source>MP4 Video</source>
-        <translation>MP4 影片</translation>
+        <translation type="unfinished">MP4 影片</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="230"/>
+        <location filename="../../src/videolayer.cpp" line="151"/>
         <source>MPEG Video</source>
-        <translation>MPEG 影片</translation>
+        <translation type="unfinished">MPEG 影片</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="231"/>
+        <location filename="../../src/videolayer.cpp" line="152"/>
         <source>Ogg Video</source>
-        <translation>Ogg 影片</translation>
+        <translation type="unfinished">Ogg 影片</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="153"/>
+        <source>Portable Bitmap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="154"/>
+        <source>Portable Graymap</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="155"/>
+        <source>Portable Network Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="156"/>
+        <source>Portable Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="233"/>
+        <location filename="../../src/videolayer.cpp" line="158"/>
         <source>RealMedia Video</source>
         <extracomment>Don&apos;t translate &quot;RealMedia&quot;, leave it as is.</extracomment>
-        <translation>RealMedia 影片</translation>
+        <translation type="unfinished">RealMedia 影片</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="159"/>
+        <source>Scalable Vector Graphics</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="160"/>
+        <source>Truevision TGA</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="161"/>
+        <source>Tagged Image File Format</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="234"/>
+        <location filename="../../src/videolayer.cpp" line="162"/>
         <source>DVD Video</source>
-        <translation>DVD 影片</translation>
+        <translation type="unfinished">DVD 影片</translation>
+    </message>
+    <message>
+        <location filename="../../src/videolayer.cpp" line="163"/>
+        <source>Wireless Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="235"/>
+        <location filename="../../src/videolayer.cpp" line="164"/>
         <source>WebM Video</source>
-        <translation>WebM 影片</translation>
+        <translation type="unfinished">WebM 影片</translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="237"/>
-        <source>Windows Media Video</source>
-        <extracomment>Also known as WMV, is a video file format.</extracomment>
-        <translation>WMV 影片</translation>
+        <location filename="../../src/videolayer.cpp" line="165"/>
+        <source>WebP</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputAddEdit.qml" line="238"/>
-        <source>All Files</source>
-        <translation>所有檔案</translation>
+        <location filename="../../src/videolayer.cpp" line="167"/>
+        <source>Windows Media Video</source>
+        <extracomment>Also known as WMV, is a video file format.</extracomment>
+        <translation type="unfinished">WMV 影片</translation>
     </message>
-</context>
-<context>
-    <name>VideoInputOptions</name>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="60"/>
-        <source>Edit</source>
-        <translation>編輯</translation>
+        <location filename="../../src/videolayer.cpp" line="168"/>
+        <source>X11 Bitmap</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputOptions.qml" line="72"/>
-        <source>Remove</source>
-        <translation>移除</translation>
+        <location filename="../../src/videolayer.cpp" line="169"/>
+        <source>X11 Pixmap</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>VideoInputs</name>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="56"/>
-        <source>Add source</source>
-        <translation>新增來源</translation>
+        <location filename="../../src/videolayer.cpp" line="209"/>
+        <source>All Image and Video Files</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoInputs.qml" line="67"/>
-        <source>No webcams found</source>
-        <translation>找不到網路攝影機</translation>
+        <location filename="../../src/videolayer.cpp" line="244"/>
+        <source>All Files</source>
+        <translation type="unfinished">所有檔案</translation>
     </message>
-</context>
-<context>
-    <name>VideoLayer</name>
     <message>
-        <location filename="../../src/videolayer.cpp" line="261"/>
+        <location filename="../../src/videolayer.cpp" line="386"/>
         <source>No Output</source>
         <extracomment>Disable video output, don&apos;t send the video to the output device.</extracomment>
         <translation>不要輸出</translation>
     </message>
     <message>
-        <location filename="../../src/videolayer.cpp" line="593"/>
+        <location filename="../../src/videolayer.cpp" line="721"/>
         <source>Virtual Camera</source>
         <translation>虛擬攝影機</translation>
     </message>
@@ -947,58 +1124,58 @@
 <context>
     <name>VideoOutputAddEdit</name>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="143"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="179"/>
         <source>Edit Virtual Camera</source>
         <translation>編輯虛擬攝影機</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="144"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="180"/>
         <source>Add Virtual Camera</source>
         <translation>新增虛擬攝影機</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="169"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="207"/>
         <source>Virtual camera name</source>
         <translation>虛擬攝影機名稱</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="178"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="216"/>
         <source>Add format</source>
         <translation>新增格式</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="188"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="226"/>
         <source>Clear formats</source>
         <translation>清除格式</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="230"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="258"/>
         <source>Can&apos;t edit the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="231"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="259"/>
         <source>Can&apos;t add the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="240"/>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="267"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="268"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="295"/>
         <source>Error editing the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="241"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="269"/>
         <source>Error adding the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="279"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="307"/>
         <source>Error creating the virtual camera</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputAddEdit.qml" line="242"/>
+        <location filename="../qml/VideoOutputAddEdit.qml" line="270"/>
         <source>Camera description and formats can&apos;t be empty.</source>
         <translation>攝影機描述與格式不能留白。</translation>
     </message>
@@ -1039,27 +1216,32 @@
         <translation>虛擬攝影機輸出圖像</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="63"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="65"/>
         <source>Virtual camera default output picture</source>
         <translation>虛擬攝影機預設輸出圖像</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="68"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="71"/>
         <source>Search</source>
         <translation>搜尋</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="91"/>
-        <source>Can&apos;t set virtual camera picture</source>
+        <location filename="../qml/VideoOutputPicture.qml" line="72"/>
+        <source>Search image to use as default output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../qml/VideoOutputPicture.qml" line="95"/>
+        <source>Can&apos;t set virtual camera picture</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputPicture.qml" line="99"/>
         <source>Error Removing Virtual Cameras</source>
         <translation>移除虛擬攝影機時出錯</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputPicture.qml" line="107"/>
+        <location filename="../qml/VideoOutputPicture.qml" line="111"/>
         <source>Please choose an image file</source>
         <translation>請選擇圖像檔</translation>
     </message>
@@ -1067,53 +1249,64 @@
 <context>
     <name>VideoOutputs</name>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="74"/>
+        <location filename="../qml/VideoOutputs.qml" line="86"/>
         <source>The virtual camera is outdated (%1), install the latest version (%2)?</source>
         <translation>虛擬攝影機版本過舊（%1），是否安裝最新版本（%2）？</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="83"/>
-        <location filename="../qml/VideoOutputs.qml" line="242"/>
+        <location filename="../qml/VideoOutputs.qml" line="95"/>
+        <location filename="../qml/VideoOutputs.qml" line="227"/>
         <source>Install</source>
         <translation>安裝</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="98"/>
+        <location filename="../qml/VideoOutputs.qml" line="100"/>
+        <location filename="../qml/VideoOutputs.qml" line="231"/>
+        <source>Install virtual camera</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="111"/>
+        <source>Configure output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoOutputs.qml" line="121"/>
         <source>Add output</source>
         <translation>新增輸出</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="106"/>
+        <location filename="../qml/VideoOutputs.qml" line="129"/>
         <source>Error Creating Virtual Camera</source>
         <translation>建立虛擬攝影機時出錯</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="113"/>
+        <location filename="../qml/VideoOutputs.qml" line="136"/>
         <source>Remove all outputs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="120"/>
+        <location filename="../qml/VideoOutputs.qml" line="143"/>
         <source>Error removing virtual cameras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="125"/>
+        <location filename="../qml/VideoOutputs.qml" line="148"/>
         <source>Error Removing Virtual Cameras</source>
         <translation type="unfinished">移除虛擬攝影機時出錯</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="132"/>
+        <location filename="../qml/VideoOutputs.qml" line="155"/>
         <source>Set output picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="235"/>
+        <location filename="../qml/VideoOutputs.qml" line="220"/>
         <source>The virtual camera is not installed, do you want to install it?</source>
         <translation>虛擬攝影機尚未安裝，您是否要安裝？</translation>
     </message>
     <message>
-        <location filename="../qml/VideoOutputs.qml" line="261"/>
+        <location filename="../qml/VideoOutputs.qml" line="247"/>
         <source>The virtual camera is not supported in this platform</source>
         <translation>在此系統上，虛擬攝影機並不受支援</translation>
     </message>
@@ -1121,44 +1314,64 @@
 <context>
     <name>VideoRecording</name>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="118"/>
+        <location filename="../qml/VideoRecording.qml" line="116"/>
         <source>Videos directory</source>
         <translation>影片資料夾</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <location filename="../qml/VideoRecording.qml" line="127"/>
         <source>Search</source>
         <translation>搜尋</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="136"/>
+        <location filename="../qml/VideoRecording.qml" line="128"/>
+        <source>Search directory to save videos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="137"/>
         <source>Record audio</source>
         <translation>錄製音訊</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="146"/>
+        <location filename="../qml/VideoRecording.qml" line="149"/>
         <source>File format</source>
         <translation>檔案格式</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="175"/>
-        <location filename="../qml/VideoRecording.qml" line="210"/>
-        <location filename="../qml/VideoRecording.qml" line="247"/>
+        <location filename="../qml/VideoRecording.qml" line="180"/>
+        <location filename="../qml/VideoRecording.qml" line="219"/>
+        <location filename="../qml/VideoRecording.qml" line="260"/>
         <source>Configure</source>
         <translation>配置</translation>
     </message>
     <message>
         <location filename="../qml/VideoRecording.qml" line="181"/>
+        <source>Configure file format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="188"/>
         <source>Video codec</source>
         <translation>視訊編解碼器</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="216"/>
+        <location filename="../qml/VideoRecording.qml" line="220"/>
+        <source>Configure video codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="227"/>
         <source>Audio codec</source>
         <translation>音訊編解碼器</translation>
     </message>
     <message>
-        <location filename="../qml/VideoRecording.qml" line="257"/>
+        <location filename="../qml/VideoRecording.qml" line="261"/>
+        <source>Configure audio codec</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/VideoRecording.qml" line="295"/>
         <source>Select the folder to save your videos</source>
         <translation>選擇資料夾，以儲存您的影片</translation>
     </message>
@@ -1171,59 +1384,58 @@
         <translation type="unfinished">scratch 的數量</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Aging/share/qml/main.qml" line="66"/>
         <source>Add dust</source>
         <translation type="unfinished">新增灰塵（dust）</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Blur/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="63"/>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/OilPaint/share/qml/main.qml" line="39"/>
         <source>Radius</source>
         <translation>半徑</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="72"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="288"/>
-        <source>N° of colors</source>
-        <translation type="unfinished">色彩的 N°</translation>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="313"/>
+        <source>Number of colors</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="97"/>
         <source>Color difference</source>
         <translation>色彩差異</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="122"/>
         <source>Show edges</source>
         <translation>顯示邊界</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="187"/>
         <source>Line color</source>
         <translation>線條色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="197"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="201"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="164"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="168"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="217"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="221"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="171"/>
         <source>Scan block</source>
         <translation type="unfinished">掃描區塊（block）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="188"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="263"/>
         <source>Choose a color</source>
         <translation>選擇一個色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="38"/>
         <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="37"/>
         <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="36"/>
         <source>Transform matrix</source>
@@ -1231,194 +1443,284 @@
         <translation>變換矩陣</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="82"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="52"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="43"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="41"/>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="50"/>
+        <source>Column 0, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="62"/>
+        <source>Column 1, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="74"/>
+        <source>Column 2, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="87"/>
+        <source>Column 3, Row 0</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="102"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="100"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="88"/>
+        <source>Column 0, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="100"/>
+        <source>Column 1, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="124"/>
+        <location filename="../../../libAvKys/Plugins/MatrixTransform/share/qml/main.qml" line="112"/>
+        <source>Column 2, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="137"/>
+        <source>Column 3, Row 1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="152"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="151"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="138"/>
+        <source>Column 0, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="164"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="163"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="150"/>
+        <source>Column 1, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="176"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="162"/>
+        <source>Column 2, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ChangeHSL/share/qml/main.qml" line="188"/>
+        <location filename="../../../libAvKys/Plugins/ColorTransform/share/qml/main.qml" line="187"/>
+        <source>Column 3, Row 2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
         <source>Mode</source>
         <translation type="unfinished">模式（mode）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="54"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="56"/>
         <source>Natural</source>
-        <translation type="unfinished">自然（Natural）</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="58"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="60"/>
         <source>Fixed</source>
-        <translation type="unfinished">固定（fixed）</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="67"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="58"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="65"/>
         <source>Symbols</source>
         <translation>符號</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="79"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="85"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="70"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="84"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="90"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="81"/>
         <source>Font</source>
         <translation>字體</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="125"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="526"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="591"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="128"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="559"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="629"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="156"/>
         <source>Search</source>
         <translation>搜尋</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="100"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Search the font to be used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="99"/>
         <source>Hinting</source>
         <translation type="unfinished">提示（Hinting）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="110"/>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="101"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="119"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="110"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="144"/>
         <source>Default</source>
         <translation>預設</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="114"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="114"/>
         <source>No hinting</source>
         <translation>無提示</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="118"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="127"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="118"/>
         <source>Vertical hinting</source>
         <translation>垂直提示</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="131"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="122"/>
         <source>Full hinting</source>
         <translation>完全提示</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="123"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="133"/>
         <source>Style</source>
         <extracomment>Different font rendering strategies</extracomment>
         <translation>風格</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="146"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="148"/>
         <source>Bitmap</source>
         <translation>點陣圖</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="150"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="152"/>
         <source>Device</source>
         <translation>裝置</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="154"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="156"/>
         <source>Outline</source>
         <translation>輪廓</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="158"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="160"/>
         <source>Force outline</source>
         <translation type="unfinished">強制輪廓</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="162"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="164"/>
         <source>Match</source>
         <translation>匹配</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="157"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="168"/>
         <source>Quality</source>
         <translation>品質</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="161"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="172"/>
         <source>Antialias</source>
         <translation>抗鋸齒</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="174"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="165"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="185"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="176"/>
         <source>No antialias</source>
         <translation>無抗鋸齒</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="169"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="189"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="180"/>
         <source>Compatible with OpenGL</source>
         <translation>與 OpenGL 兼容</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="182"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="193"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="184"/>
         <source>Force integer metrics</source>
         <translation type="unfinished">強制整數指標（Force integer metrics）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="186"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="188"/>
         <source>No subpixel antialias</source>
         <translation>無子像素抗鋸齒</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="190"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="201"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="192"/>
         <source>No font merging</source>
         <translation>無字體合併</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="199"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="205"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="211"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="219"/>
         <source>Foreground color</source>
         <translation>前景色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="215"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="220"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="229"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="236"/>
         <source>Background color</source>
         <translation>背景色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="263"/>
         <source>Reversed</source>
         <translation>逆轉</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="246"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="307"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="366"/>
         <source>Please choose a font</source>
         <translation>請選擇一個字體</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="207"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="219"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="227"/>
         <source>Choose the foreground color</source>
         <translation>選擇前景色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="223"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="228"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="172"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="244"/>
         <source>Choose the background color</source>
         <translation>選擇背景色彩</translation>
     </message>
@@ -1429,121 +1731,112 @@
         <translation>大小</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="46"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="47"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="53"/>
         <source>Color</source>
         <translation>色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Cinema/share/qml/main.qml" line="91"/>
         <source>Choose the strips color</source>
         <translation>選擇條紋色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="87"/>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="69"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="114"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="96"/>
         <source>Soft</source>
         <translation type="unfinished">柔和</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ColorFilter/share/qml/main.qml" line="52"/>
         <source>Select the color to filter</source>
         <translation>選擇色彩過濾器</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="41"/>
-        <source>Old color</source>
-        <translation>舊色彩</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="62"/>
-        <source>New color</source>
-        <translation>新色彩</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="51"/>
-        <source>Select the color to replace</source>
-        <translation>選擇替代色彩</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="72"/>
-        <source>Select the new color</source>
-        <translation>選擇新色彩</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="36"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="37"/>
         <source>Color table</source>
         <translation>色彩表</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="48"/>
         <source>Base</source>
         <extracomment>Base color, show the image without modifications</extracomment>
         <translation>基礎色彩（原色）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="52"/>
         <source>Metal</source>
         <translation>金屬</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="57"/>
         <source>Heat</source>
         <extracomment>https://en.wikipedia.org/wiki/Heat_map</extracomment>
         <translation type="unfinished">熱度（熱圖）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="61"/>
         <source>Old Photo</source>
         <translation>舊圖片</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="65"/>
         <source>Red &amp; Green</source>
         <translation>紅、綠</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="70"/>
         <source>Sepia</source>
         <extracomment>https://en.wikipedia.org/wiki/Sepia_(color)</extracomment>
         <translation type="unfinished">紅褐色（Sepia）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="74"/>
         <source>X-Pro</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="76"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="78"/>
         <source>X-Ray</source>
         <translation>X 光</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="80"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="82"/>
         <source>Yellow &amp; Blue</source>
         <translation>黃、藍</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="84"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="483"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="548"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="99"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="86"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="514"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="584"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="112"/>
         <source>Custom</source>
         <translation>自訂</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="107"/>
         <source>Source palette</source>
         <translation>來源調色板</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="134"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="949"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="965"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="110"/>
+        <source>Image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="130"/>
+        <source>Search the image file to use as palette</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorTap/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1022"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="1038"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="244"/>
         <source>Please choose an image file</source>
         <translation>請選擇一個圖片檔</translation>
     </message>
@@ -1554,107 +1847,102 @@
         <translation type="unfinished">卷積矩陣（Convolve matrix）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="173"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="177"/>
         <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="71"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/PrimariesColors/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Saturated/share/qml/main.qml" line="39"/>
         <source>Factor</source>
         <translation type="unfinished">因素（Factor）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="178"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/Convolve/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Emboss/share/qml/main.qml" line="52"/>
         <source>Bias</source>
         <translation type="unfinished">偏差（Bias）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="44"/>
         <source>Grab mode</source>
         <translation>抓取模式</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="55"/>
         <source>Random square</source>
         <translation>隨機矩形</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="56"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="59"/>
         <source>Vertical increase</source>
         <translation>垂直增加</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="60"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="63"/>
         <source>Horizontal increase</source>
         <translation>水平增加</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="64"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="67"/>
         <source>Rings increase</source>
         <translation type="unfinished">環形增加</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="73"/>
         <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="77"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="41"/>
-        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/Pixelate/share/qml/main.qml" line="46"/>
         <source>Block size</source>
         <translation>區塊大小</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="32"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="32"/>
-        <source>N° of frames</source>
-        <translation type="unfinished">幀的 N°</translation>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="94"/>
+        <location filename="../../../libAvKys/Plugins/DelayGrab/share/qml/main.qml" line="98"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="33"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="29"/>
+        <location filename="../../../libAvKys/Plugins/Quark/share/qml/main.qml" line="33"/>
+        <source>Number of frames</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="88"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="93"/>
         <source>Mu</source>
         <extracomment>Mu factor (µ letter from greek), represents the average of a group of values. https://en.wikipedia.org/wiki/Arithmetic_mean</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/Denoise/share/qml/main.qml" line="116"/>
         <source>Sigma</source>
         <extracomment>Sigma factor (σ letter from greek), represents the standard deviation of a group of values. https://en.wikipedia.org/wiki/Standard_deviation</extracomment>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/DesktopCapture/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="66"/>
         <source>Frame rate</source>
         <translation type="unfinished">幀率</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="29"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="64"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="68"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="30"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="129"/>
         <source>Amplitude</source>
         <translation>振幅</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="49"/>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="52"/>
         <source>Frequency</source>
         <translation>頻率</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="61"/>
-        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="66"/>
+        <location filename="../../../libAvKys/Plugins/Distort/share/qml/main.qml" line="70"/>
         <source>Grid size</source>
         <translation>網格大小</translation>
     </message>
@@ -1664,1139 +1952,1378 @@
         <translation>速度</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="91"/>
         <source>Zoom rate</source>
         <translation>縮放比率</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/Dizzy/share/qml/main.qml" line="129"/>
         <source>Strength</source>
         <translation type="unfinished">力量</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="47"/>
         <source>Canny mode</source>
         <extracomment>https://en.wikipedia.org/wiki/Canny_edge_detector</extracomment>
         <translation>Canny 邊緣檢測模式</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="65"/>
         <source>Canny threshold</source>
         <translation>Canny 極限值</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="103"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="76"/>
+        <source>Canny threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="100"/>
+        <source>Canny threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="110"/>
         <source>Equalize</source>
         <extracomment>https://en.wikipedia.org/wiki/Histogram_equalization</extracomment>
         <translation>均衡化（對比度）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="118"/>
+        <location filename="../../../libAvKys/Plugins/Edge/share/qml/main.qml" line="127"/>
         <source>Invert</source>
         <translation>倒置</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="93"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="60"/>
         <source>Haar file</source>
         <extracomment>https://en.wikipedia.org/wiki/Haar-like_feature</extracomment>
         <translation type="unfinished">哈爾檔案（類哈爾之特徵偵測，Haar-like features）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="103"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="69"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="122"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="71"/>
         <source>Eye</source>
         <translation>眼睛</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="107"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="73"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="126"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="75"/>
         <source>Eye glasses</source>
         <translation>眼鏡</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="111"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="77"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="130"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="79"/>
         <source>Frontal face alternative 1</source>
         <translation type="unfinished">正臉替換 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="115"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="81"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="83"/>
         <source>Frontal face alternative 2</source>
         <translation type="unfinished">正臉替換 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="119"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="85"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="138"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="87"/>
         <source>Frontal face alternative 3</source>
         <translation type="unfinished">正臉替換 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="123"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="89"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="91"/>
         <source>Frontal face default</source>
         <translation type="unfinished">正臉預設</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="127"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="146"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="95"/>
         <source>Full body</source>
         <translation>全身</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="131"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="150"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="99"/>
         <source>Left Eye 1</source>
         <translation>左眼 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="135"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="101"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="154"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="103"/>
         <source>Lower body</source>
         <translation>下半身</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="139"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="107"/>
         <source>Eye pair big</source>
         <translation type="unfinished">眼睛配對（大）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="143"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="109"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="111"/>
         <source>Eye pair small</source>
         <translation>眼睛配對（小）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="147"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="113"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="166"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="115"/>
         <source>Left ear</source>
         <translation>左耳</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="117"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="170"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="119"/>
         <source>Left eye 2</source>
         <translation>左眼 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="155"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="174"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="123"/>
         <source>Mouth</source>
         <translation>嘴巴</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="159"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="125"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="178"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="127"/>
         <source>Nose</source>
         <translation>鼻子</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="163"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="129"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="182"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="131"/>
         <source>Right ear</source>
         <translation>右耳</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="167"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="133"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="186"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="135"/>
         <source>Right Eye 1</source>
         <translation>右眼 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="171"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="137"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="139"/>
         <source>Upper body 1</source>
         <translation>上半身</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="175"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="141"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="194"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="143"/>
         <source>Profile face</source>
         <translation>側臉</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="145"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="147"/>
         <source>Right eye 2</source>
         <translation>右眼 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="149"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="202"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="151"/>
         <source>Smile</source>
         <translation>微笑</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="187"/>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="153"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="206"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="155"/>
         <source>Upper body</source>
         <translation>上半身</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="213"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
         <source>Marker type</source>
         <translation>標記類型</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="223"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="246"/>
         <source>Rectangle</source>
         <translation>矩形</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="250"/>
         <source>Ellipse</source>
         <translation>橢圓形</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="231"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="254"/>
         <source>Image</source>
         <translation>圖像</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="235"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="258"/>
         <source>Pixelate</source>
         <translation>像素化</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="239"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="149"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="153"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="74"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="262"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="158"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="162"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="112"/>
         <source>Blur</source>
         <translation>模糊</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="243"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="266"/>
         <source>Blur Outer</source>
         <translation>模糊外部</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="270"/>
         <source>Background Image</source>
         <translation>背景圖片</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="257"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="281"/>
         <source>Marker style</source>
         <translation>標記風格</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="292"/>
         <source>Solid</source>
         <translation>實心</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="271"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="296"/>
         <source>Dash</source>
         <translation>虛線</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="275"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="300"/>
         <source>Dot</source>
         <translation>點</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="279"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="304"/>
         <source>Dash dot</source>
         <translation>虛線與點</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="283"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="308"/>
         <source>Dash dot dot</source>
         <translation>虛線、點、點</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="293"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="319"/>
         <source>Marker color</source>
         <translation>標記色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="310"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="314"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="338"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="342"/>
         <source>Marker width</source>
         <translation>標記寬度</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="326"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="356"/>
         <source>Masks</source>
         <translation>遮罩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="335"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="366"/>
         <source>Angel</source>
         <translation>天使</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="339"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="370"/>
         <source>Bear</source>
         <translation>熊熊</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="343"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="374"/>
         <source>Beaver</source>
         <translation>海/河狸</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="347"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="378"/>
         <source>Cat</source>
         <translation>貓咪</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="351"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="382"/>
         <source>Chicken</source>
         <translation>雞</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="355"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="386"/>
         <source>Cow</source>
         <translation>牛</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="359"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="390"/>
         <source>Devil</source>
         <translation>魔鬼</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="363"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="394"/>
         <source>Dog</source>
         <translation>狗勾</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="367"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="398"/>
         <source>Dalmatian dog</source>
         <translation>點點狗</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="371"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="402"/>
         <source>Happy dog</source>
         <translation>開心的狗勾</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="375"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="406"/>
         <source>Dragon</source>
         <translation>龍</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="379"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="410"/>
         <source>Elephant 1</source>
         <translation>大象 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="383"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="414"/>
         <source>Elephant 2</source>
         <translation>大象 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="387"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="418"/>
         <source>Elk</source>
         <translation>麋鹿</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="391"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="422"/>
         <source>Frog</source>
         <translation>青蛙</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="395"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="426"/>
         <source>Ghost</source>
         <translation>鬼</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="399"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="430"/>
         <source>Giraffe</source>
         <translation>長頸鹿</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="403"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="434"/>
         <source>Gnu</source>
         <translation>牛羚</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="407"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="438"/>
         <source>Goat</source>
         <translation>山羊</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="411"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="442"/>
         <source>Hippo</source>
         <translation>河馬</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="415"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="446"/>
         <source>Horse</source>
         <translation>馬</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="419"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="450"/>
         <source>Gray horse</source>
         <translation>灰馬</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="423"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="454"/>
         <source>Koala</source>
         <translation>無尾熊</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="427"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="458"/>
         <source>Monkey</source>
         <translation>猴子</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="431"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="462"/>
         <source>Gray mouse</source>
         <translation>灰老鼠</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="435"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="466"/>
         <source>White mouse</source>
         <translation>白老鼠</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="439"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="470"/>
         <source>Panda</source>
         <translation>熊貓</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="443"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="474"/>
         <source>Penguin</source>
         <translation>企鵝</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="447"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="478"/>
         <source>Pumpkin 1</source>
         <translation>南瓜 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="451"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="482"/>
         <source>Pumpkin 2</source>
         <translation>南瓜 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="455"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="486"/>
         <source>Raccoon</source>
         <translation>浣熊</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="459"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="490"/>
         <source>Rhino</source>
         <translation>犀牛</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="463"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="494"/>
         <source>Sheep</source>
         <translation>羊咩咩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="467"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="498"/>
         <source>Skull 1</source>
         <translation>骷髏頭 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="471"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="502"/>
         <source>Skull 2</source>
         <translation>骷髏頭 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="475"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
         <source>Triceratops</source>
         <translation>三角龍</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="479"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="510"/>
         <source>Zebra</source>
         <translation>斑馬</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="492"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="524"/>
         <source>Marker picture</source>
         <translation>標記圖像</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="506"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="538"/>
         <source>Replace face with this picture</source>
         <translation>用這張圖換掉臉</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="535"/>
-        <source>Backgrounds</source>
-        <translation>背景</translation>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="561"/>
+        <source>Search the image to put into the detected rectangle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="570"/>
+        <source>Background</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="544"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="682"/>
+        <source>Advanced face area settings for 
+background blur or image below.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="735"/>
+        <source>Horizontal Offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="764"/>
+        <source>Vertical Offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="968"/>
+        <source>Horizontal Radius %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="995"/>
+        <source>Vertical Radius %</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="580"/>
         <source>Black Square</source>
         <translation>黑色矩形</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="557"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="594"/>
         <source>Background picture</source>
         <translation>背景圖像</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="571"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="608"/>
         <source>Replace background with this picture</source>
         <translation>用這張圖換掉背景</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="600"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="604"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <source>Search the image to use as background</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="640"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="644"/>
         <source>Pixel grid size</source>
         <translation>像素網格大小</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="616"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="620"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="658"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="662"/>
         <source>Blur radius</source>
         <translation>模糊半徑</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="631"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="675"/>
         <source>Face Area Settings</source>
         <translation>臉部區域設定</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="638"/>
-        <source>Advanced face area settings for 
-background blur or image below.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="689"/>
-        <source>H-Offset</source>
-        <translation>水平偏移量</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="715"/>
-        <source>V-Offset</source>
-        <translation>垂直偏移量</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="742"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="847"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="794"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="909"/>
         <source>Width Adjust %</source>
         <translation>寬度調整 %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="768"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="873"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="823"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="938"/>
         <source>Height Adjust %</source>
         <translation>高度調整 %</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="795"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="853"/>
         <source>Round Area</source>
         <translation>圓形區域</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="900"/>
-        <source>H-Radius %</source>
-        <translation>水平半徑 %</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="924"/>
-        <source>V-Radius %</source>
-        <translation>垂直半徑 %</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="301"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="327"/>
         <source>Select marker color</source>
         <translation>選擇標記色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="100"/>
         <source>Hard</source>
         <translation type="unfinished">硬</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="111"/>
         <source>Cooling</source>
         <translation type="unfinished">冷卻中</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="132"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="139"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="143"/>
         <source>Dissolve</source>
         <translation type="unfinished">溶解</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="166"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="170"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="88"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="92"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="177"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="181"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="136"/>
+        <location filename="../../../libAvKys/Plugins/Zoom/share/qml/main.qml" line="39"/>
         <source>Zoom</source>
         <translation>縮放</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="136"/>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="183"/>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="99"/>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="66"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="102"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="106"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="92"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="96"/>
+        <location filename="../../../libAvKys/Plugins/Cartoon/share/qml/main.qml" line="142"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="196"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="105"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="68"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="175"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="185"/>
         <source>Threshold</source>
         <translation>極限值</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="211"/>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="122"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="227"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="204"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="214"/>
         <source>Luma threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>亮度極限值</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="237"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="256"/>
         <source>Alpha diff</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>Alpha（透明度）差異</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="265"/>
+        <location filename="../../../libAvKys/Plugins/Fire/share/qml/main.qml" line="287"/>
         <source>Alpha variation</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation>透明度變化</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="45"/>
-        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="49"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="48"/>
+        <location filename="../../../libAvKys/Plugins/FrameOverlap/share/qml/main.qml" line="52"/>
         <source>Stride</source>
         <translation type="unfinished">步幅</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="50"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="61"/>
         <source>Pattern</source>
         <translation type="unfinished">圖案（Pattern）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="59"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="72"/>
         <source>90° Halftone 6x6</source>
         <translation type="unfinished">90° 半色調 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="76"/>
         <source>Cluster 3</source>
         <translation type="unfinished">群集 3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="80"/>
         <source>Cluster 4</source>
         <translation type="unfinished">群集 4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="84"/>
         <source>Cluster 8</source>
         <translation>群集 8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="88"/>
         <source>Lines 4x4</source>
         <translation>線條 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="79"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="92"/>
         <source>Magic 2x2</source>
         <translation>魔法 2x2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="96"/>
         <source>Magic 4x4</source>
         <translation>魔法 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="100"/>
         <source>Ordered 4x4</source>
         <translation type="unfinished">順序 4x4</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="104"/>
         <source>Ordered 6x6</source>
         <translation type="unfinished">順序 6x6</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="95"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="108"/>
         <source>Ordered 8x8</source>
         <translation type="unfinished">順序 8x8</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="134"/>
         <source>Bitmap pattern</source>
         <translation type="unfinished">點陣圖圖形</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="151"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="137"/>
+        <source>Image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="158"/>
+        <source>Search the image to use as pattern</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="167"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="171"/>
         <source>Pattern size</source>
         <translation type="unfinished">圖形大小</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="165"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="169"/>
-        <source>Lightness</source>
-        <translation>亮度</translation>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="184"/>
+        <source>Lightning</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="179"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="183"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="209"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="213"/>
         <source>Slope</source>
         <translation type="unfinished">斜率</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="193"/>
-        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="197"/>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="226"/>
+        <source>Interception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Halftone/share/qml/main.qml" line="230"/>
         <source>Intercept</source>
         <translation type="unfinished">截距</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="63"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="66"/>
         <source>Spiral 1</source>
         <translation>螺旋 1</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="67"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="70"/>
         <source>Spiral 2</source>
         <translation>螺旋 2</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="71"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="74"/>
         <source>Parabola</source>
         <translation>拋物線</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="75"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="78"/>
         <source>Horizontal stripe</source>
         <translation type="unfinished">水平步幅</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="83"/>
         <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="87"/>
+        <location filename="../../../libAvKys/Plugins/Hypnotic/share/qml/main.qml" line="91"/>
         <source>Speed increment</source>
         <translation type="unfinished">速度增量</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Implode/share/qml/main.qml" line="39"/>
         <source>Amount</source>
         <translation>數量</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="93"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="98"/>
         <source>Luma Threshold</source>
         <extracomment>Minimum luminance/light/white level/intensity in a gray or black and white picture. https://en.wikipedia.org/wiki/Luma_(video)</extracomment>
         <translation>亮度極限值</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Life/share/qml/main.qml" line="58"/>
         <source>Choose the automata color</source>
         <extracomment>https://en.wikipedia.org/wiki/Life-like_cellular_automaton</extracomment>
         <translation type="unfinished">選擇自動機（automata）色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="44"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="48"/>
-        <source>N° of drops</source>
-        <translation type="unfinished">水滴的 N°</translation>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="45"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="49"/>
+        <source>Number of drops</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="89"/>
         <source>Select</source>
         <translation>選擇</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="190"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="91"/>
+        <source>Select font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="202"/>
         <source>Cursor color</source>
         <translation>遊標色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="198"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="210"/>
         <source>Choose the cursor color</source>
         <translation>選擇遊標色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="235"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="239"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <source>Minimum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="257"/>
         <source>Min. drop length</source>
         <translation type="unfinished">最小水滴長度</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="249"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="253"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="269"/>
+        <source>Maximum drop length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="273"/>
         <source>Max. drop length</source>
         <translation type="unfinished">最大水滴長度</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="263"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="267"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="285"/>
+        <source>Minimum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="289"/>
         <source>Min. speed</source>
         <translation>最小速度</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="277"/>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="301"/>
+        <source>Maximum speed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="305"/>
         <source>Max. speed</source>
         <translation>最大速度</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="292"/>
+        <location filename="../../../libAvKys/Plugins/Charify/share/qml/main.qml" line="247"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="318"/>
+        <source>Smooth scaling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="334"/>
         <source>Show cursor</source>
         <translation>顯示遊標</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="121"/>
+        <location filename="../../../libAvKys/Plugins/Matrix/share/qml/main.qml" line="350"/>
+        <source>Show rain</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="123"/>
         <source>Video track</source>
         <translation>視訊軌</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="134"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="139"/>
         <source>Audio track</source>
         <translation>音訊軌</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="147"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="155"/>
         <source>Subtitles track</source>
         <translation>字幕軌</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="43"/>
+        <location filename="../../../libAvKys/Plugins/MultiSrc/share/qml/main.qml" line="171"/>
+        <source>Synchronise</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Nervous/share/qml/main.qml" line="46"/>
         <source>Simple</source>
         <translation>簡易</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="45"/>
         <source>Brightness</source>
         <translation>亮度</translation>
     </message>
     <message>
         <location filename="../../../libAvKys/Plugins/Contrast/share/qml/main.qml" line="40"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/Photocopy/share/qml/main.qml" line="70"/>
         <source>Contrast</source>
         <translation>對比度</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="53"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="103"/>
         <source>Soft normal</source>
         <translation type="unfinished">柔和正常</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="57"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="95"/>
         <source>Hard normal</source>
         <translation type="unfinished">堅硬正常</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="61"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="99"/>
         <source>Soft color</source>
         <translation type="unfinished">柔和色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="65"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="91"/>
         <source>Hard color</source>
         <translation type="unfinished">堅硬色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="140"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="231"/>
         <source>Alpha differential</source>
         <extracomment>Alpha channel, also known as the transparency component of a pixel in an image.</extracomment>
         <translation type="unfinished">透明度（alpha）差異</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="155"/>
+        <location filename="../../../libAvKys/Plugins/Radioactive/share/qml/main.qml" line="256"/>
         <source>Radiation color</source>
         <translation type="unfinished">放射性色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="108"/>
         <source>Motion detect</source>
         <translation type="unfinished">動作偵測</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="112"/>
         <source>Rain</source>
         <translation>雨</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="78"/>
-        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="82"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="120"/>
+        <source>&lt;b&gt;General parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="153"/>
         <source>Decay</source>
         <translation>衰變</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="34"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="176"/>
+        <source>&lt;b&gt;Motion detection parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="237"/>
+        <source>&lt;b&gt;Rain parameters&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="247"/>
+        <source>Minimum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="272"/>
+        <source>Maximum drop size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="296"/>
+        <source>Drop thickness</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Ripple/share/qml/main.qml" line="335"/>
+        <source>Drop frequency</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="35"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="39"/>
         <source>Show lines</source>
         <translation>顯示線條</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="48"/>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="52"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="55"/>
         <source>Hide lines</source>
         <translation>隱藏線條</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="67"/>
         <source>Hide color</source>
         <translation>隱藏色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="70"/>
+        <location filename="../../../libAvKys/Plugins/ScanLines/share/qml/main.qml" line="75"/>
         <source>Choose the hide color</source>
         <translation type="unfinished">選擇隱藏色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="45"/>
-        <source>Vertical Sync</source>
-        <translation>垂直同步</translation>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="69"/>
+        <source>Vertical sync</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="108"/>
+        <source>Horizontal offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="134"/>
+        <source>Horizontcal sync factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="173"/>
+        <source>Horizontcal sync smoothness</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scroll/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="199"/>
+        <source>Hue dephasing factor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/AnalogTV/share/qml/main.qml" line="238"/>
         <source>Noise</source>
         <translation type="unfinished">噪點</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="33"/>
-        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="34"/>
+        <location filename="../../../libAvKys/Plugins/Shagadelic/share/qml/main.qml" line="38"/>
         <source>Mask</source>
         <translation type="unfinished">遮罩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Swirl/share/qml/main.qml" line="39"/>
         <source>Degrees</source>
         <translation type="unfinished">角度</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="38"/>
+        <location filename="../../../libAvKys/Plugins/Temperature/share/qml/main.qml" line="39"/>
         <source>Temperature</source>
         <translation>溫度</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="281"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="318"/>
         <source>Video format</source>
         <translation>視訊格式</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="300"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="338"/>
         <source>Resolution</source>
         <translation>解析度</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="319"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="358"/>
         <source>FPS</source>
         <translation>幀率（FPS, frames per second）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="342"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="382"/>
         <source>Reset</source>
         <translation>重設</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="72"/>
+        <location filename="../../../libAvKys/Plugins/VideoCapture/share/qml/main.qml" line="385"/>
+        <source>Reset to default values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="74"/>
         <source>Aspect</source>
         <extracomment>Aspect ratio</extracomment>
         <translation>長寬比</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="647"/>
-        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="806"/>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="108"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="692"/>
+        <location filename="../../../libAvKys/Plugins/FaceDetect/share/qml/main.qml" line="866"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="112"/>
         <source>Scale</source>
         <translation type="unfinished">尺度（Scale）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="144"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="150"/>
         <source>Softness</source>
         <translation type="unfinished">柔和度</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="62"/>
+        <location filename="../../../libAvKys/Plugins/Vignette/share/qml/main.qml" line="63"/>
         <source>Choose the vignette color</source>
         <translation type="unfinished">選擇插圖（vignette）色彩</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="45"/>
         <source>Ripples</source>
         <translation>漣漪</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="127"/>
-        <source>Phase</source>
-        <translation type="unfinished">層次（Phase）</translation>
+        <location filename="../../../libAvKys/Plugins/Warp/share/qml/main.qml" line="82"/>
+        <source>Duration (in seconds)</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="149"/>
+        <location filename="../qml/main.qml" line="189"/>
         <source>Use flash</source>
         <translation type="unfinished">使用閃光（flash）</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="169"/>
+        <location filename="../qml/main.qml" line="212"/>
         <source>Now</source>
         <translation>現在</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="176"/>
+        <location filename="../qml/main.qml" line="219"/>
         <source>%1 seconds</source>
         <translation>%1 秒</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="279"/>
+        <location filename="../qml/main.qml" line="336"/>
+        <location filename="../qml/main.qml" line="339"/>
         <source>Take a photo</source>
         <translation>照相</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="58"/>
+        <location filename="../qml/main.qml" line="57"/>
         <source>%1/Picture %2.%3</source>
         <translation>%1/圖像 %2.%3</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="44"/>
+        <location filename="../qml/main.qml" line="43"/>
         <source>Daily Build</source>
         <translation type="unfinished">每日構建</translation>
     </message>
     <message>
-        <location filename="../qml/main.qml" line="328"/>
+        <location filename="../qml/main.qml" line="182"/>
+        <source>Video effects</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="183"/>
+        <source>Open video effects panel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="193"/>
+        <source>Use flash when taking a photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="206"/>
+        <source>Photo timer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="207"/>
+        <source>The time to wait before the photo is taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="252"/>
+        <source>Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="253"/>
+        <source>Captures a snapshot and copies it into the clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="255"/>
+        <source>Capture Snapshot to Clipboard</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="269"/>
+        <source>Sources and outputs settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="270"/>
+        <source>Open sources and outputs settings menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="310"/>
+        <source>Open last photo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="321"/>
+        <source>Open last photo taken</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="340"/>
+        <source>Image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="343"/>
+        <source>Make a capture and save it to an image file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="344"/>
+        <source>Put %1 in image capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="394"/>
+        <location filename="../qml/main.qml" line="400"/>
         <source>Record video</source>
         <translation>錄影</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="402"/>
+        <location filename="../qml/main.qml" line="395"/>
+        <location filename="../qml/main.qml" line="401"/>
+        <source>Stop video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="398"/>
+        <source>Video capture mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="404"/>
+        <source>Put %1 in video recording mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="406"/>
+        <source>Start recording to a video file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="407"/>
+        <source>Stop current video recording</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="424"/>
+        <source>Open last video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../qml/main.qml" line="436"/>
+        <source>Open last recorded video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="425"/>
         <source>Aspect ratio</source>
         <translation>長寬比</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="180"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="185"/>
         <source>Face bracketing
 duration (seconds)</source>
         <translation type="unfinished">臉部標框
 時長（秒）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="195"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="202"/>
         <source>Face bracket count</source>
         <translation type="unfinished">臉部標框數量</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="210"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="219"/>
         <source>Zoom out rate</source>
         <translation>縮小率</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="225"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="236"/>
         <source>Zoom in rate</source>
         <translation>放大率</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="240"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="252"/>
         <source>Face padding (% of face size)</source>
         <translation>臉部內距（臉大小的幾 %）</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="320"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="270"/>
+        <source>Padding top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="288"/>
+        <source>Padding left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="306"/>
+        <source>Padding right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="323"/>
+        <source>Padding bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="337"/>
         <source>Face margin (% of face size)</source>
         <translation>臉部外距（臉大小的幾 %）</translation>
     </message>
     <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="355"/>
+        <source>Margin top</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="374"/>
+        <source>Margin left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="393"/>
+        <source>Margin right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="410"/>
+        <source>Margin bottom</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="433"/>
         <source>e.g. 16:9, 4:3</source>
         <translation>例如 16:9、4:3</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="434"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="460"/>
         <source>Lock viewport</source>
         <translation>鎖定視口</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="445"/>
+        <location filename="../../../libAvKys/Plugins/FaceTrack/share/qml/main.qml" line="473"/>
         <source>Debug mode</source>
         <translation>除錯模式</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="28"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="29"/>
         <source>Flip horizontally</source>
         <translation>水平翻轉</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="37"/>
+        <location filename="../../../libAvKys/Plugins/Flip/share/qml/main.qml" line="40"/>
         <source>Flip vertically</source>
         <translation>垂直翻轉</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="28"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="42"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="29"/>
         <source>Width</source>
         <translation>寬度</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="32"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="33"/>
         <source>Aspect ratio width</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="42"/>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="55"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="45"/>
         <source>Height</source>
         <translation>高度</translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="46"/>
+        <location filename="../../../libAvKys/Plugins/AspectRatio/share/qml/main.qml" line="49"/>
         <source>Aspect ratio height</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="68"/>
-        <source>Scaling mode</source>
-        <translation>縮放模式</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="76"/>
-        <source>Fast</source>
-        <translation>快速</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="80"/>
-        <source>Linear</source>
-        <translation>線性</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="88"/>
-        <source>Aspect ratio mode</source>
-        <translation>長寬比模式</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="96"/>
-        <source>Ignore</source>
-        <translation>忽略</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="100"/>
-        <source>Keep</source>
-        <translation>保持</translation>
-    </message>
-    <message>
-        <location filename="../../../libAvKys/Plugins/Scale/share/qml/main.qml" line="104"/>
-        <source>Expanding</source>
-        <translation>擴大</translation>
-    </message>
-    <message>
         <location filename="../../../libAvKys/Plugins/Otsu/share/qml/main.qml" line="40"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="111"/>
         <source>Levels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="83"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="85"/>
         <source>Add color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="91"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="93"/>
         <source>Clear all colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="107"/>
+        <location filename="../../../libAvKys/Plugins/FalseColor/share/qml/main.qml" line="109"/>
         <source>Select the color to add</source>
         <extracomment>Select the color to add to the color table</extracomment>
         <translation type="unfinished"></translation>
@@ -2812,19 +3339,146 @@ duration (seconds)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="51"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="52"/>
         <source>Hue</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="74"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="78"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="137"/>
         <source>Saturation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="97"/>
+        <location filename="../../../libAvKys/Plugins/AdjustHSL/share/qml/main.qml" line="104"/>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="162"/>
         <source>Luminance</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ImageSrc/share/qml/main.qml" line="48"/>
+        <source>Force frame rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="42"/>
+        <source>Old color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="52"/>
+        <source>Select the color to replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="65"/>
+        <source>New color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/ColorReplace/share/qml/main.qml" line="75"/>
+        <source>Select the new color</source>
+        <translation type="unfinished">選擇新色彩</translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="40"/>
+        <source>Angle</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Rotate/share/qml/main.qml" line="65"/>
+        <source>Keep resolution</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Opacity/share/qml/main.qml" line="40"/>
+        <source>Opacity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="76"/>
+        <source>&lt;b&gt;Palette&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="85"/>
+        <source>Frame length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="187"/>
+        <source>Hue offset</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="212"/>
+        <source>&lt;b&gt;Shadow&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="221"/>
+        <source>Shadow threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="232"/>
+        <source>Shadow threshold low</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="254"/>
+        <source>Shadow threshold hi</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="261"/>
+        <source>Shadow color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Warhol/share/qml/main.qml" line="271"/>
+        <source>Choose the color of the shadow</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="70"/>
+        <source>&lt;b&gt;X-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="79"/>
+        <source>Amplitude (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="116"/>
+        <source>Frequency (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="153"/>
+        <source>Phase (X)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="189"/>
+        <source>&lt;b&gt;Y-Axis&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="198"/>
+        <source>Amplitude (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="235"/>
+        <source>Frequency (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../../libAvKys/Plugins/Wave/share/qml/main.qml" line="272"/>
+        <source>Phase (Y)</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 </TS>
--- webcamoid-9.0.0.orig/StandAlone/src/CMakeLists.txt
+++ webcamoid-9.0.0/StandAlone/src/CMakeLists.txt
@@ -142,7 +142,6 @@ endif ()
 add_definitions(-DCOMMONS_TARGET="webcamoid"
                 -DCOMMONS_APPNAME="Webcamoid"
                 -DCOMMONS_VERSION="${VERSION}")
-set(QML_IMPORT_PATH ../../libAvKys/Lib/share/qml)
 
 if (APPLE)
     install(TARGETS StandAlone DESTINATION ${CMAKE_INSTALL_PREFIX})
--- webcamoid-9.0.0.orig/StandAlone/src/audiolayer.cpp
+++ webcamoid-9.0.0/StandAlone/src/audiolayer.cpp
@@ -52,7 +52,6 @@ class AudioLayerPrivate
         AkElementPtr m_audioOut {akPluginManager->create<AkElement>("AudioSource/AudioDevice")};
         AkElementPtr m_audioIn {akPluginManager->create<AkElement>("AudioSource/AudioDevice")};
         AkElementPtr m_audioGenerator {akPluginManager->create<AkElement>("AudioSource/AudioGenerator")};
-        AkElementPtr m_audioSwitch {akPluginManager->create<AkElement>("Utils/Multiplex")};
         QMutex m_mutex;
         QVector<int> m_commonSampleRates;
         AkElement::ElementState m_inputState {AkElement::ElementStateNull};
@@ -118,7 +117,11 @@ AudioLayer::AudioLayer(QQmlApplicationEn
         this->d->m_audioInput = QStringList {device};
         this->d->m_inputs = QStringList {DUMMY_INPUT_DEVICE}
                           + this->d->m_audioIn->property("inputs").toStringList();
-        this->d->m_audioIn->link(this->d->m_audioSwitch, Qt::DirectConnection);
+        QObject::connect(this->d->m_audioIn.data(),
+                         SIGNAL(oStream(AkPacket)),
+                         this,
+                         SLOT(sendPacket(AkPacket)),
+                         Qt::DirectConnection);
 
         QObject::connect(this->d->m_audioIn.data(),
                          SIGNAL(inputsChanged(QStringList)),
@@ -132,21 +135,15 @@ AudioLayer::AudioLayer(QQmlApplicationEn
 
     this->d->m_outputCaps = this->outputCaps();
 
-    if (this->d->m_audioSwitch) {
-        this->d->m_audioSwitch->setProperty("outputIndex", 1);
-        QObject::connect(this->d->m_audioSwitch.data(),
+    if (this->d->m_audioGenerator) {
+        this->d->m_audioGenerator->setProperty("waveType", "silence");
+        QObject::connect(this->d->m_audioGenerator.data(),
                          SIGNAL(oStream(AkPacket)),
                          this,
-                         SIGNAL(oStream(AkPacket)),
+                         SLOT(sendPacket(AkPacket)),
                          Qt::DirectConnection);
     }
 
-    if (this->d->m_audioGenerator) {
-        this->d->m_audioGenerator->setProperty("waveType", "silence");
-        this->d->m_audioGenerator->link(this->d->m_audioSwitch,
-                                        Qt::DirectConnection);
-    }
-
     this->d->loadProperties();
 }
 
@@ -157,7 +154,6 @@ AudioLayer::~AudioLayer()
 
     this->d->m_mutex.lock();
     this->d->m_audioOut.clear();
-    this->d->m_audioSwitch.clear();
     this->d->m_mutex.unlock();
 
     delete this->d;
@@ -294,6 +290,7 @@ AkAudioCaps AudioLayer::preferredFormat(
     if (device == DUMMY_INPUT_DEVICE)
         return AkAudioCaps(AkAudioCaps::SampleFormat_s16,
                            AkAudioCaps::Layout_mono,
+                           false,
                            8000);
 
     if (device == this->d->m_input) {
@@ -674,22 +671,20 @@ void AudioLayer::resetOutputLatency()
 
 AkPacket AudioLayer::iStream(const AkPacket &packet)
 {
-    if (packet.caps().mimeType() != "audio/x-raw")
-        return AkPacket();
+    if (packet.caps().type() != AkCaps::CapsAudio)
+        return {};
 
     this->d->m_mutex.lock();
 
     if (this->d->m_audioOut)
-        (*this->d->m_audioOut)(packet);
+        this->d->m_audioOut->iStream(packet);
 
-    if (this->d->m_audioSwitch
-        && this->d->m_audioInput.contains(this->d->m_input)) {
-        (*this->d->m_audioSwitch)(packet);
-    }
+    if (this->d->m_audioInput.contains(this->d->m_input))
+        this->sendPacket(packet);
 
     this->d->m_mutex.unlock();
 
-    return AkPacket();
+    return {};
 }
 
 void AudioLayer::setQmlEngine(QQmlApplicationEngine *engine)
@@ -703,6 +698,13 @@ void AudioLayer::setQmlEngine(QQmlApplic
         engine->rootContext()->setContextProperty("audioLayer", this);
 }
 
+void AudioLayer::sendPacket(const AkPacket &packet)
+{
+    auto _packet = packet;
+    _packet.setIndex(1);
+    emit this->oStream(_packet);
+}
+
 void AudioLayer::privInputsChanged(const QStringList &inputs)
 {
     QStringList ins {DUMMY_INPUT_DEVICE};
--- webcamoid-9.0.0.orig/StandAlone/src/audiolayer.h
+++ webcamoid-9.0.0/StandAlone/src/audiolayer.h
@@ -149,6 +149,7 @@ class AudioLayer: public QObject
         void setQmlEngine(QQmlApplicationEngine *engine=nullptr);
 
     private slots:
+        void sendPacket(const AkPacket &packet);
         void privInputsChanged(const QStringList &inputs);
 };
 
--- webcamoid-9.0.0.orig/StandAlone/src/clioptions.cpp
+++ webcamoid-9.0.0/StandAlone/src/clioptions.cpp
@@ -17,7 +17,7 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QCoreApplication>
+#include <QApplication>
 #include <QSettings>
 #include <QDir>
 #include <ak.h>
@@ -32,6 +32,7 @@ class CliOptionsPrivate
         QCommandLineOption m_pluginPathsOpt {{"p", "paths"}};
         QCommandLineOption m_blackListOpt {{"b", "no-load"}};
         QCommandLineOption m_logFileOpt {"log-file"};
+        QCommandLineOption m_newInstance {"new-instance"};
 
         QString convertToAbsolute(const QString &path) const;
 };
@@ -76,6 +77,10 @@ CliOptions::CliOptions()
     this->d->m_logFileOpt.setValueName(QObject::tr("FILE"));
     this->addOption(this->d->m_logFileOpt);
 
+    this->d->m_newInstance.setDescription(
+                QObject::tr("Open a new instance of %1.").arg(QApplication::applicationName()));
+    this->addOption(this->d->m_newInstance);
+
     this->process(*QCoreApplication::instance());
 
     // Set path for loading user settings.
@@ -124,6 +129,11 @@ QCommandLineOption CliOptions::logFileOp
     return this->d->m_logFileOpt;
 }
 
+QCommandLineOption CliOptions::newInstance() const
+{
+    return this->d->m_newInstance;
+}
+
 QString CliOptionsPrivate::convertToAbsolute(const QString &path) const
 {
     if (!QDir::isRelativePath(path))
--- webcamoid-9.0.0.orig/StandAlone/src/clioptions.h
+++ webcamoid-9.0.0/StandAlone/src/clioptions.h
@@ -35,6 +35,7 @@ class CliOptions: public QCommandLinePar
         QCommandLineOption pluginPathsOpt() const;
         QCommandLineOption blackListOpt() const;
         QCommandLineOption logFileOpt() const;
+        QCommandLineOption newInstance() const;
 
     private:
         CliOptionsPrivate *d;
--- webcamoid-9.0.0.orig/StandAlone/src/main.cpp
+++ webcamoid-9.0.0/StandAlone/src/main.cpp
@@ -30,9 +30,14 @@
 
 int main(int argc, char *argv[])
 {
+    QApplication::setApplicationName(COMMONS_APPNAME);
+    QApplication::setApplicationVersion(COMMONS_VERSION);
+    QApplication::setOrganizationName(COMMONS_APPNAME);
+    QApplication::setOrganizationDomain(QString("%1.com").arg(COMMONS_APPNAME));
     QApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true);
     QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps, true);
     qInstallMessageHandler(MediaTools::messageHandler);
+
     QApplication app(argc, argv);
     CliOptions cliOptions;
 
@@ -44,19 +49,17 @@ int main(int argc, char *argv[])
             MediaTools::setLogFile(logFile);
     }
 
-    QApplication::setApplicationName(COMMONS_APPNAME);
-    QApplication::setApplicationVersion(COMMONS_VERSION);
-    QApplication::setOrganizationName(COMMONS_APPNAME);
-    QApplication::setOrganizationDomain(QString("%1.com").arg(COMMONS_APPNAME));
-
     // Install translations.
     QTranslator translator;
-    translator.load(QLocale::system().name(), ":/Webcamoid/share/ts");
-    QCoreApplication::installTranslator(&translator);
+
+    if (translator.load(QLocale::system().name(), ":/Webcamoid/share/ts"))
+        QCoreApplication::installTranslator(&translator);
 
     // Set theme.
     QQuickStyle::addStylePath(":/Webcamoid/share/themes");
     QQuickStyle::setStyle("WebcamoidTheme");
+
+    // Set fonts
     QDirIterator fontsDirIterator(":/Webcamoid/share/themes/WebcamoidTheme/fonts",
                                   QStringList() << "*.ttf",
                                   QDir::Files
@@ -81,7 +84,11 @@ int main(int argc, char *argv[])
         qputenv("QML_DISABLE_DISTANCEFIELD", "1");
 #endif
 
-    MediaTools mediaTools(cliOptions);
+    MediaTools mediaTools;
+
+    if (!mediaTools.init(cliOptions))
+        return 0;
+
     mediaTools.show();
 
     return QApplication::exec();
--- webcamoid-9.0.0.orig/StandAlone/src/mediatools.cpp
+++ webcamoid-9.0.0/StandAlone/src/mediatools.cpp
@@ -26,8 +26,10 @@
 #include <QQmlApplicationEngine>
 #include <QQmlContext>
 #include <QSettings>
+#include <QSharedMemory>
 #include <QStandardPaths>
 #include <QThread>
+#include <QtConcurrent>
 #include <ak.h>
 #include <akcaps.h>
 #include <akaudiocaps.h>
@@ -51,7 +53,7 @@
 #define COMMONS_PROJECT_DOWNLOADS_URL "https://webcamoid.github.io/#downloads"
 #define COMMONS_PROJECT_ISSUES_URL "https://github.com/webcamoid/webcamoid/issues"
 #define COMMONS_PROJECT_COMMIT_URL "https://github.com/webcamoid/webcamoid/commit"
-#define COMMONS_PROJECT_DONATIONS_URL "https://github.com/webcamoid/webcamoid#donations"
+#define COMMONS_PROJECT_DONATIONS_URL "https://webcamoid.github.io/donations"
 #define COMMONS_COPYRIGHT_NOTICE "Copyright (C) 2011-2022  Gonzalo Exequiel Pedone"
 
 struct LogingOptions
@@ -65,6 +67,12 @@ Q_GLOBAL_STATIC(LogingOptions, globalLog
 class MediaToolsPrivate
 {
     public:
+        MediaTools *self;
+        QSharedMemory m_singleInstanceSM {
+            QString("%1.%2.%3").arg(QApplication::applicationName(),
+                                    QApplication::organizationName(),
+                                    QApplication::organizationDomain())
+        };
         QQmlApplicationEngine *m_engine {nullptr};
         AudioLayerPtr m_audioLayer;
         PluginConfigsPtr m_pluginConfigs;
@@ -76,168 +84,26 @@ class MediaToolsPrivate
         int m_windowWidth {0};
         int m_windowHeight {0};
 
+        explicit MediaToolsPrivate(MediaTools *self);
+        bool isSecondInstance();
+        void hasNewInstance();
         void loadLinks();
         void saveLinks(const AkPluginLinks &links);
 };
 
-MediaTools::MediaTools(const CliOptions &cliOptions, QObject *parent):
+MediaTools::MediaTools(QObject *parent):
     QObject(parent)
 {
-    this->d = new MediaToolsPrivate;
-    Ak::registerTypes();
-    this->d->loadLinks();
-
-    // Initialize environment.
-    this->d->m_engine = new QQmlApplicationEngine();
-    this->d->m_engine->addImageProvider(QLatin1String("icons"),
-                                        new IconsProvider);
-    Ak::setQmlEngine(this->d->m_engine);
-    this->d->m_pluginConfigs =
-            PluginConfigsPtr(new PluginConfigs(cliOptions,
-                                               this->d->m_engine));
-    this->d->m_videoLayer =
-            VideoLayerPtr(new VideoLayer(this->d->m_engine));
-    this->d->m_audioLayer = AudioLayerPtr(new AudioLayer(this->d->m_engine));
-    this->d->m_videoEffects =
-            VideoEffectsPtr(new VideoEffects(this->d->m_engine));
-    this->d->m_recording = RecordingPtr(new Recording(this->d->m_engine));
-    this->d->m_updates = UpdatesPtr(new Updates(this->d->m_engine));
-    this->d->m_downloadManager =
-            DownloadManagerPtr(new DownloadManager(this->d->m_engine));
-    this->d->m_updates->watch("Webcamoid",
-                              COMMONS_VERSION,
-                              "https://api.github.com/repos/webcamoid/webcamoid/releases/latest");
-    this->d->m_updates->watch("VirtualCamera",
-                              this->d->m_videoLayer->currentVCamVersion(),
-                              this->d->m_videoLayer->vcamUpdateUrl());
-    QObject::connect(this->d->m_updates.data(),
-                     &Updates::newVersionAvailable,
-                     this,
-                     [this] (const QString &component,
-                             const QString &latestVersion) {
-        if (component == "VirtualCamera")
-            this->d->m_videoLayer->setLatestVCamVersion(latestVersion);
-    });
-
-    AkElement::link(this->d->m_videoLayer.data(),
-                    this->d->m_videoEffects.data(),
-                    Qt::DirectConnection);
-    AkElement::link(this->d->m_videoLayer.data(),
-                    this->d->m_audioLayer.data(),
-                    Qt::DirectConnection);
-    AkElement::link(this->d->m_videoEffects.data(),
-                    this->d->m_recording.data(),
-                    Qt::DirectConnection);
-    AkElement::link(this->d->m_videoEffects.data(),
-                    this->d->m_videoLayer.data(),
-                    Qt::DirectConnection);
-    AkElement::link(this->d->m_audioLayer.data(),
-                    this->d->m_recording.data(),
-                    Qt::DirectConnection);
-    QObject::connect(this->d->m_videoLayer.data(),
-                     &VideoLayer::stateChanged,
-                     this->d->m_videoEffects.data(),
-                     &VideoEffects::setState);
-    QObject::connect(this->d->m_videoLayer.data(),
-                     &VideoLayer::stateChanged,
-                     this->d->m_audioLayer.data(),
-                     &AudioLayer::setOutputState);
-    QObject::connect(this->d->m_recording.data(),
-                     &Recording::stateChanged,
-                     this->d->m_audioLayer.data(),
-                     &AudioLayer::setInputState);
-    QObject::connect(this->d->m_videoLayer.data(),
-                     &VideoLayer::startVCamDownload,
-                     this,
-                     [this] (const QString &title,
-                             const QString &fromUrl,
-                             const QString &toFile) {
-        this->d->m_downloadManager->clear();
-        this->d->m_downloadManager->enqueue(title, fromUrl, toFile);
-    });
-    QObject::connect(this->d->m_videoLayer.data(),
-                     &VideoLayer::inputAudioCapsChanged,
-                     this->d->m_audioLayer.data(),
-                     [this] (const AkAudioCaps &audioCaps)
-                     {
-                        auto stream = this->d->m_videoLayer->videoInput();
-
-                        if (stream.isEmpty())
-                            this->d->m_audioLayer->resetInput();
-                        else
-                            this->d->m_audioLayer->setInput(stream,
-                                                            this->d->m_videoLayer->description(stream),
-                                                            audioCaps);
-                     });
-    QObject::connect(this->d->m_videoLayer.data(),
-                     &VideoLayer::videoInputChanged,
-                     this->d->m_audioLayer.data(),
-                     [this] (const QString &stream)
-                     {
-                        if (stream.isEmpty())
-                            this->d->m_audioLayer->resetInput();
-                        else
-                            this->d->m_audioLayer->setInput(stream,
-                                                            this->d->m_videoLayer->description(stream),
-                                                            this->d->m_videoLayer->inputAudioCaps());
-                     });
-    QObject::connect(akPluginManager,
-                     &AkPluginManager::pluginsChanged,
-                     this->d->m_videoEffects.data(),
-                     &VideoEffects::updateAvailableEffects);
-    QObject::connect(this->d->m_audioLayer.data(),
-                     &AudioLayer::outputCapsChanged,
-                     this->d->m_recording.data(),
-                     &Recording::setAudioCaps);
-    QObject::connect(this->d->m_videoLayer.data(),
-                     &VideoLayer::inputVideoCapsChanged,
-                     this->d->m_recording.data(),
-                     &Recording::setVideoCaps);
-    QObject::connect(qApp,
-                     &QCoreApplication::aboutToQuit,
-                     this->d->m_videoLayer.data(),
-                     [this] () {
-                        this->d->m_videoLayer->setState(AkElement::ElementStateNull);
-                     });
-    QObject::connect(akPluginManager,
-                     &AkPluginManager::linksChanged,
-                     this,
-                     [this] (const AkPluginLinks &links) {
-                        this->d->saveLinks(links);
-                     });
-    QObject::connect(this->d->m_downloadManager.data(),
-                     &DownloadManager::finished,
-                     this,
-                     [this] (const QString &url) {
-        auto filePath = this->d->m_downloadManager->downloadFile(url);
-        auto status = this->d->m_downloadManager->downloadStatus(url);
-        auto error = this->d->m_downloadManager->downloadErrorString(url);
-        this->d->m_videoLayer->checkVCamDownloadReady(url,
-                                                      filePath,
-                                                      status,
-                                                      error);
-    });
-
-    this->loadConfigs();
-    this->d->m_recording->setVideoCaps(this->d->m_videoLayer->inputVideoCaps());
-    this->d->m_recording->setAudioCaps(this->d->m_audioLayer->outputCaps());
-    auto stream = this->d->m_videoLayer->videoInput();
-
-    if (stream.isEmpty())
-        this->d->m_audioLayer->resetInput();
-    else
-        this->d->m_audioLayer->setInput(stream,
-                                        this->d->m_videoLayer->description(stream),
-                                        this->d->m_videoLayer->inputAudioCaps());
-
-    this->d->m_videoLayer->setLatestVCamVersion(this->d->m_updates->latestVersion("VirtualCamera"));
-    this->d->m_updates->start();
+    this->d = new MediaToolsPrivate(this);
 }
 
 MediaTools::~MediaTools()
 {
     this->saveConfigs();
-    delete this->d->m_engine;
+
+    if (this->d->m_engine)
+        delete this->d->m_engine;
+
     delete this->d;
 }
 
@@ -454,6 +320,168 @@ void MediaTools::messageHandler(QtMsgTyp
     globalLogingOptions->mutex.unlock();
 }
 
+bool MediaTools::init(const CliOptions &cliOptions)
+{
+#if 0
+    if (!cliOptions.isSet(cliOptions.newInstance()))
+        if (this->d->isSecondInstance()) {
+            qInfo() << QString("An instance of %1 is already running").arg(QApplication::applicationName());
+
+            return false;
+        }
+#endif
+
+    Ak::registerTypes();
+    this->d->loadLinks();
+
+    // Initialize environment.
+    this->d->m_engine = new QQmlApplicationEngine();
+    this->d->m_engine->addImageProvider(QLatin1String("icons"),
+                                        new IconsProvider);
+    Ak::setQmlEngine(this->d->m_engine);
+    this->d->m_pluginConfigs =
+            PluginConfigsPtr(new PluginConfigs(cliOptions, this->d->m_engine));
+    this->d->m_videoLayer =
+            VideoLayerPtr(new VideoLayer(this->d->m_engine));
+    this->d->m_audioLayer = AudioLayerPtr(new AudioLayer(this->d->m_engine));
+    this->d->m_videoEffects =
+            VideoEffectsPtr(new VideoEffects(this->d->m_engine));
+    this->d->m_recording = RecordingPtr(new Recording(this->d->m_engine));
+    this->d->m_updates = UpdatesPtr(new Updates(this->d->m_engine));
+    this->d->m_downloadManager =
+            DownloadManagerPtr(new DownloadManager(this->d->m_engine));
+    this->d->m_updates->watch("Webcamoid",
+                              COMMONS_VERSION,
+                              "https://api.github.com/repos/webcamoid/webcamoid/releases/latest");
+    this->d->m_updates->watch("VirtualCamera",
+                              this->d->m_videoLayer->currentVCamVersion(),
+                              this->d->m_videoLayer->vcamUpdateUrl());
+    QObject::connect(this->d->m_updates.data(),
+                     &Updates::newVersionAvailable,
+                     this,
+                     [this] (const QString &component,
+                             const QString &latestVersion) {
+        if (component == "VirtualCamera")
+            this->d->m_videoLayer->setLatestVCamVersion(latestVersion);
+    });
+
+    AkElement::link(this->d->m_videoLayer.data(),
+                    this->d->m_videoEffects.data(),
+                    Qt::DirectConnection);
+    AkElement::link(this->d->m_videoLayer.data(),
+                    this->d->m_audioLayer.data(),
+                    Qt::DirectConnection);
+    AkElement::link(this->d->m_videoEffects.data(),
+                    this->d->m_recording.data(),
+                    Qt::DirectConnection);
+    AkElement::link(this->d->m_videoEffects.data(),
+                    this->d->m_videoLayer.data(),
+                    Qt::DirectConnection);
+    AkElement::link(this->d->m_audioLayer.data(),
+                    this->d->m_recording.data(),
+                    Qt::DirectConnection);
+    QObject::connect(this->d->m_videoLayer.data(),
+                     &VideoLayer::stateChanged,
+                     this->d->m_videoEffects.data(),
+                     &VideoEffects::setState);
+    QObject::connect(this->d->m_videoLayer.data(),
+                     &VideoLayer::stateChanged,
+                     this->d->m_audioLayer.data(),
+                     &AudioLayer::setOutputState);
+    QObject::connect(this->d->m_recording.data(),
+                     &Recording::stateChanged,
+                     this->d->m_audioLayer.data(),
+                     &AudioLayer::setInputState);
+    QObject::connect(this->d->m_videoLayer.data(),
+                     &VideoLayer::startVCamDownload,
+                     this,
+                     [this] (const QString &title,
+                             const QString &fromUrl,
+                             const QString &toFile) {
+        this->d->m_downloadManager->clear();
+        this->d->m_downloadManager->enqueue(title, fromUrl, toFile);
+    });
+    QObject::connect(this->d->m_videoLayer.data(),
+                     &VideoLayer::inputAudioCapsChanged,
+                     this->d->m_audioLayer.data(),
+                     [this] (const AkAudioCaps &audioCaps)
+                     {
+                        auto stream = this->d->m_videoLayer->videoInput();
+
+                        if (stream.isEmpty())
+                            this->d->m_audioLayer->resetInput();
+                        else
+                            this->d->m_audioLayer->setInput(stream,
+                                                            this->d->m_videoLayer->description(stream),
+                                                            audioCaps);
+                     });
+    QObject::connect(this->d->m_videoLayer.data(),
+                     &VideoLayer::videoInputChanged,
+                     this->d->m_audioLayer.data(),
+                     [this] (const QString &stream)
+                     {
+                        if (stream.isEmpty())
+                            this->d->m_audioLayer->resetInput();
+                        else
+                            this->d->m_audioLayer->setInput(stream,
+                                                            this->d->m_videoLayer->description(stream),
+                                                            this->d->m_videoLayer->inputAudioCaps());
+                     });
+    QObject::connect(akPluginManager,
+                     &AkPluginManager::pluginsChanged,
+                     this->d->m_videoEffects.data(),
+                     &VideoEffects::updateAvailableEffects);
+    QObject::connect(this->d->m_audioLayer.data(),
+                     &AudioLayer::outputCapsChanged,
+                     this->d->m_recording.data(),
+                     &Recording::setAudioCaps);
+    QObject::connect(this->d->m_videoLayer.data(),
+                     &VideoLayer::inputVideoCapsChanged,
+                     this->d->m_recording.data(),
+                     &Recording::setVideoCaps);
+    QObject::connect(qApp,
+                     &QCoreApplication::aboutToQuit,
+                     this->d->m_videoLayer.data(),
+                     [this] () {
+                        this->d->m_videoLayer->setState(AkElement::ElementStateNull);
+                     });
+    QObject::connect(akPluginManager,
+                     &AkPluginManager::linksChanged,
+                     this,
+                     [this] (const AkPluginLinks &links) {
+                        this->d->saveLinks(links);
+                     });
+    QObject::connect(this->d->m_downloadManager.data(),
+                     &DownloadManager::finished,
+                     this,
+                     [this] (const QString &url) {
+        auto filePath = this->d->m_downloadManager->downloadFile(url);
+        auto status = this->d->m_downloadManager->downloadStatus(url);
+        auto error = this->d->m_downloadManager->downloadErrorString(url);
+        this->d->m_videoLayer->checkVCamDownloadReady(url,
+                                                      filePath,
+                                                      status,
+                                                      error);
+    });
+
+    this->loadConfigs();
+    this->d->m_recording->setVideoCaps(this->d->m_videoLayer->inputVideoCaps());
+    this->d->m_recording->setAudioCaps(this->d->m_audioLayer->outputCaps());
+    auto stream = this->d->m_videoLayer->videoInput();
+
+    if (stream.isEmpty())
+        this->d->m_audioLayer->resetInput();
+    else
+        this->d->m_audioLayer->setInput(stream,
+                                        this->d->m_videoLayer->description(stream),
+                                        this->d->m_videoLayer->inputAudioCaps());
+
+    this->d->m_videoLayer->setLatestVCamVersion(this->d->m_updates->latestVersion("VirtualCamera"));
+    this->d->m_updates->start();
+
+    return true;
+}
+
 void MediaTools::setWindowWidth(int windowWidth)
 {
     if (this->d->m_windowWidth == windowWidth)
@@ -488,8 +516,8 @@ void MediaTools::loadConfigs()
 
     config.beginGroup("GeneralConfigs");
     auto windowSize = config.value("windowSize", QSize(1024, 600)).toSize();
-    this->d->m_windowWidth = windowSize.width();
-    this->d->m_windowHeight = windowSize.height();
+    this->d->m_windowWidth = qMax(windowSize.width(), 640);
+    this->d->m_windowHeight = qMax(windowSize.height(), 480);
     config.endGroup();
 }
 
@@ -519,6 +547,7 @@ void MediaTools::show()
         AkElement::link(this->d->m_videoEffects.data(),
                         videoDisplay,
                         Qt::DirectConnection);
+
         break;
     }
 
@@ -541,6 +570,68 @@ void MediaTools::restartApp()
         QProcess::startDetached(args.first(), {});
 }
 
+MediaToolsPrivate::MediaToolsPrivate(MediaTools *self):
+    self(self)
+{
+
+}
+
+bool MediaToolsPrivate::isSecondInstance()
+{
+    if (this->m_singleInstanceSM.attach()) {
+        this->m_singleInstanceSM.lock();
+        auto newInstance =
+                reinterpret_cast<bool *>(this->m_singleInstanceSM.data());
+        *newInstance = true;
+        this->m_singleInstanceSM.unlock();
+
+        return true;
+    } else {
+        if (this->m_singleInstanceSM.create(sizeof(bool))) {
+            QtConcurrent::run([this] () {
+                bool run = true;
+                QObject::connect(qApp,
+                                 &QApplication::aboutToQuit,
+                                 [&run]() {
+                    run = false;
+                });
+
+                this->m_singleInstanceSM.lock();
+                auto newInstance =
+                        reinterpret_cast<bool *>(this->m_singleInstanceSM.data());
+                *newInstance = false;
+                this->m_singleInstanceSM.unlock();
+
+                while (run) {
+                    bool hasNewInstance = false;
+                    this->m_singleInstanceSM.lock();
+                    auto newInstance =
+                            reinterpret_cast<bool *>(this->m_singleInstanceSM.data());
+
+                    if (*newInstance) {
+                        hasNewInstance = true;
+                        *newInstance = false;
+                    }
+
+                    this->m_singleInstanceSM.unlock();
+
+                    if (hasNewInstance)
+                        this->hasNewInstance();
+
+                    QThread::msleep(1000);
+                }
+            });
+        }
+    }
+
+    return false;
+}
+
+void MediaToolsPrivate::hasNewInstance()
+{
+    emit self->newInstanceOpened();
+}
+
 void MediaToolsPrivate::loadLinks()
 {
     QSettings config;
--- webcamoid-9.0.0.orig/StandAlone/src/mediatools.h
+++ webcamoid-9.0.0/StandAlone/src/mediatools.h
@@ -81,7 +81,7 @@ class MediaTools: public QObject
                CONSTANT)
 
     public:
-        MediaTools(const CliOptions &cliOptions, QObject *parent=nullptr);
+        MediaTools(QObject *parent=nullptr);
         ~MediaTools();
 
         Q_INVOKABLE int windowWidth() const;
@@ -120,8 +120,10 @@ class MediaTools: public QObject
         void windowWidthChanged(int windowWidth);
         void windowHeightChanged(int windowHeight);
         void interfaceLoaded();
+        void newInstanceOpened();
 
     public slots:
+        bool init(const CliOptions &cliOptions);
         void setWindowWidth(int windowWidth);
         void setWindowHeight(int windowHeight);
         void resetWindowWidth();
--- webcamoid-9.0.0.orig/StandAlone/src/recording.cpp
+++ webcamoid-9.0.0/StandAlone/src/recording.cpp
@@ -18,10 +18,13 @@
  */
 
 #include <QAbstractEventDispatcher>
+#include <QApplication>
+#include <QClipboard>
 #include <QDateTime>
 #include <QDir>
 #include <QFile>
 #include <QImage>
+#include <QImageWriter>
 #include <QMutex>
 #include <QQmlApplicationEngine>
 #include <QQmlContext>
@@ -32,13 +35,20 @@
 #include <QThread>
 #include <QtConcurrent>
 #include <QtGlobal>
+
+#ifdef Q_OS_ANDROID
+#include <QtAndroid>
+#endif
+
 #include <akaudiocaps.h>
 #include <akcaps.h>
+#include <akfrac.h>
 #include <akpacket.h>
 #include <akplugin.h>
 #include <akplugininfo.h>
 #include <akpluginmanager.h>
 #include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "recording.h"
@@ -89,8 +99,10 @@ class RecordingPrivate
         AkElement::ElementState m_state {AkElement::ElementStateNull};
         int m_imageSaveQuality {-1};
         bool m_recordAudio {DEFAULT_RECORD_AUDIO};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 
         explicit RecordingPrivate(Recording *self);
+        static bool canAccessStorage();
         void linksChanged(const AkPluginLinks &links);
         void updateProperties();
         void updatePreviews();
@@ -613,7 +625,7 @@ void Recording::resetVideoCodec()
                                   "defaultCodec",
                                   Q_RETURN_ARG(QString, defaultVideoCodec),
                                   Q_ARG(QString, this->videoFormat()),
-                                  Q_ARG(QString, "video/x-raw"));
+                                  Q_ARG(AkCaps::CapsType, AkCaps::CapsVideo));
 
     this->setVideoCodec(defaultVideoCodec);
 }
@@ -627,7 +639,7 @@ void Recording::resetAudioCodec()
                                   "defaultCodec",
                                   Q_RETURN_ARG(QString, defaultAudioCodec),
                                   Q_ARG(QString, this->videoFormat()),
-                                  Q_ARG(QString, "audio/x-raw"));
+                                  Q_ARG(AkCaps::CapsType, AkCaps::CapsAudio));
 
     this->setAudioCodec(defaultAudioCodec);
 }
@@ -742,12 +754,31 @@ void Recording::resetImageSaveQuality()
 void Recording::takePhoto()
 {
     this->d->m_mutex.lock();
-    this->d->m_photo = this->d->m_curPacket.toImage().copy();
+
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(this->d->m_curPacket);
+    this->d->m_videoConverter.end();
+
+    this->d->m_photo = QImage(src.caps().width(),
+                              src.caps().height(),
+                              QImage::Format_ARGB32);
+    auto lineSize =
+            qMin<size_t>(src.lineSize(0), this->d->m_photo.bytesPerLine());
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = src.constLine(0, y);
+        auto dstLine = this->d->m_photo.scanLine(y);
+        memcpy(dstLine, srcLine, lineSize);
+    }
+
     this->d->m_mutex.unlock();
 }
 
 void Recording::savePhoto(const QString &fileName)
 {
+    if (!this->d->canAccessStorage())
+        return;
+
     QString path = fileName;
     path.replace("file://", "");
 
@@ -761,16 +792,25 @@ void Recording::savePhoto(const QString
     }
 }
 
+bool Recording::copyToClipboard()
+{
+    if (!this->d->m_photo.isNull()) {
+        QApplication::clipboard()->setImage(this->d->m_photo, QClipboard::Clipboard);
+        return true;
+    }
+    return false;
+}
+
 AkPacket Recording::iStream(const AkPacket &packet)
 {
-    if (packet.caps().mimeType() == "video/x-raw") {
+    if (packet.type() == AkPacket::PacketVideo) {
         this->d->m_mutex.lock();
         this->d->m_curPacket = packet;
         this->d->m_mutex.unlock();
     }
 
     if (this->d->m_state == AkElement::ElementStatePlaying)
-        (*this->d->m_record)(packet);
+        this->d->m_record->iStream(packet);
 
     return AkPacket();
 }
@@ -788,16 +828,30 @@ void Recording::setQmlEngine(QQmlApplica
 
 void Recording::thumbnailUpdated(const AkPacket &packet)
 {
-    AkVideoPacket videoPacket(packet);
-    auto thumbnail = videoPacket.toImage();
-
-    if (thumbnail.isNull())
-        return;
-
-    this->d->m_thumbnail = thumbnail;
-    QtConcurrent::run(&this->d->m_threadPool,
-                      this->d,
-                      &RecordingPrivate::thumbnailReady);
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return;
+
+    this->d->m_thumbnail = QImage(src.caps().width(),
+                                  src.caps().height(),
+                                  QImage::Format_ARGB32);
+    auto lineSize =
+            qMin<size_t>(src.lineSize(0), this->d->m_thumbnail.bytesPerLine());
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = src.constLine(0, y);
+        auto dstLine = this->d->m_thumbnail.scanLine(y);
+        memcpy(dstLine, srcLine, lineSize);
+    }
+
+    auto result =
+            QtConcurrent::run(&this->d->m_threadPool,
+                              this->d,
+                              &RecordingPrivate::thumbnailReady);
+    Q_UNUSED(result)
 }
 
 void Recording::mediaLoaded(const QString &media)
@@ -806,7 +860,7 @@ void Recording::mediaLoaded(const QStrin
     QMetaObject::invokeMethod(this->d->m_thumbnailer.data(),
                               "defaultStream",
                               Q_RETURN_ARG(int, videoStream),
-                              Q_ARG(QString, "video/x-raw"));
+                              Q_ARG(AkCaps::CapsType, AkCaps::CapsVideo));
 
     if (videoStream < 0)
         return;
@@ -834,18 +888,85 @@ void Recording::mediaLoaded(const QStrin
 RecordingPrivate::RecordingPrivate(Recording *self):
     self(self)
 {
-    this->m_imageFormats = {
-        {"png", "PNG" },
-        {"jpg", "JPEG"},
-        {"bmp", "BMP" },
-        {"gif", "GIF" },
+    static const QMap<QString, QString> formatsDescription {
+        {"bmp" , "Windows Bitmap (BMP)"                       },
+        {"cur" , "Microsoft Windows Cursor (CUR)"             },
+        {"icns", "Apple Icon Image (ICNS)"                    },
+        {"ico" , "Microsoft Windows Icon (ICO)"               },
+        {"jp2" , "Joint Photographic Experts Group 2000 (JP2)"},
+        {"jpg" , "Joint Photographic Experts Group (JPEG)"    },
+        {"pbm" , "Portable Bitmap (PBM)"                      },
+        {"pgm" , "Portable Graymap (PGM)"                     },
+        {"png" , "Portable Network Graphics (PNG)"            },
+        {"ppm" , "Portable Pixmap (PPM)"                      },
+        {"tiff", "Tagged Image File Format (TIFF)"            },
+        {"wbmp", "Wireless Bitmap (WBMP)"                     },
+        {"webp", "WebP (WEBP)"                                },
+        {"xbm" , "X11 Bitmap (XBM)"                           },
+        {"xpm" , "X11 Pixmap (XPM)"                           },
     };
 
+    static const QMap<QString, QString> formatsMapping {
+        {"jpeg", "jpg" },
+        {"tif" , "tiff"},
+    };
+
+    for (auto &format: QImageWriter::supportedImageFormats()) {
+        QString fmt = format;
+
+        if (formatsMapping.contains(fmt))
+            fmt = formatsMapping[fmt];
+
+        if (this->m_imageFormats.contains(fmt))
+            continue;
+
+        if (formatsDescription.contains(fmt))
+            this->m_imageFormats[fmt] = formatsDescription[fmt];
+        else
+            this->m_imageFormats[fmt] = fmt.toUpper();
+    }
+
     this->m_mediaWriterImpl =
             akPluginManager->defaultPlugin("MultimediaSink/MultiSink/Impl/*",
                                            {"MultiSinkImpl"}).id();
 }
 
+bool RecordingPrivate::canAccessStorage()
+{
+#ifdef Q_OS_ANDROID
+    static bool done = false;
+    static bool result = false;
+
+    if (done)
+        return result;
+
+    QStringList permissions {
+        "android.permission.WRITE_EXTERNAL_STORAGE"
+    };
+    QStringList neededPermissions;
+
+    for (auto &permission: permissions)
+        if (QtAndroid::checkPermission(permission) == QtAndroid::PermissionResult::Denied)
+            neededPermissions << permission;
+
+    if (!neededPermissions.isEmpty()) {
+        auto results = QtAndroid::requestPermissionsSync(neededPermissions);
+
+        for (auto it = results.constBegin(); it != results.constEnd(); it++)
+            if (it.value() == QtAndroid::PermissionResult::Denied) {
+                done = true;
+
+                return false;
+            }
+    }
+
+    done = true;
+    result = true;
+#endif
+
+    return true;
+}
+
 void RecordingPrivate::linksChanged(const AkPluginLinks &links)
 {
     if (!links.contains("MultimediaSink/MultiSink/Impl/*")
@@ -883,6 +1004,9 @@ void RecordingPrivate::updateProperties(
 
 void RecordingPrivate::updatePreviews()
 {
+    if (!this->canAccessStorage())
+        return;
+
     // Update photo preview
 
     QStringList nameFilters;
@@ -904,7 +1028,6 @@ void RecordingPrivate::updatePreviews()
     // Update video preview
 
     nameFilters.clear();
-    QStringList videoFormats;
     QStringList supportedFormats;
     QMetaObject::invokeMethod(this->m_record.data(),
                               "supportedFormats",
@@ -916,14 +1039,14 @@ void RecordingPrivate::updatePreviews()
                                   "supportedCodecs",
                                   Q_RETURN_ARG(QStringList, audioCodecs),
                                   Q_ARG(QString, format),
-                                  Q_ARG(QString, "audio/x-raw"));
+                                  Q_ARG(AkCaps::CapsType, AkCaps::CapsAudio));
 
         QStringList videoCodecs;
         QMetaObject::invokeMethod(this->m_record.data(),
                                   "supportedCodecs",
                                   Q_RETURN_ARG(QStringList, videoCodecs),
                                   Q_ARG(QString, format),
-                                  Q_ARG(QString, "video/x-raw"));
+                                  Q_ARG(AkCaps::CapsType, AkCaps::CapsVideo));
 
         QStringList extensions;
         QMetaObject::invokeMethod(this->m_record.data(),
@@ -973,14 +1096,14 @@ void RecordingPrivate::updateAvailableVi
                                   "supportedCodecs",
                                   Q_RETURN_ARG(QStringList, audioCodecs),
                                   Q_ARG(QString, format),
-                                  Q_ARG(QString, "audio/x-raw"));
+                                  Q_ARG(AkCaps::CapsType, AkCaps::CapsAudio));
 
         QStringList videoCodecs;
         QMetaObject::invokeMethod(this->m_record.data(),
                                   "supportedCodecs",
                                   Q_RETURN_ARG(QStringList, videoCodecs),
                                   Q_ARG(QString, format),
-                                  Q_ARG(QString, "video/x-raw"));
+                                  Q_ARG(AkCaps::CapsType, AkCaps::CapsVideo));
 
         QStringList extensions;
         QMetaObject::invokeMethod(this->m_record.data(),
@@ -1056,7 +1179,7 @@ void RecordingPrivate::updateAvailableVi
                               "supportedCodecs",
                               Q_RETURN_ARG(QStringList, videoCodecs),
                               Q_ARG(QString, this->m_videoFormat),
-                              Q_ARG(QString, "video/x-raw"));
+                              Q_ARG(AkCaps::CapsType, AkCaps::CapsVideo));
 
     if (this->m_availableVideoCodecs != videoCodecs) {
         this->m_availableVideoCodecs = videoCodecs;
@@ -1075,7 +1198,7 @@ void RecordingPrivate::updateAvailableAu
                               "supportedCodecs",
                               Q_RETURN_ARG(QStringList, audioCodecs),
                               Q_ARG(QString, this->m_videoFormat),
-                              Q_ARG(QString, "audio/x-raw"));
+                              Q_ARG(AkCaps::CapsType, AkCaps::CapsAudio));
 
     if (this->m_availableAudioCodecs != audioCodecs) {
         this->m_availableAudioCodecs = audioCodecs;
@@ -1241,7 +1364,7 @@ void RecordingPrivate::updateVideoCodec(
                               "defaultCodec",
                               Q_RETURN_ARG(QString, defaultVideoCodec),
                               Q_ARG(QString, this->m_videoFormat),
-                              Q_ARG(QString, "video/x-raw"));
+                              Q_ARG(AkCaps::CapsType, AkCaps::CapsVideo));
 
     QSettings config;
     config.beginGroup(QString("RecordConfigs_%1").arg(this->m_videoFormat));
@@ -1270,7 +1393,7 @@ void RecordingPrivate::updateAudioCodec(
                               "defaultCodec",
                               Q_RETURN_ARG(QString, defaultAudioCodec),
                               Q_ARG(QString, this->m_videoFormat),
-                              Q_ARG(QString, "audio/x-raw"));
+                              Q_ARG(AkCaps::CapsType, AkCaps::CapsAudio));
 
     QSettings config;
     config.beginGroup(QString("RecordConfigs_%1").arg(this->m_videoFormat));
--- webcamoid-9.0.0.orig/StandAlone/src/recording.h
+++ webcamoid-9.0.0/StandAlone/src/recording.h
@@ -263,6 +263,7 @@ class Recording: public QObject
         void resetImageSaveQuality();
         void takePhoto();
         void savePhoto(const QString &fileName);
+		bool copyToClipboard();
         AkPacket iStream(const AkPacket &packet);
         void setQmlEngine(QQmlApplicationEngine *engine=nullptr);
 
--- webcamoid-9.0.0.orig/StandAlone/src/videodisplay.cpp
+++ webcamoid-9.0.0/StandAlone/src/videodisplay.cpp
@@ -20,6 +20,8 @@
 #include <QMutex>
 #include <QQuickWindow>
 #include <QSGSimpleTextureNode>
+#include <akfrac.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "videodisplay.h"
@@ -27,6 +29,7 @@
 class VideoDisplayPrivate
 {
     public:
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
         QImage m_frame;
         QMutex m_mutex;
         bool m_fillDisplay {false};
@@ -62,9 +65,7 @@ QSGNode *VideoDisplay::updatePaintNode(Q
         return nullptr;
     }
 
-    auto frame = this->d->m_frame.format() == QImage::Format_ARGB32?
-                     this->d->m_frame.copy():
-                     this->d->m_frame.convertToFormat(QImage::Format_ARGB32);
+    auto frame = this->d->m_frame.copy();
     this->d->m_mutex.unlock();
 
     if (this->window()->rendererInterface()->graphicsApi() == QSGRendererInterface::Software) {
@@ -116,8 +117,23 @@ QSGNode *VideoDisplay::updatePaintNode(Q
 
 void VideoDisplay::iStream(const AkPacket &packet)
 {
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
     this->d->m_mutex.lock();
-    this->d->m_frame = AkVideoPacket(packet).toImage().copy();
+    this->d->m_frame = QImage(src.caps().width(),
+                              src.caps().height(),
+                              QImage::Format_ARGB32);
+    auto lineSize =
+            qMin<size_t>(src.lineSize(0), this->d->m_frame.bytesPerLine());
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = src.constLine(0, y);
+        auto dstLine = this->d->m_frame.scanLine(y);
+        memcpy(dstLine, srcLine, lineSize);
+    }
+
     this->d->m_mutex.unlock();
 
     QMetaObject::invokeMethod(this, "update");
--- webcamoid-9.0.0.orig/StandAlone/src/videodisplay.h
+++ webcamoid-9.0.0/StandAlone/src/videodisplay.h
@@ -38,7 +38,7 @@ class VideoDisplay: public QQuickItem
 
     public:
         VideoDisplay(QQuickItem *parent=nullptr);
-        ~VideoDisplay();
+        ~VideoDisplay() override;
 
         Q_INVOKABLE bool fillDisplay() const;
 
@@ -47,7 +47,7 @@ class VideoDisplay: public QQuickItem
 
     protected:
         QSGNode *updatePaintNode(QSGNode *oldNode,
-                                 UpdatePaintNodeData *updatePaintNodeData);
+                                 UpdatePaintNodeData *updatePaintNodeData) override;
 
     signals:
         void fillDisplayChanged();
--- webcamoid-9.0.0.orig/StandAlone/src/videoeffects.cpp
+++ webcamoid-9.0.0/StandAlone/src/videoeffects.cpp
@@ -50,7 +50,6 @@ class VideoEffectsPrivate
         QStringList m_availableEffects;
         QList<VideoEffect> m_effects;
         VideoEffect m_preview;
-        AkElementPtr m_videoMux;
         QMutex m_mutex;
         AkElement::ElementState m_state {AkElement::ElementStateNull};
         bool m_chainEffects {false};
@@ -71,19 +70,6 @@ VideoEffects::VideoEffects(QQmlApplicati
 {
     this->d = new VideoEffectsPrivate(this);
     this->setQmlEngine(engine);
-    this->d->m_videoMux = akPluginManager->create<AkElement>("Utils/Multiplex");
-
-    if (this->d->m_videoMux) {
-        this->d->m_videoMux->setProperty("caps", QVariant::fromValue(AkCaps("video/x-raw")));
-        this->d->m_videoMux->setProperty("outputIndex", 0);
-
-        QObject::connect(this->d->m_videoMux.data(),
-                         SIGNAL(oStream(const AkPacket &)),
-                         this,
-                         SIGNAL(oStream(const AkPacket &)),
-                         Qt::DirectConnection);
-    }
-
     this->updateAvailableEffects();
     this->d->updateChainEffects();
     this->d->updateEffects();
@@ -222,9 +208,10 @@ void VideoEffects::setEffects(const QStr
     // Remove old effects
     if (!this->d->m_effects.isEmpty()) {
         auto lastElement = this->d->m_effects.last();
-
-        if (this->d->m_videoMux)
-            lastElement.element->unlink(this->d->m_videoMux);
+        QObject::disconnect(lastElement.element.data(),
+                            SIGNAL(oStream(AkPacket)),
+                            this,
+                            SLOT(sendPacket(AkPacket)));
 
         if (this->d->m_preview.element)
             lastElement.element->unlink(this->d->m_preview.element);
@@ -249,9 +236,11 @@ void VideoEffects::setEffects(const QStr
     // Link the effects to the outputs
     if (!this->d->m_effects.isEmpty()) {
         auto lastElement = this->d->m_effects.last();
-
-        if (this->d->m_videoMux)
-            lastElement.element->link(this->d->m_videoMux, Qt::DirectConnection);
+        QObject::connect(lastElement.element.data(),
+                         SIGNAL(oStream(AkPacket)),
+                         this,
+                         SLOT(sendPacket(AkPacket)),
+                         Qt::DirectConnection);
 
         if (this->d->m_chainEffects && this->d->m_preview.element)
             lastElement.element->link(this->d->m_preview.element, Qt::DirectConnection);
@@ -401,6 +390,13 @@ void VideoEffects::resetChainEffects()
     this->setChainEffects(false);
 }
 
+void VideoEffects::sendPacket(const AkPacket &packet)
+{
+    auto _packet = packet;
+    _packet.setIndex(0);
+    emit this->oStream(_packet);
+}
+
 void VideoEffects::applyPreview()
 {
     auto state = this->d->m_state;
@@ -414,18 +410,19 @@ void VideoEffects::applyPreview()
 
     if (this->d->m_preview.element) {
         this->d->unlinkPreview();
-
-        if (this->d->m_videoMux)
-            this->d->m_preview.element->link(this->d->m_videoMux,
-                                             Qt::DirectConnection);
+        QObject::connect(this->d->m_preview.element.data(),
+                         SIGNAL(oStream(AkPacket)),
+                         this,
+                         SLOT(sendPacket(AkPacket)),
+                         Qt::DirectConnection);
 
         if (this->d->m_chainEffects) {
             if (!this->d->m_effects.isEmpty()) {
                 auto lastEffect = this->d->m_effects.last();
-
-                if (this->d->m_videoMux)
-                    lastEffect.element->unlink(this->d->m_videoMux);
-
+                QObject::disconnect(lastEffect.element.data(),
+                                    SIGNAL(oStream(AkPacket)),
+                                    this,
+                                    SLOT(sendPacket(AkPacket)));
                 lastEffect.element->link(this->d->m_preview.element,
                                          Qt::DirectConnection);
             }
@@ -479,29 +476,51 @@ void VideoEffects::moveEffect(int from,
     auto prev = this->d->m_effects.value(from - 1);
     auto next = this->d->m_effects.value(from + 1);
 
-    if (!next.element)
-        next.element = this->d->m_videoMux;
-
     if (prev.element) {
         prev.element->unlink(effect.element);
-        prev.element->link(next.element, Qt::DirectConnection);
-    }
 
-    effect.element->unlink(next.element);
+        if (next.element)
+            prev.element->link(next.element, Qt::DirectConnection);
+        else
+            QObject::connect(prev.element.data(),
+                             SIGNAL(oStream(AkPacket)),
+                             this,
+                             SLOT(sendPacket(AkPacket)),
+                             Qt::DirectConnection);
+    }
+
+    if (next.element)
+        effect.element->unlink(next.element);
+    else
+        QObject::disconnect(effect.element.data(),
+                            SIGNAL(oStream(AkPacket)),
+                            this,
+                            SLOT(sendPacket(AkPacket)));
 
     // Reconnect effect.
     prev = this->d->m_effects.value(to - 1);
     next = this->d->m_effects.value(to);
 
-    if (!next.element)
-        next.element = this->d->m_videoMux;
-
     if (prev.element) {
-        prev.element->unlink(next.element);
+        if (next.element)
+            prev.element->unlink(next.element);
+        else
+            QObject::disconnect(prev.element.data(),
+                                SIGNAL(oStream(AkPacket)),
+                                this,
+                                SLOT(sendPacket(AkPacket)));
+
         prev.element->link(effect.element, Qt::DirectConnection);
     }
 
-    effect.element->link(next.element, Qt::DirectConnection);
+    if (next.element)
+        effect.element->link(next.element, Qt::DirectConnection);
+    else
+        QObject::connect(effect.element.data(),
+                         SIGNAL(oStream(AkPacket)),
+                         this,
+                         SLOT(sendPacket(AkPacket)),
+                         Qt::DirectConnection);
 
     // Move the effect in the list.
     this->d->m_effects.move(from, to);
@@ -541,16 +560,27 @@ void VideoEffects::removeEffect(int inde
     auto effect = this->d->m_effects.value(index);
     auto next = this->d->m_effects.value(index + 1);
 
-    if (!next.element)
-        next.element = this->d->m_videoMux;
-
-    effect.element->unlink(next.element);
+    if (next.element)
+        effect.element->unlink(next.element);
+    else
+        QObject::disconnect(effect.element.data(),
+                            SIGNAL(oStream(AkPacket)),
+                            this,
+                            SLOT(sendPacket(AkPacket)));
 
     auto prev = this->d->m_effects.value(index - 1);
 
     if (prev.element) {
         prev.element->unlink(effect.element);
-        prev.element->link(next.element, Qt::DirectConnection);
+
+        if (next.element)
+            prev.element->link(next.element, Qt::DirectConnection);
+        else
+            QObject::connect(prev.element.data(),
+                             SIGNAL(oStream(AkPacket)),
+                             this,
+                             SLOT(sendPacket(AkPacket)),
+                             Qt::DirectConnection);
     }
 
     this->d->m_effects.removeAt(index);
@@ -585,9 +615,11 @@ void VideoEffects::removeAllEffects()
     if (this->d->m_preview.element)
         lastEffect.element->unlink(this->d->m_preview.element);
 
-    // Disconnect video muxer
-    if (this->d->m_videoMux)
-        lastEffect.element->unlink(this->d->m_videoMux);
+    // Disconnect last effect
+    QObject::disconnect(lastEffect.element.data(),
+                        SIGNAL(oStream(AkPacket)),
+                        this,
+                        SLOT(sendPacket(AkPacket)));
 
     this->d->m_effects.clear();
     this->d->m_mutex.unlock();
@@ -631,19 +663,21 @@ void VideoEffects::setQmlEngine(QQmlAppl
 
 AkPacket VideoEffects::iStream(const AkPacket &packet)
 {
+    if (packet.type() != AkPacket::PacketVideo)
+        return {};
+
     this->d->m_mutex.lock();
 
     if (this->d->m_state == AkElement::ElementStatePlaying) {
         if (this->d->m_effects.isEmpty()) {
-            if (this->d->m_videoMux)
-                (*this->d->m_videoMux)(packet);
+            this->sendPacket(packet);
         } else {
-            (*this->d->m_effects.first().element)(packet);
+            this->d->m_effects.first().element->iStream(packet);
         }
 
         if (this->d->m_preview.element
             && (this->d->m_effects.isEmpty() || !this->d->m_chainEffects))
-            (*this->d->m_preview.element)(packet);
+            this->d->m_preview.element->iStream(packet);
     }
 
     this->d->m_mutex.unlock();
--- webcamoid-9.0.0.orig/StandAlone/src/videoeffects.h
+++ webcamoid-9.0.0/StandAlone/src/videoeffects.h
@@ -93,6 +93,7 @@ class VideoEffects: public QObject
         void resetPreview();
         void resetState();
         void resetChainEffects();
+        void sendPacket(const AkPacket &packet);
         void applyPreview();
         void moveEffect(int from, int to);
         void removeEffect(int index);
--- webcamoid-9.0.0.orig/StandAlone/src/videolayer.cpp
+++ webcamoid-9.0.0/StandAlone/src/videolayer.cpp
@@ -20,6 +20,7 @@
 #include <QDir>
 #include <QFile>
 #include <QFileInfo>
+#include <QImageReader>
 #include <QQmlApplicationEngine>
 #include <QQmlContext>
 #include <QQmlProperty>
@@ -40,8 +41,6 @@
 #endif
 
 #include "videolayer.h"
-#include "clioptions.h"
-#include "mediatools.h"
 #include "updates.h"
 
 #define DUMMY_OUTPUT_DEVICE ":dummyout:"
@@ -56,11 +55,14 @@ class VideoLayerPrivate
         QString m_videoInput;
         QStringList m_videoOutput;
         QStringList m_inputs;
+        QMap<QString, QString> m_images;
         QMap<QString, QString> m_streams;
+        QStringList m_supportedImageFormats;
         AkAudioCaps m_inputAudioCaps;
         AkVideoCaps m_inputVideoCaps;
         AkElementPtr m_cameraCapture {akPluginManager->create<AkElement>("VideoSource/CameraCapture")};
         AkElementPtr m_desktopCapture {akPluginManager->create<AkElement>("VideoSource/DesktopCapture")};
+        AkElementPtr m_imageCapture {akPluginManager->create<AkElement>("VideoSource/ImageSrc")};
         AkElementPtr m_uriCapture {akPluginManager->create<AkElement>("MultimediaSource/MultiSrc")};
         AkElementPtr m_cameraOutput {akPluginManager->create<AkElement>("VideoSink/VirtualCamera")};
         QString m_vcamDriver;
@@ -127,6 +129,123 @@ VideoLayer::~VideoLayer()
     delete this->d;
 }
 
+QStringList VideoLayer::videoSourceFileFilters() const
+{
+    static const QMap<QString, QString> formatsDescription {
+        {"3gp" , tr("3GP Video")                            },
+        {"avi" , tr("AVI Video")                            },
+        {"bmp" , tr("Windows Bitmap")                       },
+        {"cur" , tr("Microsoft Windows Cursor")             },
+        //: Adobe FLV Flash video
+        {"flv" , tr("Flash Video")                          },
+        {"gif" , tr("Animated GIF")                         },
+        {"gif" , tr("Graphic Interchange Format")           },
+        {"icns", tr("Apple Icon Image")                     },
+        {"ico" , tr("Microsoft Windows Icon")               },
+        {"jpg" , tr("Joint Photographic Experts Group")     },
+        {"mkv" , tr("MKV Video")                            },
+        {"mng" , tr("Animated PNG")                         },
+        {"mng" , tr("Multiple-image Network Graphics")      },
+        {"mov" , tr("QuickTime Video")                      },
+        {"mp4" , tr("MP4 Video")                            },
+        {"mpg" , tr("MPEG Video")                           },
+        {"ogg" , tr("Ogg Video")                            },
+        {"pbm" , tr("Portable Bitmap")                      },
+        {"pgm" , tr("Portable Graymap")                     },
+        {"png" , tr("Portable Network Graphics")            },
+        {"ppm" , tr("Portable Pixmap")                      },
+        //: Don't translate "RealMedia", leave it as is.
+        {"rm"  , tr("RealMedia Video")                      },
+        {"svg" , tr("Scalable Vector Graphics")             },
+        {"tga" , tr("Truevision TGA")                       },
+        {"tiff", tr("Tagged Image File Format")             },
+        {"vob" , tr("DVD Video")                            },
+        {"wbmp", tr("Wireless Bitmap")                      },
+        {"webm", tr("WebM Video")                           },
+        {"webp", tr("WebP")                                 },
+        //: Also known as WMV, is a video file format.
+        {"wmv" , tr("Windows Media Video")                  },
+        {"xbm" , tr("X11 Bitmap")                           },
+        {"xpm" , tr("X11 Pixmap")                           },
+    };
+
+    static const QMap<QString, QString> formatsMapping {
+        {"jp2" , "jpg" },
+        {"jpeg", "jpg" },
+        {"svgz", "svg" },
+        {"tif" , "tiff"},
+        {"m4v" , "mp4" },
+        {"mpeg", "mpg" },
+    };
+
+    static const QStringList supportedVideoFormats {
+        "3gp",
+        "avi",
+        "flv",
+        "gif",
+        "mkv",
+        "mng",
+        "mov",
+        "mp4",
+        "m4v",
+        "mpg",
+        "mpeg",
+        "ogg",
+        "rm",
+        "vob",
+        "webm",
+        "wmv"
+    };
+
+    auto supportedImageFormats = QImageReader::supportedImageFormats();
+    supportedImageFormats.removeAll("pdf");
+    QStringList supportedFormats = supportedVideoFormats
+                                   + QStringList(supportedImageFormats.begin(),
+                                                 supportedImageFormats.end());
+    QString extensions =
+            "*." + supportedFormats.join(" *.");
+
+    QStringList filters;
+    filters << tr("All Image and Video Files")
+               + QString(" (%1)").arg(extensions);
+
+    QStringList formats;
+
+    for (auto &format: supportedFormats) {
+        QString fmt;
+
+        if (formatsMapping.contains(format))
+            fmt = formatsMapping[format];
+        else
+            fmt = format;
+
+        if (!formats.contains(fmt))
+            formats << fmt;
+    }
+
+    QStringList fileFilters;
+
+    for (auto &format: formats) {
+        QString filter;
+        QStringList extensions = QStringList {format}
+                                 + formatsMapping.keys(format);
+        QString extensionsFilter = "*." + extensions.join(" *.");
+
+        if (formatsDescription.contains(format))
+            filter = format.toUpper() + " - " + formatsDescription[format];
+        else
+            filter = format.toUpper();
+
+        fileFilters << filter + QString(" (%1)").arg(extensionsFilter);
+    }
+
+    fileFilters.sort();
+    filters << fileFilters;
+    filters << tr("All Files") + " (*)";
+
+    return filters;
+}
+
 QString VideoLayer::videoInput() const
 {
     return this->d->m_videoInput;
@@ -229,6 +348,9 @@ VideoLayer::InputType VideoLayer::device
     if (this->d->desktops().contains(device))
         return InputDesktop;
 
+    if (this->d->m_images.contains(device))
+        return InputImage;
+
     if (this->d->m_streams.contains(device))
         return InputStream;
 
@@ -244,6 +366,9 @@ QStringList VideoLayer::devicesByType(In
     case InputDesktop:
         return this->d->desktops();
 
+    case InputImage:
+        return this->d->m_images.keys();
+
     case InputStream:
         return this->d->m_streams.keys();
 
@@ -280,6 +405,9 @@ QString VideoLayer::description(const QS
     if (this->d->desktops().contains(device))
         return this->d->desktopDescription(device);
 
+    if (this->d->m_images.contains(device))
+        return this->d->m_images.value(device);
+
     if (this->d->m_streams.contains(device))
         return this->d->m_streams.value(device);
 
@@ -613,7 +741,8 @@ bool VideoLayer::executeVCamInstaller(co
                                     | QFileDevice::ReadOther
                                     | QFileDevice::ExeOther);
 
-    QtConcurrent::run(&this->d->m_threadPool, [this, installer] () {
+    auto result =
+            QtConcurrent::run(&this->d->m_threadPool, [this, installer] () {
         qDebug() << "Executing installer:" << installer;
         int exitCode = -1;
         QString errorString = "Can't execute installer";
@@ -662,6 +791,7 @@ bool VideoLayer::executeVCamInstaller(co
 
         emit this->vcamInstallFinished(exitCode, errorString);
     });
+    Q_UNUSED(result)
 
     return true;
 }
@@ -700,23 +830,37 @@ void VideoLayer::setInputStream(const QS
 {
     if (stream.isEmpty()
         || description.isEmpty()
-        || this->d->m_streams.value(stream) == description)
+        || this->d->m_streams.value(stream) == description
+        || this->d->m_images.value(stream) == description)
         return;
 
-    this->d->m_streams[stream] = description;
+    QFileInfo fileInfo(stream);
+    auto suffix = fileInfo.suffix().toLower();
+
+    if (fileInfo.exists() && this->d->m_supportedImageFormats.contains(suffix))
+        this->d->m_images[stream] = description;
+    else
+        this->d->m_streams[stream] = description;
+
     this->updateInputs();
-    this->d->saveStreams(this->d->m_streams);
+    auto streams = this->d->m_streams;
+    streams.insert(this->d->m_images);
+    this->d->saveStreams(streams);
 }
 
 void VideoLayer::removeInputStream(const QString &stream)
 {
     if (stream.isEmpty()
-        || !this->d->m_streams.contains(stream))
+        || (!this->d->m_images.contains(stream)
+            && !this->d->m_streams.contains(stream)))
         return;
 
+    this->d->m_images.remove(stream);
     this->d->m_streams.remove(stream);
     this->updateInputs();
-    this->d->saveStreams(this->d->m_streams);
+    auto streams = this->d->m_streams;
+    streams.insert(this->d->m_images);
+    this->d->saveStreams(streams);
 }
 
 void VideoLayer::setVideoInput(const QString &videoInput)
@@ -738,7 +882,6 @@ void VideoLayer::setVideoOutput(const QS
     auto output = videoOutput.value(0);
 
     if (this->d->m_cameraOutput) {
-        auto state = this->d->m_cameraOutput->state();
         this->d->m_cameraOutput->setState(AkElement::ElementStateNull);
 
         if (videoOutput.contains(DUMMY_OUTPUT_DEVICE)) {
@@ -747,7 +890,7 @@ void VideoLayer::setVideoOutput(const QS
             this->d->m_cameraOutput->setProperty("media", output);
 
             if (!output.isEmpty())
-                this->d->m_cameraOutput->setState(state);
+                this->d->m_cameraOutput->setState(this->d->m_state);
         }
     }
 
@@ -767,6 +910,9 @@ void VideoLayer::setState(AkElement::Ele
         if (this->d->m_desktopCapture)
             this->d->m_desktopCapture->setState(AkElement::ElementStateNull);
 
+        if (this->d->m_imageCapture)
+            this->d->m_imageCapture->setState(AkElement::ElementStateNull);
+
         if (this->d->m_uriCapture)
             this->d->m_uriCapture->setState(AkElement::ElementStateNull);
 
@@ -775,10 +921,24 @@ void VideoLayer::setState(AkElement::Ele
         if (this->d->m_cameraCapture)
             this->d->m_cameraCapture->setState(AkElement::ElementStateNull);
 
+        if (this->d->m_imageCapture)
+            this->d->m_imageCapture->setState(AkElement::ElementStateNull);
+
         if (this->d->m_uriCapture)
             this->d->m_uriCapture->setState(AkElement::ElementStateNull);
 
         source = this->d->m_desktopCapture;
+    } else if (this->d->m_images.contains(this->d->m_videoInput)) {
+        if (this->d->m_cameraCapture)
+            this->d->m_cameraCapture->setState(AkElement::ElementStateNull);
+
+        if (this->d->m_desktopCapture)
+            this->d->m_desktopCapture->setState(AkElement::ElementStateNull);
+
+        if (this->d->m_uriCapture)
+            this->d->m_uriCapture->setState(AkElement::ElementStateNull);
+
+        source = this->d->m_imageCapture;
     } else if (this->d->m_streams.contains(this->d->m_videoInput)) {
         if (this->d->m_cameraCapture)
             this->d->m_cameraCapture->setState(AkElement::ElementStateNull);
@@ -786,6 +946,9 @@ void VideoLayer::setState(AkElement::Ele
         if (this->d->m_desktopCapture)
             this->d->m_desktopCapture->setState(AkElement::ElementStateNull);
 
+        if (this->d->m_imageCapture)
+            this->d->m_imageCapture->setState(AkElement::ElementStateNull);
+
         source = this->d->m_uriCapture;
     }
 
@@ -932,11 +1095,11 @@ void VideoLayer::updateCaps()
             QMetaObject::invokeMethod(source.data(),
                                       "defaultStream",
                                       Q_RETURN_ARG(int, audioStream),
-                                      Q_ARG(QString, "audio/x-raw"));
+                                      Q_ARG(AkCaps::CapsType, AkCaps::CapsAudio));
             QMetaObject::invokeMethod(source.data(),
                                       "defaultStream",
                                       Q_RETURN_ARG(int, videoStream),
-                                      Q_ARG(QString, "video/x-raw"));
+                                      Q_ARG(AkCaps::CapsType, AkCaps::CapsVideo));
 
             // Read streams caps.
             if (audioStream >= 0)
@@ -958,9 +1121,9 @@ void VideoLayer::updateCaps()
                                           Q_RETURN_ARG(AkCaps, caps),
                                           Q_ARG(int, stream));
 
-                if (caps.mimeType() == "audio/x-raw")
+                if (caps.type() == AkCaps::CapsAudio)
                     audioCaps = caps;
-                else if (caps.mimeType() == "video/x-raw")
+                else if (caps.type() == AkCaps::CapsVideo)
                     videoCaps = caps;
             }
         }
@@ -987,41 +1150,18 @@ void VideoLayer::updateCaps()
 void VideoLayer::updateInputs()
 {
     QStringList inputs;
-    QMap<QString, QString> descriptions;
 
     // Read cameras
     auto cameras = this->d->cameras();
     inputs << cameras;
 
-    for (auto &camera: cameras) {
-        QString description;
-        QMetaObject::invokeMethod(this->d->m_cameraCapture.data(),
-                                  "description",
-                                  Q_RETURN_ARG(QString, description),
-                                  Q_ARG(QString, camera));
-        descriptions[camera] = description;
-    }
-
     // Read desktops
     auto desktops = this->d->desktops();
     inputs << desktops;
 
-    for (auto &desktop: desktops) {
-        QString description;
-        QMetaObject::invokeMethod(this->d->m_desktopCapture.data(),
-                                  "description",
-                                  Q_RETURN_ARG(QString, description),
-                                  Q_ARG(QString, desktop));
-        descriptions[desktop] = description;
-    }
-
     // Read streams
-    inputs << this->d->m_streams.keys();
-
-    for (auto it = this->d->m_streams.begin();
-         it != this->d->m_streams.end();
-         it++)
-        descriptions[it.key()] = it.value();
+    inputs << this->d->m_images.keys()
+           << this->d->m_streams.keys();
 
     // Remove outputs to prevent self blocking.
     if (this->d->m_cameraOutput && !this->d->m_outputsAsInputs) {
@@ -1108,10 +1248,26 @@ void VideoLayerPrivate::connectSignals()
                          SLOT(updateCaps()));
     }
 
+    if (this->m_imageCapture) {
+        QObject::connect(this->m_imageCapture.data(),
+                         SIGNAL(oStream(AkPacket)),
+                         self,
+                         SIGNAL(oStream(AkPacket)),
+                         Qt::DirectConnection);
+        QObject::connect(this->m_imageCapture.data(),
+                         SIGNAL(error(QString)),
+                         self,
+                         SIGNAL(inputErrorChanged(QString)));
+        QObject::connect(this->m_imageCapture.data(),
+                         SIGNAL(streamsChanged(QList<int>)),
+                         self,
+                         SLOT(updateCaps()));
+        this->m_supportedImageFormats =
+                this->m_imageCapture->property("supportedFormats").toStringList();
+    }
+
     if (this->m_uriCapture) {
-        this->m_uriCapture->setProperty("objectName", "uriCapture");
         this->m_uriCapture->setProperty("loop", true);
-        this->m_uriCapture->setProperty("audioAlign", true);
 
         QObject::connect(this->m_uriCapture.data(),
                          SIGNAL(oStream(AkPacket)),
@@ -1130,11 +1286,6 @@ void VideoLayerPrivate::connectSignals()
 
     if (this->m_cameraOutput) {
         QObject::connect(this->m_cameraOutput.data(),
-                         SIGNAL(stateChanged(AkElement::ElementState)),
-                         self,
-                         SIGNAL(stateChanged(AkElement::ElementState)),
-                         Qt::DirectConnection);
-        QObject::connect(this->m_cameraOutput.data(),
                          SIGNAL(mediasChanged(QStringList)),
                          self,
                          SIGNAL(outputsChanged(QStringList)));
@@ -1166,6 +1317,9 @@ AkElementPtr VideoLayerPrivate::sourceEl
     if (this->desktops().contains(stream))
         return this->m_desktopCapture;
 
+    if (this->m_images.contains(stream))
+        return this->m_imageCapture;
+
     if (this->m_streams.contains(stream))
         return this->m_uriCapture;
 
@@ -1180,6 +1334,9 @@ QString VideoLayerPrivate::sourceId(cons
     if (this->desktops().contains(stream))
         return {"VideoSource/DesktopCapture"};
 
+    if (this->m_images.contains(stream))
+        return {"VideoSource/ImageSrc"};
+
     if (this->m_streams.contains(stream))
         return {"MultimediaSource/MultiSrc"};
 
@@ -1305,7 +1462,14 @@ void VideoLayerPrivate::loadProperties()
         config.setArrayIndex(i);
         auto uri = config.value("uri").toString();
         auto description = config.value("description").toString();
-        this->m_streams[uri] = description;
+
+        QFileInfo fileInfo(uri);
+        auto suffix = fileInfo.suffix().toLower();
+
+        if (fileInfo.exists() && this->m_supportedImageFormats.contains(suffix))
+            this->m_images[uri] = description;
+        else
+            this->m_streams[uri] = description;
     }
 
     config.endArray();
--- webcamoid-9.0.0.orig/StandAlone/src/videolayer.h
+++ webcamoid-9.0.0/StandAlone/src/videolayer.h
@@ -45,6 +45,9 @@ class VideoLayer: public QObject
     Q_PROPERTY(QString outputError
                READ outputError
                NOTIFY outputErrorChanged)
+    Q_PROPERTY(QStringList videoSourceFileFilters
+               READ videoSourceFileFilters
+               CONSTANT)
     Q_PROPERTY(QString videoInput
                READ videoInput
                WRITE setVideoInput
@@ -131,6 +134,7 @@ class VideoLayer: public QObject
             InputUnknown,
             InputCamera,
             InputDesktop,
+            InputImage,
             InputStream
         };
         enum OutputType {
@@ -149,6 +153,7 @@ class VideoLayer: public QObject
                    QObject *parent=nullptr);
         ~VideoLayer();
 
+        Q_INVOKABLE QStringList videoSourceFileFilters() const;
         Q_INVOKABLE QString videoInput() const;
         Q_INVOKABLE QStringList videoOutput() const;
         Q_INVOKABLE QStringList inputs() const;
@@ -257,7 +262,7 @@ class VideoLayer: public QObject
         void saveVirtualCameraRootMethod(const QString &rootMethod);
         AkPacket iStream(const AkPacket &packet);
 
-        friend VideoLayerPrivate;
+        friend class VideoLayerPrivate;
 };
 
 Q_DECLARE_METATYPE(VideoLayer::InputType)
--- /dev/null
+++ webcamoid-9.0.0/io.github.webcamoid.Webcamoid.metainfo.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<component type="desktop">
+    <id>io.github.webcamoid.Webcamoid</id>
+    <name>Webcamoid</name>
+    <summary>Take photos and record videos with your webcam</summary>
+    <summary xml:lang="ca">Fer fotos i gravar vídeos amb la seva webcam</summary>
+    <summary xml:lang="de">Maak foto's en video's opnemen met uw webcam</summary>
+    <summary xml:lang="el">Τραβήξτε φωτογραφίες και εγγραφή βίντεο με την κάμερα σας</summary>
+    <summary xml:lang="es">Tome fotos y grabe videos con su cámara web</summary>
+    <summary xml:lang="fr">Prenez des photos et enregistrer des vidéos avec votre webcam</summary>
+    <summary xml:lang="gl">Facer fotos e gravar vídeos coa súa cámara web</summary>
+    <summary xml:lang="it">Scatta foto e registrare video con la tua webcam</summary>
+    <summary xml:lang="ja">ウェブカメラで写真や記録ビデオを撮影</summary>
+    <summary xml:lang="ko">웹캠으로 사진과 기록 비디오를 촬영</summary>
+    <summary xml:lang="pt">Tirar fotos e gravar vídeos com sua webcam</summary>
+    <summary xml:lang="ru">Возьмите фотографии и записывать видео с веб-камеры</summary>
+    <summary xml:lang="zh_CN">拍摄照片和录制视频与您的摄像头</summary>
+    <summary xml:lang="zh_TW">拍攝照片和錄製視頻與您的攝像頭</summary>
+    <launchable type="desktop-id">webcamoid.desktop</launchable>
+    <developer_name>Gonzalo Exequiel Pedone</developer_name>
+    <description>
+        <p>
+            Webcamoid is a full featured and multiplatform webcam suite.
+        </p>
+        <ul>
+            <li>Cross-platform (GNU/Linux, Mac, Windows)</li>
+            <li>Take pictures and record videos with the webcam</li>
+            <li>Manages multiple webcams</li>
+            <li>Written in C++ and Qt</li>
+            <li>Custom controls for each webcam</li>
+            <li>Add funny effects to the webcam</li>
+            <li>+60 effects available</li>
+            <li>Translated to many languages.</li>
+            <li>Use custom network and local files as capture devices</li>
+            <li>Capture from desktop</li>
+            <li>Many recording formats</li>
+            <li>Virtual webcam support for feeding other programs</li>
+        </ul>
+    </description>
+    <keywords>
+        <keyword>webcam</keyword>
+        <keyword>desktop</keyword>
+        <keyword>record</keyword>
+        <keyword>capture</keyword>
+    </keywords>
+    <metadata_license>CC0-1.0</metadata_license>
+    <project_license>GPL-3.0-or-later</project_license>
+    <url type="bugtracker">https://github.com/webcamoid/webcamoid/issues</url>
+    <url type="donation">https://webcamoid.github.io/donations</url>
+    <url type="help">https://github.com/webcamoid/webcamoid/wiki</url>
+    <url type="homepage">https://webcamoid.github.io/</url>
+    <translation type="qt">Webcamoid</translation>
+    <project_group>none</project_group>
+    <screenshots>
+        <screenshot type="default">
+            <caption>Simple and intuitive</caption>
+            <image>https://webcamoid.github.io/theme/images/screenshots/Main.png</image>
+        </screenshot>
+        <screenshot>
+            <caption>Take pictures and record videos</caption>
+            <image>https://webcamoid.github.io/theme/images/screenshots/Recording.png</image>
+        </screenshot>
+        <screenshot>
+            <caption>Apply funny effects</caption>
+            <image>https://webcamoid.github.io/theme/images/screenshots/Effects.png</image>
+        </screenshot>
+        <screenshot>
+            <caption>Capture from desktop</caption>
+            <image>https://webcamoid.github.io/theme/images/screenshots/DesktopCapture.png</image>
+        </screenshot>
+        <screenshot>
+            <caption>Create a virtual webcam</caption>
+            <image>https://webcamoid.github.io/theme/images/screenshots/VirtualCamera.png</image>
+        </screenshot>
+    </screenshots>
+    <update_contact>hipersayan.x_AT_gmail_com</update_contact>
+    <content_rating type="oars-1.1" />
+</component>
--- webcamoid-9.0.0.orig/libAvKys/Lib/AvKys.qrc
+++ webcamoid-9.0.0/libAvKys/Lib/AvKys.qrc
@@ -1,6 +1,7 @@
 <RCC>
     <qresource prefix="/Ak">
         <file>share/qml/AkControls/ColorButton.qml</file>
+        <file>share/qml/AkControls/ImageButton.qml</file>
         <file>share/qml/AkControls/qmldir</file>
     </qresource>
 </RCC>
--- webcamoid-9.0.0.orig/libAvKys/Lib/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Lib/CMakeLists.txt
@@ -47,7 +47,15 @@ add_library(avkys SHARED
             src/akaudiopacket.h
             src/akcaps.cpp
             src/akcaps.h
+            src/akcolorcomponent.cpp
+            src/akcolorcomponent.h
+            src/akcolorplane.cpp
+            src/akcolorplane.h
             src/akcommons.h
+            src/akcompressedvideocaps.cpp
+            src/akcompressedvideocaps.h
+            src/akcompressedvideopacket.cpp
+            src/akcompressedvideopacket.h
             src/akelement.cpp
             src/akelement.h
             src/akfrac.cpp
@@ -56,27 +64,39 @@ add_library(avkys SHARED
             src/akmultimediasourceelement.h
             src/akpacket.cpp
             src/akpacket.h
+            src/akpacketbase.cpp
+            src/akpacketbase.h
             src/akplugin.h
             src/akplugininfo.cpp
             src/akplugininfo.h
             src/akpluginmanager.cpp
             src/akpluginmanager.h
+            src/aksubtitlecaps.cpp
+            src/aksubtitlecaps.h
+            src/aksubtitlepacket.cpp
+            src/aksubtitlepacket.h
             src/akunit.cpp
             src/akunit.h
             src/akvideocaps.cpp
             src/akvideocaps.h
+            src/akvideoconverter.cpp
+            src/akvideoconverter.h
+            src/akvideoformatspec.cpp
+            src/akvideoformatspec.h
+            src/akvideomixer.cpp
+            src/akvideomixer.h
             src/akvideopacket.cpp
             src/akvideopacket.h
             src/qml/akcolorizedimage.cpp
             src/qml/akcolorizedimage.h
-            src/qml/akutils.cpp
-            src/qml/akutils.h
             src/qml/akpalette.cpp
             src/qml/akpalette.h
             src/qml/akpalettegroup.cpp
             src/qml/akpalettegroup.h
             src/qml/aktheme.cpp
             src/qml/aktheme.h
+            src/qml/akutils.cpp
+            src/qml/akutils.h
             AvKys.qrc)
 
 if (UNIX AND NOT ANDROID AND NOT APPLE)
--- webcamoid-9.0.0.orig/libAvKys/Lib/share/qml/AkControls/ColorButton.qml
+++ webcamoid-9.0.0/libAvKys/Lib/share/qml/AkControls/ColorButton.qml
@@ -108,14 +108,10 @@ AbstractButton {
             when: !control.enabled
 
             PropertyChanges {
-                target: iconLabel
+                target: colorText
                 color: control.disabledButtonText
             }
             PropertyChanges {
-                target: buttonCheckableIndicator
-                color: control.disabledDark
-            }
-            PropertyChanges {
                 target: buttonRectangle
                 border.color: control.disabledDark
                 color: control.disabledButton
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/share/qml/AkControls/ImageButton.qml
@@ -0,0 +1,164 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+import QtQuick 2.12
+import QtQuick.Controls 2.5
+import Ak 1.0
+
+AbstractButton {
+    id: control
+    font.bold: true
+    implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+                            implicitContentWidth + leftPadding + rightPadding)
+    implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+                             implicitContentHeight + topPadding + bottomPadding)
+    padding: 0
+    spacing: 0
+    hoverEnabled: true
+
+    property string image: ""
+    property alias status: buttonImage.status
+    property alias fillMode: buttonImage.fillMode
+    property alias cache: buttonImage.cache
+    property bool highlighted: false
+    readonly property int animationTime: 200
+    readonly property color activeButton: AkTheme.palette.active.button
+    readonly property color activeDark: AkTheme.palette.active.dark
+    readonly property color activeHighlight: AkTheme.palette.active.highlight
+    readonly property color activeHighlightedText: AkTheme.palette.active.highlightedText
+    readonly property color activeLight: AkTheme.palette.active.light
+    readonly property color activeMid: AkTheme.palette.active.mid
+    readonly property color activeWindow: AkTheme.palette.active.window
+    readonly property color disabledButton: AkTheme.palette.disabled.button
+    readonly property color disabledButtonText: AkTheme.palette.disabled.buttonText
+    readonly property color disabledDark: AkTheme.palette.disabled.dark
+
+    contentItem: Item {
+        id: buttonContent
+        implicitWidth: back.implicitWidth
+        implicitHeight: back.implicitHeight
+
+        Rectangle {
+            id: buttonImageHighlight
+            color: "white"
+            opacity: 0
+            anchors.fill: parent
+        }
+        Rectangle {
+            id: buttonRectangle
+            anchors.fill: parent
+            border.width:
+                control.highlighted || control.checkable?
+                    AkUnit.create(2 * AkTheme.controlScale, "dp").pixels:
+                    AkUnit.create(1 * AkTheme.controlScale, "dp").pixels
+            border.color:
+                control.checkable && control.checked?
+                    control.activeMid:
+                control.highlighted?
+                    control.activeDark:
+                    "transparent"
+            color: "transparent"
+        }
+    }
+    background: Item {
+        id: back
+        implicitWidth: AkUnit.create(32 * AkTheme.controlScale, "dp").pixels
+        implicitHeight: AkUnit.create(32 * AkTheme.controlScale, "dp").pixels
+
+        AkColorizedImage {
+            id: buttonImage
+            source: control.icon.source
+            color: "gray"
+            colorize: !control.enabled
+            visible: status == Image.Ready
+            asynchronous: true
+            fillMode: AkColorizedImage.PreserveAspectFit
+            mipmap: true
+            smooth: true
+            anchors.fill: parent
+        }
+    }
+
+    states: [
+        State {
+            name: "Hovered"
+            when: control.enabled
+                  && control.hovered
+                  && !(control.activeFocus || control.visualFocus)
+                  && !control.pressed
+
+            PropertyChanges {
+                target: buttonImageHighlight
+                opacity: 0.1
+            }
+        },
+        State {
+            name: "Focused"
+            when: control.enabled
+                  && (control.activeFocus || control.visualFocus)
+                  && !control.pressed
+
+            PropertyChanges {
+                target: buttonImageHighlight
+                opacity: 0.2
+            }
+            PropertyChanges {
+                target: buttonRectangle
+                border.width:
+                    AkUnit.create(2 * AkTheme.controlScale, "dp").pixels
+                border.color:
+                    control.checkable && !control.checked?
+                        AkTheme.constShade(control.activeHighlight, -0.2):
+                        control.activeHighlight
+            }
+        },
+        State {
+            name: "Pressed"
+            when: control.enabled
+                  && control.pressed
+
+            PropertyChanges {
+                target: buttonImageHighlight
+                opacity: 0.3
+            }
+            PropertyChanges {
+                target: buttonRectangle
+                border.width:
+                    AkUnit.create(2 * AkTheme.controlScale, "dp").pixels
+                border.color:
+                    control.checkable && !control.checked?
+                        AkTheme.constShade(control.activeHighlight, -0.2):
+                        control.activeHighlight
+            }
+        }
+    ]
+
+    transitions: Transition {
+        PropertyAnimation {
+            target: buttonRectangle
+            properties: "color,border.color,border.width"
+            duration: control.animationTime
+        }
+        PropertyAnimation {
+            target: buttonImageHighlight
+            properties: "opacity"
+            duration: control.animationTime
+        }
+    }
+}
--- webcamoid-9.0.0.orig/libAvKys/Lib/share/qml/AkControls/qmldir
+++ webcamoid-9.0.0/libAvKys/Lib/share/qml/AkControls/qmldir
@@ -1,6 +1,7 @@
 module AkControls
 
 ColorButton 1.0 ColorButton.qml
+ImageButton 1.0 ImageButton.qml
 
 depends QtQuick          2.12
 depends QtQuick.Controls 2.5
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/ak.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/ak.cpp
@@ -30,15 +30,25 @@
 
 #include "ak.h"
 #include "akaudiocaps.h"
+#include "akaudioconverter.h"
 #include "akaudiopacket.h"
 #include "akcaps.h"
+#include "akcolorcomponent.h"
+#include "akcolorplane.h"
+#include "akcompressedvideocaps.h"
+#include "akcompressedvideopacket.h"
 #include "akelement.h"
 #include "akfrac.h"
 #include "akpacket.h"
 #include "akplugininfo.h"
 #include "akpluginmanager.h"
+#include "aksubtitlecaps.h"
+#include "aksubtitlepacket.h"
 #include "akunit.h"
 #include "akvideocaps.h"
+#include "akvideoconverter.h"
+#include "akvideoformatspec.h"
+#include "akvideomixer.h"
 #include "akvideopacket.h"
 #include "qml/akcolorizedimage.h"
 #include "qml/akutils.h"
@@ -85,21 +95,31 @@ void Ak::registerTypes()
         return new Ak();
     });
     AkAudioCaps::registerTypes();
+    AkAudioConverter::registerTypes();
     AkAudioPacket::registerTypes();
     AkCaps::registerTypes();
+    AkColorComponent::registerTypes();
+    AkColorPlane::registerTypes();
+    AkColorizedImage::registerTypes();
+    AkCompressedVideoCaps::registerTypes();
+    AkCompressedVideoPacket::registerTypes();
     AkElement::registerTypes();
     AkFrac::registerTypes();
     AkPacket::registerTypes();
+    AkPalette::registerTypes();
+    AkPaletteGroup::registerTypes();
     AkPluginInfo::registerTypes();
     AkPluginManager::registerTypes();
+    AkSubtitleCaps::registerTypes();
+    AkSubtitlePacket::registerTypes();
+    AkTheme::registerTypes();
     AkUnit::registerTypes();
+    AkUtils::registerTypes();
     AkVideoCaps::registerTypes();
+    AkVideoConverter::registerTypes();
+    AkVideoFormatSpec::registerTypes();
+    AkVideoMixer::registerTypes();
     AkVideoPacket::registerTypes();
-    AkColorizedImage::registerTypes();
-    AkTheme::registerTypes();
-    AkPaletteGroup::registerTypes();
-    AkPalette::registerTypes();
-    AkUtils::registerTypes();
 }
 
 qint64 Ak::id()
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akaudiocaps.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/akaudiocaps.cpp
@@ -301,9 +301,8 @@ class AkAudioCapsPrivate
     public:
         AkAudioCaps::SampleFormat m_format {AkAudioCaps::SampleFormat_none};
         AkAudioCaps::ChannelLayout m_layout {AkAudioCaps::Layout_none};
-        QVector<size_t> m_planeSize;
+        int m_planar {false};
         int m_rate {0};
-        int m_samples {0};
 };
 
 AkAudioCaps::AkAudioCaps(QObject *parent):
@@ -314,38 +313,29 @@ AkAudioCaps::AkAudioCaps(QObject *parent
 
 AkAudioCaps::AkAudioCaps(SampleFormat format,
                          ChannelLayout layout,
-                         int rate,
-                         int samples,
                          bool planar,
-                         int align)
+                         int rate):
+    QObject()
 {
     this->d = new AkAudioCapsPrivate();
     this->d->m_format = format;
     this->d->m_layout = layout;
+    this->d->m_planar = planar;
     this->d->m_rate = rate;
-    this->d->m_samples = samples;
-    this->updatePlaneSize(planar, align);
-}
-
-AkAudioCaps::AkAudioCaps(AkAudioCaps::SampleFormat format,
-                         AkAudioCaps::ChannelLayout layout,
-                         int rate,
-                         int samples,
-                         const QVector<size_t> &planeSize)
-{
-    this->d->m_format = format;
-    this->d->m_layout = layout;
-    this->d->m_rate = rate;
-    this->d->m_samples = samples;
-    this->d->m_planeSize = planeSize;
 }
 
-AkAudioCaps::AkAudioCaps(const AkCaps &caps)
+AkAudioCaps::AkAudioCaps(const AkCaps &other):
+    QObject()
 {
     this->d = new AkAudioCapsPrivate();
 
-    if (caps.mimeType() == "audio/x-raw")
-        this->update(caps);
+    if (other.type() == AkCaps::CapsAudio) {
+        auto data = reinterpret_cast<AkAudioCaps *>(other.privateData());
+        this->d->m_format = data->d->m_format;
+        this->d->m_layout = data->d->m_layout;
+        this->d->m_planar = data->d->m_planar;
+        this->d->m_rate = data->d->m_rate;
+    }
 }
 
 AkAudioCaps::AkAudioCaps(const AkAudioCaps &other):
@@ -354,12 +344,8 @@ AkAudioCaps::AkAudioCaps(const AkAudioCa
     this->d = new AkAudioCapsPrivate();
     this->d->m_format = other.d->m_format;
     this->d->m_layout = other.d->m_layout;
+    this->d->m_planar = other.d->m_planar;
     this->d->m_rate = other.d->m_rate;
-    this->d->m_samples = other.d->m_samples;
-    this->d->m_planeSize = other.d->m_planeSize;
-
-    for (auto &property: other.dynamicPropertyNames())
-        this->setProperty(property, other.property(property));
 }
 
 AkAudioCaps::~AkAudioCaps()
@@ -367,33 +353,31 @@ AkAudioCaps::~AkAudioCaps()
     delete this->d;
 }
 
-AkAudioCaps &AkAudioCaps::operator =(const AkAudioCaps &other)
+AkAudioCaps &AkAudioCaps::operator =(const AkCaps &other)
 {
-    if (this != &other) {
-        this->d->m_format = other.d->m_format;
-        this->d->m_layout = other.d->m_layout;
-        this->d->m_rate = other.d->m_rate;
-        this->d->m_samples = other.d->m_samples;
-        this->d->m_planeSize = other.d->m_planeSize;
-        this->clear();
-
-        for (auto &property: other.dynamicPropertyNames())
-            this->setProperty(property, other.property(property));
+    if (other.type() == AkCaps::CapsAudio) {
+        auto data = reinterpret_cast<AkAudioCaps *>(other.privateData());
+        this->d->m_format = data->d->m_format;
+        this->d->m_layout = data->d->m_layout;
+        this->d->m_planar = data->d->m_planar;
+        this->d->m_rate = data->d->m_rate;
+    } else {
+        this->d->m_format = SampleFormat_none;
+        this->d->m_layout = Layout_none;
+        this->d->m_planar = false;
+        this->d->m_rate = 0;
     }
 
     return *this;
 }
 
-AkAudioCaps &AkAudioCaps::operator =(const AkCaps &caps)
+AkAudioCaps &AkAudioCaps::operator =(const AkAudioCaps &other)
 {
-    if (caps.mimeType() == "audio/x-raw") {
-        this->update(caps);
-    } else {
-        this->d->m_format = SampleFormat_none;
-        this->d->m_layout = Layout_none;
-        this->d->m_rate = 0;
-        this->d->m_samples = 0;
-        this->d->m_planeSize.clear();
+    if (this != &other) {
+        this->d->m_format = other.d->m_format;
+        this->d->m_layout = other.d->m_layout;
+        this->d->m_planar = other.d->m_planar;
+        this->d->m_rate = other.d->m_rate;;
     }
 
     return *this;
@@ -401,18 +385,10 @@ AkAudioCaps &AkAudioCaps::operator =(con
 
 bool AkAudioCaps::operator ==(const AkAudioCaps &other) const
 {
-    if (this->dynamicPropertyNames() != other.dynamicPropertyNames())
-        return false;
-
-    for (auto &property: this->dynamicPropertyNames())
-        if (this->property(property) != other.property(property))
-            return false;
-
     return this->d->m_format == other.d->m_format
             && this->d->m_layout == other.d->m_layout
-            && this->d->m_rate == other.d->m_rate
-            && this->d->m_samples == other.d->m_samples
-            && this->d->m_planeSize == other.d->m_planeSize;
+            && this->d->m_planar == other.d->m_planar
+            && this->d->m_rate == other.d->m_rate;
 }
 
 bool AkAudioCaps::operator !=(const AkAudioCaps &other) const
@@ -435,29 +411,12 @@ QObject *AkAudioCaps::create(const AkAud
     return new AkAudioCaps(caps);
 }
 
-QObject *AkAudioCaps::create(AkAudioCaps::SampleFormat format,
-                             AkAudioCaps::ChannelLayout layout,
-                             int rate,
-                             int samples,
-                             bool planar,
-                             int align)
-{
-    return new AkAudioCaps(format, layout, rate, samples, planar, align);
-}
-
-QObject *AkAudioCaps::create(const QString &format,
-                             const QString &layout,
-                             int rate,
-                             int samples,
+QObject *AkAudioCaps::create(SampleFormat format,
+                             ChannelLayout layout,
                              bool planar,
-                             int align)
+                             int rate)
 {
-    return new AkAudioCaps(AkAudioCaps::sampleFormatFromString(format),
-                           AkAudioCaps::channelLayoutFromString(layout),
-                           rate,
-                           samples,
-                           planar,
-                           align);
+    return new AkAudioCaps(format, layout, planar, rate);
 }
 
 QVariant AkAudioCaps::toVariant() const
@@ -465,18 +424,6 @@ QVariant AkAudioCaps::toVariant() const
     return QVariant::fromValue(*this);
 }
 
-AkAudioCaps::operator AkCaps() const
-{
-    AkCaps caps("audio/x-raw");
-    caps.setProperty("format", this->d->m_format);
-    caps.setProperty("layout" , this->d->m_layout);
-    caps.setProperty("rate", this->d->m_rate);
-    caps.setProperty("samples", this->d->m_samples);
-    caps.setProperty("planeSize", QVariant::fromValue(this->d->m_planeSize));
-
-    return caps;
-}
-
 AkAudioCaps::operator bool() const
 {
     auto af = SampleFormats::byFormat(this->d->m_format);
@@ -491,6 +438,21 @@ AkAudioCaps::operator bool() const
     return this->d->m_rate > 0;
 }
 
+AkAudioCaps::operator AkCaps() const
+{
+    AkCaps caps;
+    caps.setType(AkCaps::CapsAudio);
+    caps.setPrivateData(new AkAudioCaps(*this),
+                        [] (void *data) -> void * {
+                            return new AkAudioCaps(*reinterpret_cast<AkAudioCaps *>(data));
+                        },
+                        [] (void *data) {
+                            delete reinterpret_cast<AkAudioCaps *>(data);
+                        });
+
+    return caps;
+}
+
 AkAudioCaps::SampleFormat AkAudioCaps::format() const
 {
     return this->d->m_format;
@@ -501,6 +463,11 @@ AkAudioCaps::ChannelLayout AkAudioCaps::
     return this->d->m_layout;
 }
 
+bool AkAudioCaps::planar() const
+{
+    return this->d->m_planar;
+}
+
 int AkAudioCaps::bps() const
 {
     return AkAudioCaps::bitsPerSample(this->d->m_format);
@@ -516,26 +483,6 @@ int AkAudioCaps::rate() const
     return this->d->m_rate;
 }
 
-int &AkAudioCaps::rate()
-{
-    return this->d->m_rate;
-}
-
-int AkAudioCaps::samples() const
-{
-    return this->d->m_samples;
-}
-
-size_t AkAudioCaps::frameSize() const
-{
-    size_t frameSize = 0;
-
-    for (auto &size: this->d->m_planeSize)
-        frameSize += size;
-
-    return frameSize;
-}
-
 const QVector<AkAudioCaps::Position> AkAudioCaps::positions() const
 {
     auto layouts = ChannelLayouts::byLayout(this->d->m_layout);
@@ -549,169 +496,11 @@ const QVector<AkAudioCaps::Position> AkA
     return layouts->positions;
 }
 
-QVariantMap AkAudioCaps::toMap() const
-{
-    QVariantMap map {
-        {"mimeType" , "audio/x-raw"                            },
-        {"format"   , this->d->m_format                        },
-        {"layout"   , this->d->m_layout                        },
-        {"rate"     , this->d->m_rate                          },
-        {"samples"  , this->d->m_samples                       },
-        {"planeSize", QVariant::fromValue(this->d->m_planeSize)},
-    };
-
-    for (auto &property: this->dynamicPropertyNames()) {
-        auto key = QString::fromUtf8(property.constData());
-        map[key] = this->property(property);
-    }
-
-    return map;
-}
-
-AkAudioCaps &AkAudioCaps::update(const AkCaps &caps)
-{
-    if (caps.mimeType() != "audio/x-raw")
-        return *this;
-
-    this->clear();
-
-    for (auto &property: caps.dynamicPropertyNames()) {
-        int i = this->metaObject()->indexOfProperty(property);
-
-        if (this->metaObject()->property(i).isWritable())
-            this->setProperty(property, caps.property(property));
-    }
-
-    auto planeSizeVar = caps.property("planeSize");
-    bool planar = false;
-
-    if (planeSizeVar.isValid()) {
-        auto planeSize = caps.property("planeSize").value<QVector<size_t>>();
-        planar = planeSize.size() > 1;
-    }
-
-    this->updatePlaneSize(planar);
-
-    return *this;
-}
-
-size_t AkAudioCaps::planeOffset(int plane) const
-{
-    if (plane < 1 || plane > this->planes())
-        return 0;
-
-    size_t offset = 0;
-
-    for (int i = 0; i < plane; i++)
-        offset += this->d->m_planeSize[i];
-
-    return offset;
-}
-
-bool AkAudioCaps::planar() const
-{
-    return this->d->m_planeSize.size() > 1;
-}
-
-int AkAudioCaps::planes() const
-{
-    return this->d->m_planeSize.size();
-}
-
-QVector<size_t> AkAudioCaps::planeSize() const
-{
-    return this->d->m_planeSize;
-}
-
-size_t AkAudioCaps::bytesPerPlane() const
-{
-    if (this->planar())
-        return size_t(this->bps() * this->d->m_samples / 8);
-
-    return size_t(this->bps()
-                  * this->channels()
-                  * this->d->m_samples
-                  / 8);
-}
-
-void AkAudioCaps::realign(int align)
-{
-    this->updatePlaneSize(this->planar(), align);
-}
-
-void AkAudioCaps::updatePlaneSize(bool planar, int align)
-{
-    auto af = SampleFormats::byFormat(this->d->m_format);
-    auto layouts = ChannelLayouts::byLayout(this->d->m_layout);
-    auto isEmpty = this->d->m_planeSize.isEmpty();
-    this->d->m_planeSize.clear();
-
-    if (!af || !layouts) {
-        if (!isEmpty)
-            emit this->planeSizeChanged({});
-
-        return;
-    }
-
-    if (align < 1)
-        align = 1;
-
-    QVector<size_t> planes;
-
-    if (planar) {
-        auto planeSize =
-                SampleFormats::alignUp(size_t(af->bps
-                                                 * this->d->m_samples
-                                                 / 8),
-                                       size_t(align));
-
-        for (int channel = 0; channel < layouts->positions.size(); channel++)
-            planes << planeSize;
-    } else {
-        auto planeSize =
-                SampleFormats::alignUp(size_t(af->bps
-                                                 * layouts->positions.size()
-                                                 * this->d->m_samples
-                                                 / 8),
-                                       size_t(align));
-        planes = {planeSize};
-    }
-
-    if (this->d->m_planeSize != planes) {
-        this->d->m_planeSize = planes;
-        emit this->planeSizeChanged(this->d->m_planeSize);
-    }
-}
-
-AkAudioCaps AkAudioCaps::fromMap(const QVariantMap &caps)
-{
-    AkAudioCaps audioCaps;
-
-    if (!caps.contains("mimeType") || caps["mimeType"] != "audio/x-raw")
-        return audioCaps;
-
-    for (auto it = caps.begin(); it != caps.end(); it++) {
-        auto value = it.value();
-
-        if (it.key() == "mimeType")
-            continue;
-
-        audioCaps.setProperty(it.key().toStdString().c_str(), value);
-    }
-
-    return audioCaps;
-}
-
 int AkAudioCaps::bitsPerSample(SampleFormat sampleFormat)
 {
     return SampleFormats::byFormat(sampleFormat)->bps;
 }
 
-int AkAudioCaps::bitsPerSample(const QString &sampleFormat)
-{
-    return AkAudioCaps::bitsPerSample(AkAudioCaps::sampleFormatFromString(sampleFormat));
-}
-
 QString AkAudioCaps::sampleFormatToString(SampleFormat sampleFormat)
 {
     AkAudioCaps caps;
@@ -723,17 +512,6 @@ QString AkAudioCaps::sampleFormatToStrin
     return format;
 }
 
-AkAudioCaps::SampleFormat AkAudioCaps::sampleFormatFromString(const QString &sampleFormat)
-{
-    AkAudioCaps caps;
-    QString format = "SampleFormat_" + sampleFormat;
-    int formatIndex = caps.metaObject()->indexOfEnumerator("SampleFormat");
-    QMetaEnum formatEnum = caps.metaObject()->enumerator(formatIndex);
-    int formatInt = formatEnum.keyToValue(format.toStdString().c_str());
-
-    return static_cast<SampleFormat>(formatInt);
-}
-
 AkAudioCaps::SampleFormat AkAudioCaps::sampleFormatFromProperties(SampleType type,
                                                                   int bps,
                                                                   int endianness)
@@ -770,37 +548,16 @@ bool AkAudioCaps::sampleFormatProperties
     return true;
 }
 
-bool AkAudioCaps::sampleFormatProperties(const QString &sampleFormat,
-                                         SampleType *type,
-                                         int *bps,
-                                         int *endianness)
-{
-    return AkAudioCaps::sampleFormatProperties(AkAudioCaps::sampleFormatFromString(sampleFormat),
-                                               type,
-                                               bps,
-                                               endianness);
-}
-
 AkAudioCaps::SampleType AkAudioCaps::sampleType(SampleFormat sampleFormat)
 {
     return SampleFormats::byFormat(sampleFormat)->type;
 }
 
-AkAudioCaps::SampleType AkAudioCaps::sampleType(const QString &sampleFormat)
-{
-    return AkAudioCaps::sampleType(AkAudioCaps::sampleFormatFromString(sampleFormat));
-}
-
 QString AkAudioCaps::channelLayoutToString(ChannelLayout channelLayout)
 {
     return ChannelLayouts::byLayout(channelLayout)->description;
 }
 
-AkAudioCaps::ChannelLayout AkAudioCaps::channelLayoutFromString(const QString &channelLayout)
-{
-    return ChannelLayouts::byDescription(channelLayout)->layout;
-}
-
 AkAudioCaps::ChannelLayout AkAudioCaps::channelLayoutFromPositions(const QVector<Position> &positions)
 {
     QSet<Position> positionsSet;
@@ -829,31 +586,16 @@ int AkAudioCaps::channelCount(ChannelLay
     return ChannelLayouts::byLayout(channelLayout)->positions.size();
 }
 
-int AkAudioCaps::channelCount(const QString &channelLayout)
-{
-    return ChannelLayouts::byDescription(channelLayout)->positions.size();
-}
-
 int AkAudioCaps::endianness(SampleFormat sampleFormat)
 {
     return SampleFormats::byFormat(sampleFormat)->endianness;
 }
 
-int AkAudioCaps::endianness(const QString &sampleFormat)
-{
-    return AkAudioCaps::endianness(AkAudioCaps::sampleFormatFromString(sampleFormat));
-}
-
 AkAudioCaps::ChannelLayout AkAudioCaps::defaultChannelLayout(int channelCount)
 {
     return ChannelLayouts::byChannelCount(channelCount)->layout;
 }
 
-QString AkAudioCaps::defaultChannelLayoutString(int channelCount)
-{
-    return ChannelLayouts::byChannelCount(channelCount)->description;
-}
-
 const QVector<AkAudioCaps::Position> &AkAudioCaps::positions(ChannelLayout channelLayout)
 {
     return ChannelLayouts::byLayout(channelLayout)->positions;
@@ -895,7 +637,6 @@ void AkAudioCaps::setFormat(SampleFormat
         return;
 
     this->d->m_format = format;
-    this->updatePlaneSize(this->planar());
     emit this->formatChanged(format);
 }
 
@@ -905,36 +646,25 @@ void AkAudioCaps::setLayout(ChannelLayou
         return;
 
     this->d->m_layout = layout;
-    this->updatePlaneSize(this->planar());
     emit this->layoutChanged(layout);
 }
 
-void AkAudioCaps::setRate(int rate)
-{
-    if (this->d->m_rate == rate)
-        return;
-
-    this->d->m_rate = rate;
-    emit this->rateChanged(rate);
-}
-
-void AkAudioCaps::setSamples(int samples)
+void AkAudioCaps::setPlanar(bool planar)
 {
-    if (this->d->m_samples == samples)
+    if (this->d->m_planar == planar)
         return;
 
-    this->d->m_samples = samples;
-    this->updatePlaneSize(this->planar());
-    emit this->samplesChanged(samples);
+    this->d->m_planar = planar;
+    emit this->planarChanged(planar);
 }
 
-void AkAudioCaps::setPlaneSize(const QVector<size_t> &planeSize)
+void AkAudioCaps::setRate(int rate)
 {
-    if (this->d->m_planeSize == planeSize)
+    if (this->d->m_rate == rate)
         return;
 
-    this->d->m_planeSize = planeSize;
-    emit this->planeSizeChanged(planeSize);
+    this->d->m_rate = rate;
+    emit this->rateChanged(rate);
 }
 
 void AkAudioCaps::resetFormat()
@@ -947,25 +677,14 @@ void AkAudioCaps::resetLayout()
     this->setLayout(Layout_none);
 }
 
-void AkAudioCaps::resetRate()
-{
-    this->setRate(0);
-}
-
-void AkAudioCaps::resetSamples()
-{
-    this->setSamples(0);
-}
-
-void AkAudioCaps::resetPlaneSize()
+void AkAudioCaps::resetPlanar()
 {
-    this->setPlaneSize({});
+    this->setPlanar(false);
 }
 
-void AkAudioCaps::clear()
+void AkAudioCaps::resetRate()
 {
-    for (auto &property: this->dynamicPropertyNames())
-        this->setProperty(property.constData(), QVariant());
+    this->setRate(0);
 }
 
 void AkAudioCaps::registerTypes()
@@ -1024,27 +743,11 @@ QDebug operator <<(QDebug debug, const A
                     << caps.format()
                     << ",layout="
                     << caps.layout()
+                    << ",planar="
+                    << caps.planar()
                     << ",rate="
                     << caps.rate()
-                    << ",samples="
-                    << caps.samples()
-                    << ",planeSize="
-                    << caps.planeSize();
-
-    QStringList properties;
-
-    for (auto &property: caps.dynamicPropertyNames())
-        properties << QString::fromUtf8(property.constData());
-
-    properties.sort();
-
-    for (auto &property: properties)
-        debug << ","
-              << property.toStdString().c_str()
-              << "="
-              << caps.property(property.toStdString().c_str());
-
-    debug << ")";
+                    << ")";
 
     return debug;
 }
@@ -1093,39 +796,28 @@ QDebug operator <<(QDebug debug, AkAudio
 
 QDataStream &operator >>(QDataStream &istream, AkAudioCaps &caps)
 {
-    int nProperties;
-    istream >> nProperties;
-
-    for (int i = 0; i < nProperties; i++) {
-        QByteArray key;
-        QVariant value;
-        istream >> key;
-        istream >> value;
-
-        caps.setProperty(key.toStdString().c_str(), value);
-    }
+    AkAudioCaps::SampleFormat format = AkAudioCaps::SampleFormat_none;
+    istream >> format;
+    caps.setFormat(format);
+    AkAudioCaps::ChannelLayout layout = AkAudioCaps::Layout_none;
+    istream >> layout;
+    caps.setLayout(layout);
+    bool planar = false;
+    istream >> planar;
+    caps.setPlanar(planar);
+    int rate = 0;
+    istream >> rate;
+    caps.setRate(rate);
 
     return istream;
 }
 
 QDataStream &operator <<(QDataStream &ostream, const AkAudioCaps &caps)
 {
-    QVariantMap staticProperties {
-        {"format"   , caps.format()                        },
-        {"layout"   , caps.layout()                        },
-        {"rate"     , caps.rate()                          },
-        {"samples"  , caps.samples()                       },
-        {"planeSize", QVariant::fromValue(caps.planeSize())},
-    };
-
-    int nProperties =
-            staticProperties.size() + caps.dynamicPropertyNames().size();
-    ostream << nProperties;
-
-    for (auto &key: caps.dynamicPropertyNames()) {
-        ostream << key;
-        ostream << caps.property(key);
-    }
+    ostream << caps.format();
+    ostream << caps.layout();
+    ostream << caps.planar();
+    ostream << caps.rate();
 
     return ostream;
 }
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akaudiocaps.h
+++ webcamoid-9.0.0/libAvKys/Lib/src/akaudiocaps.h
@@ -30,10 +30,6 @@ class AkCaps;
 class AKCOMMONS_EXPORT AkAudioCaps: public QObject
 {
     Q_OBJECT
-    Q_ENUMS(SampleFormat)
-    Q_ENUMS(SampleType)
-    Q_ENUMS(Position)
-    Q_ENUMS(ChannelLayout)
     Q_PROPERTY(SampleFormat format
                READ format
                WRITE setFormat
@@ -44,31 +40,22 @@ class AKCOMMONS_EXPORT AkAudioCaps: publ
                WRITE setLayout
                RESET resetLayout
                NOTIFY layoutChanged)
-    Q_PROPERTY(int bps
-               READ bps)
-    Q_PROPERTY(int channels
-               READ channels)
+    Q_PROPERTY(bool planar
+               READ planar
+               WRITE setPlanar
+               RESET resetPlanar
+               NOTIFY planarChanged)
     Q_PROPERTY(int rate
                READ rate
                WRITE setRate
                RESET resetRate
                NOTIFY rateChanged)
-    Q_PROPERTY(int samples
-               READ samples
-               WRITE setSamples
-               RESET resetSamples
-               NOTIFY samplesChanged)
-    Q_PROPERTY(size_t frameSize
-               READ frameSize)
-    Q_PROPERTY(bool planar
-               READ planar)
-    Q_PROPERTY(int planes
-               READ planes)
-    Q_PROPERTY(QVector<size_t> planeSize
-               READ planeSize
-               WRITE setPlaneSize
-               RESET resetPlaneSize
-               NOTIFY planeSizeChanged)
+    Q_PROPERTY(int bps
+               READ bps
+               CONSTANT)
+    Q_PROPERTY(int channels
+               READ channels
+               CONSTANT)
 
     public:
         enum SampleFormat
@@ -113,6 +100,7 @@ class AKCOMMONS_EXPORT AkAudioCaps: publ
             SampleFormat_dbl = SampleFormat_dblbe,
 #endif
         };
+        Q_ENUM(SampleFormat)
         using SampleFormatList = QList<SampleFormat>;
 
         enum SampleType
@@ -122,6 +110,7 @@ class AKCOMMONS_EXPORT AkAudioCaps: publ
             SampleType_uint,
             SampleType_float,
         };
+        Q_ENUM(SampleType)
 
         enum Position
         {
@@ -157,6 +146,7 @@ class AKCOMMONS_EXPORT AkAudioCaps: publ
             Position_SurroundDirectLeft,
             Position_SurroundDirectRight,
         };
+        Q_ENUM(Position)
         using SpeakerPosition = QPair<qreal, qreal>;
 
         enum ChannelLayout
@@ -191,25 +181,19 @@ class AKCOMMONS_EXPORT AkAudioCaps: publ
             Layout_octagonal,
             Layout_hexadecagonal,
         };
+        Q_ENUM(ChannelLayout)
         using ChannelLayoutList = QList<ChannelLayout>;
 
         AkAudioCaps(QObject *parent=nullptr);
         AkAudioCaps(SampleFormat format,
                     ChannelLayout layout,
-                    int rate,
-                    int samples=0,
-                    bool planar=false,
-                    int align=1);
-        AkAudioCaps(SampleFormat format,
-                    ChannelLayout layout,
-                    int rate,
-                    int samples,
-                    const QVector<size_t> &planeSize);
-        AkAudioCaps(const AkCaps &caps);
+                    bool planar,
+                    int rate);
+        AkAudioCaps(const AkCaps &other);
         AkAudioCaps(const AkAudioCaps &other);
         ~AkAudioCaps();
+        AkAudioCaps &operator =(const AkCaps &other);
         AkAudioCaps &operator =(const AkAudioCaps &other);
-        AkAudioCaps &operator =(const AkCaps &caps);
         bool operator ==(const AkAudioCaps &other) const;
         bool operator !=(const AkAudioCaps &other) const;
         operator bool() const;
@@ -220,95 +204,59 @@ class AKCOMMONS_EXPORT AkAudioCaps: publ
         Q_INVOKABLE static QObject *create(const AkAudioCaps &caps);
         Q_INVOKABLE static QObject *create(AkAudioCaps::SampleFormat format,
                                            AkAudioCaps::ChannelLayout layout,
-                                           int rate,
-                                           int samples=0,
-                                           bool planar=false,
-                                           int align=1);
-        Q_INVOKABLE static QObject *create(const QString &format,
-                                           const QString &layout,
-                                           int rate,
-                                           int samples=0,
-                                           bool planar=false,
-                                           int align=1);
+                                           bool planar,
+                                           int rate);
         Q_INVOKABLE QVariant toVariant() const;
 
-        Q_INVOKABLE SampleFormat format() const;
-        Q_INVOKABLE ChannelLayout layout() const;
+        Q_INVOKABLE AkAudioCaps::SampleFormat format() const;
+        Q_INVOKABLE AkAudioCaps::ChannelLayout layout() const;
+        Q_INVOKABLE bool planar() const;
+        Q_INVOKABLE int rate() const;
         Q_INVOKABLE int bps() const;
         Q_INVOKABLE int channels() const;
-        Q_INVOKABLE int rate() const;
-        Q_INVOKABLE int &rate();
-        Q_INVOKABLE int samples() const;
-        Q_INVOKABLE size_t frameSize() const;
-        Q_INVOKABLE const QVector<Position> positions() const;
-
-        Q_INVOKABLE QVariantMap toMap() const;
-        Q_INVOKABLE AkAudioCaps &update(const AkCaps &caps);
-        Q_INVOKABLE size_t planeOffset(int plane) const;
-        Q_INVOKABLE bool planar() const;
-        Q_INVOKABLE int planes() const;
-        Q_INVOKABLE QVector<size_t> planeSize() const;
-        Q_INVOKABLE size_t bytesPerPlane() const;
-        Q_INVOKABLE void realign(int align);
-        Q_INVOKABLE void updatePlaneSize(bool planar, int align=1);
-
-        Q_INVOKABLE static AkAudioCaps fromMap(const QVariantMap &caps);
-        Q_INVOKABLE static int bitsPerSample(SampleFormat sampleFormat);
-        Q_INVOKABLE static int bitsPerSample(const QString &sampleFormat);
-        Q_INVOKABLE static QString sampleFormatToString(SampleFormat sampleFormat);
-        Q_INVOKABLE static SampleFormat sampleFormatFromString(const QString &sampleFormat);
-        Q_INVOKABLE static SampleFormat sampleFormatFromProperties(SampleType type,
-                                                                   int bps,
-                                                                   int endianness);
-        Q_INVOKABLE static bool sampleFormatProperties(SampleFormat sampleFormat,
-                                                       SampleType *type=nullptr,
-                                                       int *bps=nullptr,
-                                                       int *endianness=nullptr);
-        Q_INVOKABLE static bool sampleFormatProperties(const QString &sampleFormat,
-                                                       SampleType *type=nullptr,
+        Q_INVOKABLE const QVector<AkAudioCaps::Position> positions() const;
+
+        Q_INVOKABLE static int bitsPerSample(AkAudioCaps::SampleFormat sampleFormat);
+        Q_INVOKABLE static QString sampleFormatToString(AkAudioCaps::SampleFormat sampleFormat);
+        Q_INVOKABLE static AkAudioCaps::SampleFormat sampleFormatFromProperties(AkAudioCaps::SampleType type,
+                                                                                int bps,
+                                                                                int endianness);
+        Q_INVOKABLE static bool sampleFormatProperties(AkAudioCaps::SampleFormat sampleFormat,
+                                                       AkAudioCaps::SampleType *type=nullptr,
                                                        int *bps=nullptr,
                                                        int *endianness=nullptr);
-        Q_INVOKABLE static SampleType sampleType(SampleFormat sampleFormat);
-        Q_INVOKABLE static SampleType sampleType(const QString &sampleFormat);
-        Q_INVOKABLE static QString channelLayoutToString(ChannelLayout channelLayout);
-        Q_INVOKABLE static ChannelLayout channelLayoutFromString(const QString &channelLayout);
-        Q_INVOKABLE static ChannelLayout channelLayoutFromPositions(const QVector<Position> &positions);
-        Q_INVOKABLE static int channelCount(ChannelLayout channelLayout);
-        Q_INVOKABLE static int channelCount(const QString &channelLayout);
-        Q_INVOKABLE static int endianness(SampleFormat sampleFormat);
-        Q_INVOKABLE static int endianness(const QString &sampleFormat);
-        Q_INVOKABLE static ChannelLayout defaultChannelLayout(int channelCount);
-        Q_INVOKABLE static QString defaultChannelLayoutString(int channelCount);
-        Q_INVOKABLE static const QVector<Position> &positions(ChannelLayout channelLayout);
-        Q_INVOKABLE static SpeakerPosition position(Position position);
-        Q_INVOKABLE SpeakerPosition position(int channel) const;
-        Q_INVOKABLE static qreal distanceFactor(SpeakerPosition position1,
-                                                SpeakerPosition position2);
-        Q_INVOKABLE static qreal distanceFactor(Position position1,
-                                                Position position2);
+        Q_INVOKABLE static AkAudioCaps::SampleType sampleType(AkAudioCaps::SampleFormat sampleFormat);
+        Q_INVOKABLE static QString channelLayoutToString(AkAudioCaps::ChannelLayout channelLayout);
+        Q_INVOKABLE static AkAudioCaps::ChannelLayout channelLayoutFromPositions(const QVector<AkAudioCaps::Position> &positions);
+        Q_INVOKABLE static int channelCount(AkAudioCaps::ChannelLayout channelLayout);
+        Q_INVOKABLE static int endianness(AkAudioCaps::SampleFormat sampleFormat);
+        Q_INVOKABLE static AkAudioCaps::ChannelLayout defaultChannelLayout(int channelCount);
+        Q_INVOKABLE static const QVector<AkAudioCaps::Position> &positions(AkAudioCaps::ChannelLayout channelLayout);
+        Q_INVOKABLE static AkAudioCaps::SpeakerPosition position(AkAudioCaps::Position position);
+        Q_INVOKABLE AkAudioCaps::SpeakerPosition position(int channel) const;
+        Q_INVOKABLE static qreal distanceFactor(AkAudioCaps::SpeakerPosition position1,
+                                                AkAudioCaps::SpeakerPosition position2);
+        Q_INVOKABLE static qreal distanceFactor(AkAudioCaps::Position position1,
+                                                AkAudioCaps::Position position2);
 
     private:
         AkAudioCapsPrivate *d;
 
     Q_SIGNALS:
-        void formatChanged(SampleFormat format);
-        void layoutChanged(ChannelLayout layout);
+        void formatChanged(AkAudioCaps::SampleFormat format);
+        void layoutChanged(AkAudioCaps::ChannelLayout layout);
+        void planarChanged(bool planar);
         void rateChanged(int rate);
-        void samplesChanged(int samples);
-        void planeSizeChanged(const QVector<size_t> &planeSize);
 
     public Q_SLOTS:
-        void setFormat(SampleFormat format);
-        void setLayout(ChannelLayout layout);
+        void setFormat(AkAudioCaps::SampleFormat format);
+        void setLayout(AkAudioCaps::ChannelLayout layout);
+        void setPlanar(bool planar);
         void setRate(int rate);
-        void setSamples(int samples);
-        void setPlaneSize(const QVector<size_t> &planeSize);
         void resetFormat();
         void resetLayout();
+        void resetPlanar();
         void resetRate();
-        void resetSamples();
-        void resetPlaneSize();
-        void clear();
         static void registerTypes();
 };
 
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akaudioconverter.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/akaudioconverter.cpp
@@ -25,6 +25,7 @@
 #include <QtMath>
 
 #include "akaudioconverter.h"
+#include "akaudiopacket.h"
 #include "akfrac.h"
 
 using AudioConvertFuntion =
@@ -36,7 +37,7 @@ class AkAudioConverterPrivate
         QMutex m_mutex;
         AkAudioCaps m_outputCaps;
         AkAudioCaps m_previousCaps;
-        AkAudioConverter::ResampleMethod m_resaampleMethod {AkAudioConverter::ResampleMethod_Fast};
+        AkAudioConverter::ResampleMethod m_resampleMethod {AkAudioConverter::ResampleMethod_Fast};
         qreal m_sampleCorrection {0};
 
         template<typename InputType, typename OutputType, typename OpType>
@@ -139,15 +140,15 @@ class AkAudioConverterPrivate
         {
             auto caps = src.caps();
             caps.setFormat(format);
-            AkAudioPacket dst(caps);
+            AkAudioPacket dst(caps, src.samples());
             dst.copyMetadata(src);
-            auto n = caps.channels() - caps.planes() + 1;
+            auto n = caps.channels() - src.planes() + 1;
 
-            for (int plane = 0; plane < caps.planes(); plane++) {
-                auto src_line = reinterpret_cast<const InputType *>(src.constPlaneData(plane));
-                auto dst_line = reinterpret_cast<OutputType *>(dst.planeData(plane));
+            for (int plane = 0; plane < src.planes(); ++plane) {
+                auto src_line = reinterpret_cast<const InputType *>(src.constPlane(plane));
+                auto dst_line = reinterpret_cast<OutputType *>(dst.plane(plane));
 
-                for (int i = 0; i < n * caps.samples(); i++)
+                for (int i = 0; i < n * src.samples(); ++i)
                     dst_line[i] =
                             transformTo(scaleValue<InputType,
                                                    OutputType,
@@ -233,22 +234,21 @@ class AkAudioConverterPrivate
             auto caps = src.caps();
             caps.setFormat(sumFormat);
             caps.setLayout(outputLayout);
-            AkAudioPacket sumPacket(caps);
-            sumPacket.buffer().fill(0);
+            AkAudioPacket sumPacket(caps, src.samples(), true);
 
             // Create output packet.
             caps = src.caps();
             caps.setLayout(outputLayout);
-            AkAudioPacket dst(caps);
+            AkAudioPacket dst(caps, src.samples());
             dst.copyMetadata(src);
 
             // Precalculate positional factors
             QVector<qreal> factors;
 
-            for (int ochannel = 0; ochannel < sumPacket.caps().channels(); ochannel++) {
+            for (int ochannel = 0; ochannel < sumPacket.caps().channels(); ++ochannel) {
                 auto oposition = sumPacket.caps().position(ochannel);
 
-                for (int ichannel = 0; ichannel < src.caps().channels(); ichannel++) {
+                for (int ichannel = 0; ichannel < src.caps().channels(); ++ichannel) {
                     auto iposition = src.caps().position(ichannel);
                     factors << AkAudioCaps::distanceFactor(iposition, oposition);
                 }
@@ -266,14 +266,14 @@ class AkAudioConverterPrivate
              * http://digitalsoundandmusic.com/4-3-4-the-mathematics-of-the-inverse-square-law-and-pag-equations/
              */
             if (src.caps().planar()) {
-                for (int ochannel = 0; ochannel < dst.caps().channels(); ochannel++) {
-                    auto sum_line = reinterpret_cast<SumType *>(sumPacket.planeData(ochannel));
+                for (int ochannel = 0; ochannel < dst.caps().channels(); ++ochannel) {
+                    auto sum_line = reinterpret_cast<SumType *>(sumPacket.plane(ochannel));
 
-                    for (int ichannel = 0; ichannel < src.caps().channels(); ichannel++) {
+                    for (int ichannel = 0; ichannel < src.caps().channels(); ++ichannel) {
                         auto k = factors[ichannel + ochannel * src.caps().channels()];
-                        auto src_line = reinterpret_cast<const SampleType *>(src.constPlaneData(ichannel));
+                        auto src_line = reinterpret_cast<const SampleType *>(src.constPlane(ichannel));
 
-                        for (int sample = 0; sample < dst.caps().samples(); sample++) {
+                        for (int sample = 0; sample < dst.samples(); ++sample) {
                             auto sampleValue = transformFrom(src_line[sample]);
                             sum_line[sample] += SumType(k * qreal(sampleValue));
 
@@ -293,11 +293,11 @@ class AkAudioConverterPrivate
                 }
 
                 // Recreate frame with the wave scaled to fit it.
-                for (int ochannel = 0; ochannel < dst.caps().channels(); ochannel++) {
-                    auto dst_line = reinterpret_cast<SampleType *>(dst.planeData(ochannel));
-                    auto sum_line = reinterpret_cast<SumType *>(sumPacket.planeData(ochannel));
+                for (int ochannel = 0; ochannel < dst.caps().channels(); ++ochannel) {
+                    auto dst_line = reinterpret_cast<SampleType *>(dst.plane(ochannel));
+                    auto sum_line = reinterpret_cast<SumType *>(sumPacket.plane(ochannel));
 
-                    for (int sample = 0; sample < dst.caps().samples(); sample++) {
+                    for (int sample = 0; sample < dst.samples(); ++sample) {
                         dst_line[sample] = transformTo(scaleValue<SumType,
                                                                   SampleType,
                                                                   SumType>(sum_line[sample],
@@ -308,18 +308,18 @@ class AkAudioConverterPrivate
                     }
                 }
             } else {
-                auto src_line = reinterpret_cast<const SampleType *>(src.constPlaneData(0));
-                auto dst_line = reinterpret_cast<SampleType *>(dst.planeData(0));
-                auto sum_line = reinterpret_cast<SumType *>(sumPacket.planeData(0));
+                auto src_line = reinterpret_cast<const SampleType *>(src.constPlane(0));
+                auto dst_line = reinterpret_cast<SampleType *>(dst.plane(0));
+                auto sum_line = reinterpret_cast<SumType *>(sumPacket.plane(0));
 
-                for (int sample = 0; sample < dst.caps().samples(); sample++) {
+                for (int sample = 0; sample < dst.samples(); ++sample) {
                     auto iSampleOffset = sample * src.caps().channels();
                     auto oSampleOffset = sample * dst.caps().channels();
 
-                    for (int ochannel = 0; ochannel < dst.caps().channels(); ochannel++) {
+                    for (int ochannel = 0; ochannel < dst.caps().channels(); ++ochannel) {
                         auto sumOffset = oSampleOffset + ochannel;
 
-                        for (int ichannel = 0; ichannel < src.caps().channels(); ichannel++) {
+                        for (int ichannel = 0; ichannel < src.caps().channels(); ++ichannel) {
                             auto k = factors[ichannel + ochannel * src.caps().channels()];
                             auto sampleValue = transformFrom(src_line[iSampleOffset + ichannel]);
                             sum_line[sumOffset] += SumType(k * qreal(sampleValue));
@@ -340,10 +340,10 @@ class AkAudioConverterPrivate
                 }
 
                 // Recreate frame with the wave scaled to fit it.
-                for (int sample = 0; sample < dst.caps().samples(); sample++) {
+                for (int sample = 0; sample < dst.samples(); ++sample) {
                     auto oSampleOffset = sample * dst.caps().channels();
 
-                    for (int ochannel = 0; ochannel < dst.caps().channels(); ochannel++) {
+                    for (int ochannel = 0; ochannel < dst.caps().channels(); ++ochannel) {
                         auto sumOffset = oSampleOffset + ochannel;
                         dst_line[sumOffset] = transformTo(scaleValue<SumType,
                                                                      SampleType,
@@ -406,26 +406,26 @@ class AkAudioConverterPrivate
                                                         bool planar)
         {
             auto caps = packet.caps();
-            caps.updatePlaneSize(planar);
-            AkAudioPacket outPacket(caps);
+            caps.setPlanar(planar);
+            AkAudioPacket outPacket(caps, packet.samples());
             outPacket.copyMetadata(packet);
 
             if (planar) {
-                auto src_line = reinterpret_cast<const SampleType *>(packet.constPlaneData(0));
+                auto src_line = reinterpret_cast<const SampleType *>(packet.constPlane(0));
 
-                for (int channel = 0; channel < caps.channels(); channel++) {
-                    auto dst_line = reinterpret_cast<SampleType *>(outPacket.planeData(channel));
+                for (int channel = 0; channel < caps.channels(); ++channel) {
+                    auto dst_line = reinterpret_cast<SampleType *>(outPacket.plane(channel));
 
-                    for (int sample = 0; sample < caps.samples(); sample++)
+                    for (int sample = 0; sample < packet.samples(); ++sample)
                         dst_line[sample] = src_line[sample * caps.channels() + channel];
                 }
             } else {
-                auto dst_line = reinterpret_cast<SampleType *>(outPacket.planeData(0));
+                auto dst_line = reinterpret_cast<SampleType *>(outPacket.plane(0));
 
-                for (int channel = 0; channel < packet.caps().channels(); channel++) {
-                    auto src_line = reinterpret_cast<const SampleType *>(packet.constPlaneData(channel));
+                for (int channel = 0; channel < packet.caps().channels(); ++channel) {
+                    auto src_line = reinterpret_cast<const SampleType *>(packet.constPlane(channel));
 
-                    for (int sample = 0; sample < caps.samples(); sample++)
+                    for (int sample = 0; sample < packet.samples(); ++sample)
                         dst_line[sample * caps.channels() + channel] = src_line[sample];
                 }
             }
@@ -543,34 +543,32 @@ class AkAudioConverterPrivate
         inline static AkAudioPacket scaleSamplesFast(const AkAudioPacket &packet,
                                                      int samples)
         {
-            auto iSamples = packet.caps().samples();
-            auto caps = packet.caps();
-            caps.setSamples(samples);
-            AkAudioPacket outPacket(caps);
+            auto iSamples = packet.samples();
+            AkAudioPacket outPacket(packet.caps(), samples);
             outPacket.copyMetadata(packet);
             QVector<int> sampleValues;
 
-            for (int sample = 0; sample < outPacket.caps().samples(); sample++)
+            for (int sample = 0; sample < outPacket.samples(); ++sample)
                 sampleValues << sample * (iSamples - 1) / (samples - 1);
 
             if (packet.caps().planar()) {
-                for (int channel = 0; channel < outPacket.caps().channels(); channel++) {
-                    auto src_line = reinterpret_cast<const SampleType *>(packet.constPlaneData(channel));
-                    auto dst_line = reinterpret_cast<SampleType *>(outPacket.planeData(channel));
+                for (int channel = 0; channel < outPacket.caps().channels(); ++channel) {
+                    auto src_line = reinterpret_cast<const SampleType *>(packet.constPlane(channel));
+                    auto dst_line = reinterpret_cast<SampleType *>(outPacket.plane(channel));
 
-                    for (int sample = 0; sample < outPacket.caps().samples(); sample++)
+                    for (int sample = 0; sample < outPacket.samples(); ++sample)
                         dst_line[sample] = src_line[sampleValues[sample]];
                 }
             } else {
-                auto src_line = reinterpret_cast<const SampleType *>(packet.constPlaneData(0));
-                auto dst_line = reinterpret_cast<SampleType *>(outPacket.planeData(0));
+                auto src_line = reinterpret_cast<const SampleType *>(packet.constPlane(0));
+                auto dst_line = reinterpret_cast<SampleType *>(outPacket.plane(0));
                 auto oChannels = outPacket.caps().channels();
 
-                for (int sample = 0; sample < outPacket.caps().samples(); sample++) {
+                for (int sample = 0; sample < outPacket.samples(); ++sample) {
                     auto iSampleOffset = sampleValues[sample] * oChannels;
                     auto oSampleOffset = sample * oChannels;
 
-                    for (int channel = 0; channel < oChannels; channel++) {
+                    for (int channel = 0; channel < oChannels; ++channel) {
                         dst_line[oSampleOffset + channel] =
                                 src_line[iSampleOffset + channel];
                     }
@@ -611,14 +609,12 @@ class AkAudioConverterPrivate
                                                        TransformFuncType transformFrom,
                                                        TransformFuncType transformTo)
         {
-            auto iSamples = packet.caps().samples();
-            auto caps = packet.caps();
-            caps.setSamples(samples);
-            AkAudioPacket outPacket(caps);
+            auto iSamples = packet.samples();
+            AkAudioPacket outPacket(packet.caps(), samples);
             outPacket.copyMetadata(packet);
             QVector<ValuesMinMax> sampleValues;
 
-            for (int sample = 0; sample < outPacket.caps().samples(); sample++) {
+            for (int sample = 0; sample < outPacket.samples(); ++sample) {
                 auto iSample = qreal(sample) * (iSamples - 1) / (samples - 1);
                 auto minSample = qFloor(iSample);
                 auto maxSample = qCeil(iSample);
@@ -628,11 +624,11 @@ class AkAudioConverterPrivate
             }
 
             if (packet.caps().planar()) {
-                for (int channel = 0; channel < outPacket.caps().channels(); channel++) {
-                    auto src_line = reinterpret_cast<const SampleType *>(packet.constPlaneData(channel));
-                    auto dst_line = reinterpret_cast<SampleType *>(outPacket.planeData(channel));
+                for (int channel = 0; channel < outPacket.caps().channels(); ++channel) {
+                    auto src_line = reinterpret_cast<const SampleType *>(packet.constPlane(channel));
+                    auto dst_line = reinterpret_cast<SampleType *>(outPacket.plane(channel));
 
-                    for (int sample = 0; sample < outPacket.caps().samples(); sample++) {
+                    for (int sample = 0; sample < outPacket.samples(); ++sample) {
                         auto minSample = sampleValues[sample].min;
                         auto maxSample = sampleValues[sample].max;
                         dst_line[sample] =
@@ -646,16 +642,16 @@ class AkAudioConverterPrivate
                     }
                 }
             } else {
-                auto src_line = reinterpret_cast<const SampleType *>(packet.constPlaneData(0));
-                auto dst_line = reinterpret_cast<SampleType *>(outPacket.planeData(0));
+                auto src_line = reinterpret_cast<const SampleType *>(packet.constPlane(0));
+                auto dst_line = reinterpret_cast<SampleType *>(outPacket.plane(0));
                 auto oChannels = outPacket.caps().channels();
 
-                for (int sample = 0; sample < outPacket.caps().samples(); sample++) {
+                for (int sample = 0; sample < outPacket.samples(); ++sample) {
                     auto iSampleMinOffset = sampleValues[sample].min * oChannels;
                     auto iSampleMaxOffset = sampleValues[sample].max * oChannels;
                     auto oSampleOffset = sample * oChannels;
 
-                    for (int channel = 0; channel < oChannels; channel++) {
+                    for (int channel = 0; channel < oChannels; ++channel) {
                         dst_line[oSampleOffset + channel] =
                                 interpolate<SampleType,
                                             SumType,
@@ -679,14 +675,12 @@ class AkAudioConverterPrivate
                                                           TransformFuncType transformFrom,
                                                           TransformFuncType transformTo)
         {
-            auto iSamples = packet.caps().samples();
-            auto caps = packet.caps();
-            caps.setSamples(samples);
-            AkAudioPacket outPacket(caps);
+            auto iSamples = int(packet.samples());
+            AkAudioPacket outPacket(packet.caps(), samples);
             outPacket.copyMetadata(packet);
             QVector<ValuesMinMax> sampleValues;
 
-            for (int sample = 0; sample < outPacket.caps().samples(); sample++) {
+            for (int sample = 0; sample < outPacket.samples(); ++sample) {
                 auto iSample = qreal(sample) * (iSamples - 1) / (samples - 1);
                 auto midSample = qRound(iSample);
                 auto minSample = qMax(midSample - 1, 0);
@@ -698,11 +692,11 @@ class AkAudioConverterPrivate
             }
 
             if (packet.caps().planar()) {
-                for (int channel = 0; channel < outPacket.caps().channels(); channel++) {
-                    auto src_line = reinterpret_cast<const SampleType *>(packet.constPlaneData(channel));
-                    auto dst_line = reinterpret_cast<SampleType *>(outPacket.planeData(channel));
+                for (int channel = 0; channel < outPacket.caps().channels(); ++channel) {
+                    auto src_line = reinterpret_cast<const SampleType *>(packet.constPlane(channel));
+                    auto dst_line = reinterpret_cast<SampleType *>(outPacket.plane(channel));
 
-                    for (int sample = 0; sample < outPacket.caps().samples(); sample++) {
+                    for (int sample = 0; sample < outPacket.samples(); ++sample) {
                         auto minSample = sampleValues[sample].min;
                         auto midSample = sampleValues[sample].mid;
                         auto maxSample = sampleValues[sample].max;
@@ -718,17 +712,17 @@ class AkAudioConverterPrivate
                     }
                 }
             } else {
-                auto src_line = reinterpret_cast<const SampleType *>(packet.constPlaneData(0));
-                auto dst_line = reinterpret_cast<SampleType *>(outPacket.planeData(0));
+                auto src_line = reinterpret_cast<const SampleType *>(packet.constPlane(0));
+                auto dst_line = reinterpret_cast<SampleType *>(outPacket.plane(0));
                 auto oChannels = outPacket.caps().channels();
 
-                for (int sample = 0; sample < outPacket.caps().samples(); sample++) {
+                for (int sample = 0; sample < outPacket.samples(); ++sample) {
                     auto iSampleMinOffset = sampleValues[sample].min * oChannels;
                     auto iSampleMidOffset = sampleValues[sample].mid * oChannels;
                     auto iSampleMaxOffset = sampleValues[sample].max * oChannels;
                     auto oSampleOffset = sample * oChannels;
 
-                    for (int channel = 0; channel < oChannels; channel++) {
+                    for (int channel = 0; channel < oChannels; ++channel) {
                         dst_line[oSampleOffset + channel] =
                                 interpolate<SampleType,
                                             SumType,
@@ -831,7 +825,8 @@ AkAudioConverter::AkAudioConverter(const
     this->d->m_outputCaps = outputCaps;
 }
 
-AkAudioConverter::AkAudioConverter(const AkAudioConverter &other)
+AkAudioConverter::AkAudioConverter(const AkAudioConverter &other):
+    QObject()
 {
     this->d = new AkAudioConverterPrivate();
     this->d->m_outputCaps = other.d->m_outputCaps;
@@ -867,7 +862,7 @@ AkAudioCaps AkAudioConverter::outputCaps
 
 AkAudioConverter::ResampleMethod AkAudioConverter::resampleMethod() const
 {
-    return this->d->m_resaampleMethod;
+    return this->d->m_resampleMethod;
 }
 
 bool AkAudioConverter::canConvertFormat(AkAudioCaps::SampleFormat input,
@@ -902,7 +897,7 @@ AkAudioPacket AkAudioConverter::convert(
     if (!outputCaps)
         return packet;
 
-    if (packet.buffer().size() < 1)
+    if (packet.size() < 1)
         return {};
 
     this->d->m_mutex.lock();
@@ -934,7 +929,7 @@ AkAudioPacket AkAudioConverter::convert(
 AkAudioPacket AkAudioConverter::scale(const AkAudioPacket &packet,
                                       int samples) const
 {
-    auto iSamples = packet.caps().samples();
+    auto iSamples = packet.samples();
 
     if (iSamples == samples)
         return packet;
@@ -944,7 +939,7 @@ AkAudioPacket AkAudioConverter::scale(co
 
     auto ssf =
             AkAudioConverterPrivate::bySamplesScalingFormat(packet.caps().format());
-    auto method = this->d->m_resaampleMethod;
+    auto method = this->d->m_resampleMethod;
 
     if (samples < iSamples)
         method = AkAudioConverter::ResampleMethod_Fast;
@@ -976,10 +971,10 @@ void AkAudioConverter::setOutputCaps(con
 
 void AkAudioConverter::setResampleMethod(ResampleMethod resampleMethod)
 {
-    if (this->d->m_resaampleMethod == resampleMethod)
+    if (this->d->m_resampleMethod == resampleMethod)
         return;
 
-    this->d->m_resaampleMethod = resampleMethod;
+    this->d->m_resampleMethod = resampleMethod;
     emit this->resampleMethodChanged(resampleMethod);
 }
 
@@ -1089,7 +1084,7 @@ AkAudioPacket AkAudioConverterPrivate::c
 
 AkAudioPacket AkAudioConverterPrivate::convertSampleRate(const AkAudioPacket &packet)
 {
-    auto iSamples = packet.caps().samples();
+    auto iSamples = packet.samples();
     this->m_mutex.lock();
     auto oSampleRate = this->m_outputCaps.rate();
     this->m_mutex.unlock();
@@ -1115,35 +1110,40 @@ AkAudioPacket AkAudioConverterPrivate::c
 
     auto ssf =
             AkAudioConverterPrivate::bySamplesScalingFormat(packet.caps().format());
-    auto method = this->m_resaampleMethod;
+    auto method = this->m_resampleMethod;
 
     if (samples < iSamples)
         method = AkAudioConverter::ResampleMethod_Fast;
 
-    AkAudioPacket outPacket;
+    AkAudioPacket tmpPacket;
 
     switch (method) {
     case AkAudioConverter::ResampleMethod_Fast:
-        outPacket = ssf->fast(packet, samples);
+        tmpPacket = ssf->fast(packet, samples);
         break;
 
     case AkAudioConverter::ResampleMethod_Linear:
-        outPacket = ssf->linear(packet, samples);
+        tmpPacket = ssf->linear(packet, samples);
         break;
 
     case AkAudioConverter::ResampleMethod_Quadratic:
-        outPacket = ssf->quadratic(packet, samples);
+        tmpPacket = ssf->quadratic(packet, samples);
         break;
     }
 
     auto caps = packet.caps();
-    caps.setSamples(samples);
     caps.setRate(oSampleRate);
-    outPacket.setCaps(caps);
+    AkAudioPacket outPacket(caps, samples);
+    outPacket.copyMetadata(tmpPacket);
     outPacket.setPts(packet.pts() * oSampleRate / packet.caps().rate());
     outPacket.setTimeBase(packet.timeBase() * AkFrac(packet.caps().rate(),
                                                      oSampleRate));
 
+    for (int plane = 0; plane < outPacket.planes(); plane++)
+        memcpy(outPacket.plane(plane),
+               tmpPacket.constPlane(plane),
+               qMin(outPacket.planeSize(plane), tmpPacket.planeSize(plane)));
+
     this->m_mutex.lock();
     this->m_sampleCorrection = rSamples - samples;
     this->m_mutex.unlock();
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akaudioconverter.h
+++ webcamoid-9.0.0/libAvKys/Lib/src/akaudioconverter.h
@@ -20,16 +20,14 @@
 #ifndef AKAUDIOCONVERTER_H
 #define AKAUDIOCONVERTER_H
 
-#include "akaudiopacket.h"
+#include "akaudiocaps.h"
 
 class AkAudioConverterPrivate;
-class AkAudioCaps;
 class AkAudioPacket;
 
 class AKCOMMONS_EXPORT AkAudioConverter: public QObject
 {
     Q_OBJECT
-    Q_ENUMS(AkAudioConverter::ResampleMethod)
     Q_PROPERTY(AkAudioCaps outputCaps
                READ outputCaps
                WRITE setOutputCaps
@@ -48,6 +46,7 @@ class AKCOMMONS_EXPORT AkAudioConverter:
             ResampleMethod_Linear,
             ResampleMethod_Quadratic
         };
+        Q_ENUM(ResampleMethod)
 
         AkAudioConverter(const AkAudioCaps &outputCaps={},
                          QObject *parent=nullptr);
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akaudiopacket.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/akaudiopacket.cpp
@@ -22,7 +22,6 @@
 
 #include "akaudiopacket.h"
 #include "akaudioconverter.h"
-#include "akcaps.h"
 #include "akfrac.h"
 #include "akpacket.h"
 
@@ -31,46 +30,109 @@ class AkAudioPacketPrivate
     public:
         AkAudioCaps m_caps;
         QByteArray m_buffer;
-        qint64 m_pts {0};
-        AkFrac m_timeBase;
-        qint64 m_id {-1};
-        int m_index {-1};
+        size_t m_size {0};
+        size_t m_samples {0};
+        size_t m_nPlanes {0};
+        quint8 **m_planes {nullptr};
+        size_t *m_planeSize {nullptr};
+        size_t *m_planeOffset {nullptr};
+
+        ~AkAudioPacketPrivate();
+        void allocateBuffers(size_t planes);
+        void clearBuffers();
+        void updateParams();
+        inline void updatePlanes();
 };
 
 AkAudioPacket::AkAudioPacket(QObject *parent):
-    QObject(parent)
+    AkPacketBase(parent)
 {
     this->d = new AkAudioPacketPrivate();
 }
 
-AkAudioPacket::AkAudioPacket(const AkAudioCaps &caps)
+AkAudioPacket::AkAudioPacket(const AkAudioCaps &caps,
+                             size_t samples,
+                             bool initialized):
+    AkPacketBase()
 {
     this->d = new AkAudioPacketPrivate();
     this->d->m_caps = caps;
-    this->d->m_buffer = QByteArray(int(caps.frameSize()), Qt::Uninitialized);
+    this->d->m_samples = samples;
+    this->d->m_nPlanes = this->d->m_caps.planar()?
+                             this->d->m_caps.channels():
+                             1;
+    this->d->allocateBuffers(this->d->m_nPlanes);
+    this->d->updateParams();
+
+    if (initialized)
+        this->d->m_buffer = QByteArray(int(this->d->m_size), 0);
+    else
+        this->d->m_buffer = QByteArray(int(this->d->m_size), Qt::Uninitialized);
+
+    this->d->updatePlanes();
 }
 
-AkAudioPacket::AkAudioPacket(const AkPacket &other)
+AkAudioPacket::AkAudioPacket(size_t size, const AkAudioCaps &caps, bool initialized):
+    AkPacketBase()
 {
     this->d = new AkAudioPacketPrivate();
-    this->d->m_caps = other.caps();
-    this->d->m_buffer = other.buffer();
-    this->d->m_pts = other.pts();
-    this->d->m_timeBase = other.timeBase();
-    this->d->m_index = other.index();
-    this->d->m_id = other.id();
+    this->d->m_caps = caps;
+    this->d->m_samples = 8 * size
+                         / (this->d->m_caps.bps() * this->d->m_caps.channels());
+    this->d->m_nPlanes = this->d->m_caps.planar()?
+                             this->d->m_caps.channels():
+                             1;
+    this->d->allocateBuffers(this->d->m_nPlanes);
+    this->d->updateParams();
+
+    if (initialized)
+        this->d->m_buffer = QByteArray(int(size), 0);
+    else
+        this->d->m_buffer = QByteArray(int(size), Qt::Uninitialized);
+
+    this->d->updatePlanes();
+}
+
+AkAudioPacket::AkAudioPacket(const AkPacket &other):
+    AkPacketBase(other)
+{
+    this->d = new AkAudioPacketPrivate();
+
+    if (other.type() == AkPacket::PacketAudio) {
+        auto data = reinterpret_cast<AkAudioPacket *>(other.privateData());
+        this->d->m_caps = data->d->m_caps;
+        this->d->m_buffer = data->d->m_buffer;
+        this->d->m_size = data->d->m_size;
+        this->d->m_samples = data->d->m_samples;
+        this->d->m_nPlanes = data->d->m_nPlanes;
+        this->d->allocateBuffers(this->d->m_nPlanes);
+
+        if (this->d->m_nPlanes > 0) {
+            memcpy(this->d->m_planeSize, data->d->m_planeSize, this->d->m_nPlanes * sizeof(size_t));
+            memcpy(this->d->m_planeOffset, data->d->m_planeOffset, this->d->m_nPlanes * sizeof(size_t));
+        }
+
+        this->d->updatePlanes();
+    }
 }
 
 AkAudioPacket::AkAudioPacket(const AkAudioPacket &other):
-    QObject()
+    AkPacketBase(other)
 {
     this->d = new AkAudioPacketPrivate();
     this->d->m_caps = other.d->m_caps;
     this->d->m_buffer = other.d->m_buffer;
-    this->d->m_pts = other.d->m_pts;
-    this->d->m_timeBase = other.d->m_timeBase;
-    this->d->m_index = other.d->m_index;
-    this->d->m_id = other.d->m_id;
+    this->d->m_size = other.d->m_size;
+    this->d->m_samples = other.d->m_samples;
+    this->d->m_nPlanes = other.d->m_nPlanes;
+    this->d->allocateBuffers(this->d->m_nPlanes);
+
+    if (this->d->m_nPlanes > 0) {
+        memcpy(this->d->m_planeSize, other.d->m_planeSize, this->d->m_nPlanes * sizeof(size_t));
+        memcpy(this->d->m_planeOffset, other.d->m_planeOffset, this->d->m_nPlanes * sizeof(size_t));
+    }
+
+    this->d->updatePlanes();
 }
 
 AkAudioPacket::~AkAudioPacket()
@@ -80,12 +142,31 @@ AkAudioPacket::~AkAudioPacket()
 
 AkAudioPacket &AkAudioPacket::operator =(const AkPacket &other)
 {
-    this->d->m_caps = other.caps();
-    this->d->m_buffer = other.buffer();
-    this->d->m_pts = other.pts();
-    this->d->m_timeBase = other.timeBase();
-    this->d->m_index = other.index();
-    this->d->m_id = other.id();
+    if (other.type() == AkPacket::PacketAudio) {
+        auto data = reinterpret_cast<AkAudioPacket *>(other.privateData());
+        this->d->m_caps = data->d->m_caps;
+        this->d->m_buffer = data->d->m_buffer;
+        this->d->m_size = data->d->m_size;
+        this->d->m_samples = data->d->m_samples;
+        this->d->m_nPlanes = data->d->m_nPlanes;
+        this->d->allocateBuffers(this->d->m_nPlanes);
+
+        if (this->d->m_nPlanes > 0) {
+            memcpy(this->d->m_planeSize, data->d->m_planeSize, this->d->m_nPlanes * sizeof(size_t));
+            memcpy(this->d->m_planeOffset, data->d->m_planeOffset, this->d->m_nPlanes * sizeof(size_t));
+        }
+
+        this->d->updatePlanes();
+    } else {
+        this->d->m_caps = AkAudioCaps();
+        this->d->m_buffer.clear();
+        this->d->m_size = 0;
+        this->d->m_samples = 0;
+        this->d->m_nPlanes = 0;
+        this->d->clearBuffers();
+    }
+
+    this->copyMetadata(other);
 
     return *this;
 }
@@ -95,10 +176,18 @@ AkAudioPacket &AkAudioPacket::operator =
     if (this != &other) {
         this->d->m_caps = other.d->m_caps;
         this->d->m_buffer = other.d->m_buffer;
-        this->d->m_pts = other.d->m_pts;
-        this->d->m_timeBase = other.d->m_timeBase;
-        this->d->m_index = other.d->m_index;
-        this->d->m_id = other.d->m_id;
+        this->d->m_size = other.d->m_size;
+        this->d->m_samples = other.d->m_samples;
+        this->d->m_nPlanes = other.d->m_nPlanes;
+        this->d->allocateBuffers(this->d->m_nPlanes);
+
+        if (this->d->m_nPlanes > 0) {
+            memcpy(this->d->m_planeSize, other.d->m_planeSize, this->d->m_nPlanes * sizeof(size_t));
+            memcpy(this->d->m_planeOffset, other.d->m_planeOffset, this->d->m_nPlanes * sizeof(size_t));
+        }
+
+        this->copyMetadata(other);
+        this->d->updatePlanes();
     }
 
     return *this;
@@ -106,25 +195,24 @@ AkAudioPacket &AkAudioPacket::operator =
 
 AkAudioPacket AkAudioPacket::operator +(const AkAudioPacket &other)
 {
-    AkAudioConverter converter(this->caps());
+    AkAudioConverter converter(this->d->m_caps);
     auto tmpPacket = converter.convert(other);
 
     if (!tmpPacket)
         return *this;
 
-    auto caps = this->caps();
-    caps.setSamples(this->caps().samples() + tmpPacket.caps().samples());
-    AkAudioPacket packet(caps);
+    AkAudioPacket packet(this->d->m_caps,
+                         this->d->m_samples + tmpPacket.d->m_samples);
     packet.copyMetadata(*this);
 
-    for (int plane = 0; plane < caps.planes(); plane++) {
-        auto start = this->caps().bytesPerPlane();
-        memcpy(packet.planeData(plane),
-               this->constPlaneData(plane),
+    for (int plane = 0; plane < this->d->m_nPlanes; ++plane) {
+        auto start = this->d->m_planeSize[plane];
+        memcpy(packet.d->m_planes[plane],
+               this->d->m_planes[plane],
                start);
-        memcpy(packet.planeData(plane) + start,
-               other.constPlaneData(plane),
-               other.caps().bytesPerPlane());
+        memcpy(packet.d->m_planes[plane] + start,
+               tmpPacket.d->m_planes[plane],
+               tmpPacket.d->m_planeSize[plane]);
     }
 
     return packet;
@@ -132,25 +220,24 @@ AkAudioPacket AkAudioPacket::operator +(
 
 AkAudioPacket &AkAudioPacket::operator +=(const AkAudioPacket &other)
 {
-    AkAudioConverter converter(this->caps());
+    AkAudioConverter converter(this->d->m_caps);
     auto tmpPacket = converter.convert(other);
 
     if (!tmpPacket)
         return *this;
 
-    auto caps = this->caps();
-    caps.setSamples(this->caps().samples() + tmpPacket.caps().samples());
-    AkAudioPacket packet(caps);
+    AkAudioPacket packet(this->d->m_caps,
+                         this->d->m_samples + tmpPacket.d->m_samples);
     packet.copyMetadata(*this);
 
-    for (int plane = 0; plane < caps.planes(); plane++) {
-        auto start = this->caps().bytesPerPlane();
-        memcpy(packet.planeData(plane),
-               this->constPlaneData(plane),
+    for (int plane = 0; plane < this->d->m_nPlanes; ++plane) {
+        auto start = this->d->m_planeSize[plane];
+        memcpy(packet.d->m_planes[plane],
+               this->d->m_planes[plane],
                start);
-        memcpy(packet.planeData(plane) + start,
-               other.constPlaneData(plane),
-               other.caps().bytesPerPlane());
+        memcpy(packet.d->m_planes[plane] + start,
+               tmpPacket.d->m_planes[plane],
+               tmpPacket.d->m_planeSize[plane]);
     }
 
     *this = packet;
@@ -158,101 +245,70 @@ AkAudioPacket &AkAudioPacket::operator +
     return *this;
 }
 
-AkAudioPacket::operator AkPacket() const
-{
-    AkPacket packet(this->d->m_caps);
-    packet.buffer() = this->d->m_buffer;
-    packet.pts() = this->d->m_pts;
-    packet.timeBase() = this->d->m_timeBase;
-    packet.index() = this->d->m_index;
-    packet.id() = this->d->m_id;
-
-    return packet;
-}
-
 AkAudioPacket::operator bool() const
 {
-    return this->d->m_caps;
-}
-
-AkAudioCaps AkAudioPacket::caps() const
-{
-    return this->d->m_caps;
-}
-
-AkAudioCaps &AkAudioPacket::caps()
-{
-    return this->d->m_caps;
-}
-
-QByteArray AkAudioPacket::buffer() const
-{
-    return this->d->m_buffer;
-}
-
-QByteArray &AkAudioPacket::buffer()
-{
-    return this->d->m_buffer;
+    return this->d->m_caps && !this->d->m_buffer.isEmpty();
 }
 
-qint64 AkAudioPacket::id() const
+AkAudioPacket::operator AkPacket() const
 {
-    return this->d->m_id;
-}
+    AkPacket packet;
+    packet.setType(AkPacket::PacketAudio);
+    packet.setPrivateData(new AkAudioPacket(*this),
+                          [] (void *data) -> void * {
+                              return new AkAudioPacket(*reinterpret_cast<AkAudioPacket *>(data));
+                          },
+                          [] (void *data) {
+                              delete reinterpret_cast<AkAudioPacket *>(data);
+                          });
+    packet.copyMetadata(*this);
 
-qint64 &AkAudioPacket::id()
-{
-    return this->d->m_id;
+    return packet;
 }
 
-qint64 AkAudioPacket::pts() const
+const AkAudioCaps &AkAudioPacket::caps() const
 {
-    return this->d->m_pts;
+    return this->d->m_caps;
 }
 
-qint64 &AkAudioPacket::pts()
+size_t AkAudioPacket::size() const
 {
-    return this->d->m_pts;
+    return this->d->m_size;
 }
 
-AkFrac AkAudioPacket::timeBase() const
+size_t AkAudioPacket::samples() const
 {
-    return this->d->m_timeBase;
+    return this->d->m_samples;
 }
 
-AkFrac &AkAudioPacket::timeBase()
+size_t AkAudioPacket::planes() const
 {
-    return this->d->m_timeBase;
+    return this->d->m_nPlanes;
 }
 
-int AkAudioPacket::index() const
+size_t AkAudioPacket::planeSize(int plane) const
 {
-    return this->d->m_index;
+    return this->d->m_planeSize[plane];
 }
 
-int &AkAudioPacket::index()
+const char *AkAudioPacket::constData() const
 {
-    return this->d->m_index;
+    return reinterpret_cast<char *>(this->d->m_planes[0]);
 }
 
-void AkAudioPacket::copyMetadata(const AkAudioPacket &other)
+char *AkAudioPacket::data()
 {
-    this->d->m_pts = other.d->m_pts;
-    this->d->m_timeBase = other.d->m_timeBase;
-    this->d->m_index = other.d->m_index;
-    this->d->m_id = other.d->m_id;
+    return reinterpret_cast<char *>(this->d->m_planes[0]);
 }
 
-const quint8 *AkAudioPacket::constPlaneData(int plane) const
+const quint8 *AkAudioPacket::constPlane(int plane) const
 {
-    return reinterpret_cast<const quint8 *>(this->d->m_buffer.constData())
-            + this->d->m_caps.planeOffset(plane);
+    return this->d->m_planes[plane];
 }
 
-quint8 *AkAudioPacket::planeData(int plane)
+quint8 *AkAudioPacket::plane(int plane)
 {
-    return reinterpret_cast<quint8 *>(this->d->m_buffer.data())
-            + this->d->m_caps.planeOffset(plane);
+    return this->d->m_planes[plane];
 }
 
 const quint8 *AkAudioPacket::constSample(int channel, int i) const
@@ -260,11 +316,11 @@ const quint8 *AkAudioPacket::constSample
     auto bps = this->d->m_caps.bps();
 
     if (this->d->m_caps.planar())
-        return this->constPlaneData(channel) + i * bps / 8;
+        return this->d->m_planes[channel] + i * bps / 8;
 
     auto channels = this->d->m_caps.channels();
 
-    return this->constPlaneData(0) + (i * channels + channel) * bps / 8;
+    return this->d->m_planes[0] + (i * channels + channel) * bps / 8;
 }
 
 quint8 *AkAudioPacket::sample(int channel, int i)
@@ -272,11 +328,11 @@ quint8 *AkAudioPacket::sample(int channe
     auto bps = this->d->m_caps.bps();
 
     if (this->d->m_caps.planar())
-        return this->planeData(channel) + i * bps / 8;
+        return this->d->m_planes[channel] + i * bps / 8;
 
     auto channels = this->d->m_caps.channels();
 
-    return this->planeData(0) + (i * channels + channel) * bps / 8;
+    return this->d->m_planes[0] + (i * channels + channel) * bps / 8;
 }
 
 void AkAudioPacket::setSample(int channel, int i, const quint8 *sample)
@@ -284,59 +340,33 @@ void AkAudioPacket::setSample(int channe
     memcpy(this->sample(channel, i), sample, size_t(this->d->m_caps.bps()) / 8);
 }
 
-AkAudioPacket AkAudioPacket::realign(int align) const
-{
-    auto caps = this->d->m_caps;
-    caps.realign(align);
-
-    if (caps == this->d->m_caps)
-        return *this;
-
-    auto iPlaneSize = caps.planeSize();
-    auto oPlaneSize = this->d->m_caps.planeSize();
-    AkAudioPacket dst(caps);
-    dst.copyMetadata(*this);
-
-    for (int plane = 0; plane < caps.planes(); plane++) {
-        auto planeSize = qMin(iPlaneSize[plane], oPlaneSize[plane]);
-        auto src_line = this->constPlaneData(plane);
-        auto dst_line = dst.planeData(plane);
-        memcpy(dst_line, src_line, planeSize);
-    }
-
-    return dst;
-}
-
 AkAudioPacket AkAudioPacket::pop(int samples)
 {
-    auto caps = this->d->m_caps;
-    samples = qMin(caps.samples(), samples);
+    samples = qMin<size_t>(this->d->m_samples, samples);
 
     if (samples < 1)
         return {};
 
-    caps.setSamples(samples);
-    AkAudioPacket dst(caps);
+    AkAudioPacket dst(this->d->m_caps, samples);
     dst.copyMetadata(*this);
 
-    caps.setSamples(this->d->m_caps.samples() - samples);
-    AkAudioPacket tmpPacket(caps);
+    AkAudioPacket tmpPacket(this->d->m_caps, this->d->m_samples - samples);
     tmpPacket.copyMetadata(*this);
-    auto pts = this->d->m_pts
+    auto pts = this->pts()
                + samples
-               * this->d->m_timeBase.invert().value()
+               * this->timeBase().invert().value()
                / this->d->m_caps.rate();
     tmpPacket.setPts(qRound64(pts));
 
-    for (int plane = 0; plane < dst.caps().planes(); plane++) {
-        auto src_line = this->constPlaneData(plane);
-        auto dst_line = dst.planeData(plane);
-        auto dataSize = dst.caps().planeSize()[plane];
+    for (int plane = 0; plane < dst.d->m_nPlanes; ++plane) {
+        auto src_line = this->d->m_planes[plane];
+        auto dst_line = dst.d->m_planes[plane];
+        auto dataSize = dst.d->m_planeSize[plane];
         memcpy(dst_line, src_line, dataSize);
 
-        src_line = this->constPlaneData(plane) + dataSize;
-        dst_line = tmpPacket.planeData(plane);
-        dataSize = tmpPacket.caps().planeSize()[plane];
+        src_line = this->d->m_planes[plane] + dataSize;
+        dst_line = tmpPacket.d->m_planes[plane];
+        dataSize = tmpPacket.d->m_planeSize[plane];
 
         if (dataSize > 0)
             memcpy(dst_line, src_line, dataSize);
@@ -347,90 +377,6 @@ AkAudioPacket AkAudioPacket::pop(int sam
     return dst;
 }
 
-void AkAudioPacket::setCaps(const AkAudioCaps &caps)
-{
-    if (this->d->m_caps == caps)
-        return;
-
-    this->d->m_caps = caps;
-    emit this->capsChanged(caps);
-}
-
-void AkAudioPacket::setBuffer(const QByteArray &buffer)
-{
-    if (this->d->m_buffer == buffer)
-        return;
-
-    this->d->m_buffer = buffer;
-    emit this->bufferChanged(buffer);
-}
-
-void AkAudioPacket::setId(qint64 id)
-{
-    if (this->d->m_id == id)
-        return;
-
-    this->d->m_id = id;
-    emit this->idChanged(id);
-}
-
-void AkAudioPacket::setPts(qint64 pts)
-{
-    if (this->d->m_pts == pts)
-        return;
-
-    this->d->m_pts = pts;
-    emit this->ptsChanged(pts);
-}
-
-void AkAudioPacket::setTimeBase(const AkFrac &timeBase)
-{
-    if (this->d->m_timeBase == timeBase)
-        return;
-
-    this->d->m_timeBase = timeBase;
-    emit this->timeBaseChanged(timeBase);
-}
-
-void AkAudioPacket::setIndex(int index)
-{
-    if (this->d->m_index == index)
-        return;
-
-    this->d->m_index = index;
-    emit this->indexChanged(index);
-}
-
-void AkAudioPacket::resetCaps()
-{
-    this->setCaps({});
-}
-
-void AkAudioPacket::resetBuffer()
-{
-    this->setBuffer({});
-}
-
-void AkAudioPacket::resetId()
-{
-    this->setId(-1);
-}
-
-void AkAudioPacket::resetPts()
-{
-    this->setPts(0);
-}
-
-void AkAudioPacket::resetTimeBase()
-{
-    this->setTimeBase({});
-}
-
-void AkAudioPacket::resetIndex()
-{
-    this->setIndex(-1);
-}
-
 void AkAudioPacket::registerTypes()
 {
     qRegisterMetaType<AkAudioPacket>("AkAudioPacket");
@@ -450,8 +396,10 @@ QDebug operator <<(QDebug debug, const A
     debug.nospace() << "AkAudioPacket("
                     << "caps="
                     << packet.caps()
-                    << ",bufferSize="
-                    << packet.buffer().size()
+                    << ",samples="
+                    << packet.samples()
+                    << ",dataSize="
+                    << packet.size()
                     << ",id="
                     << packet.id()
                     << ",pts="
@@ -468,4 +416,67 @@ QDebug operator <<(QDebug debug, const A
     return debug;
 }
 
+AkAudioPacketPrivate::~AkAudioPacketPrivate()
+{
+    this->clearBuffers();
+}
+
+void AkAudioPacketPrivate::allocateBuffers(size_t planes)
+{
+    this->clearBuffers();
+
+    if (planes > 0) {
+        this->m_planes = new quint8 *[planes];
+        this->m_planeSize = new size_t[planes];
+        this->m_planeOffset = new size_t[planes];
+
+        memset(this->m_planes, 0, planes * sizeof(quint8 *));
+        memset(this->m_planeSize, 0, planes * sizeof(size_t));
+        memset(this->m_planeOffset, 0, planes * sizeof(size_t));
+    }
+}
+
+void AkAudioPacketPrivate::clearBuffers()
+{
+    if (this->m_planes) {
+        delete [] this->m_planes;
+        this->m_planes = nullptr;
+    }
+
+    if (this->m_planeSize) {
+        delete [] this->m_planeSize;
+        this->m_planeSize = nullptr;
+    }
+
+    if (this->m_planeOffset) {
+        delete [] this->m_planeOffset;
+        this->m_planeOffset = nullptr;
+    }
+}
+
+void AkAudioPacketPrivate::updateParams()
+{
+    this->m_size = 0;
+    this->allocateBuffers(this->m_nPlanes);
+    size_t lineSize = this->m_caps.planar()?
+                          size_t(this->m_caps.bps() * this->m_samples / 8):
+                          size_t(this->m_caps.bps()
+                                 * this->m_caps.channels()
+                                 * this->m_samples
+                                 / 8);
+
+    for (int i = 0; i < this->m_nPlanes; ++i) {
+        this->m_planeSize[i] = lineSize;
+        this->m_planeOffset[i] = this->m_size;
+        this->m_size += lineSize;
+    }
+}
+
+void AkAudioPacketPrivate::updatePlanes()
+{
+    for (int i = 0; i < this->m_nPlanes; ++i)
+        this->m_planes[i] = reinterpret_cast<quint8 *>(this->m_buffer.data())
+                            + this->m_planeOffset[i];
+}
+
 #include "moc_akaudiopacket.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akaudiopacket.h
+++ webcamoid-9.0.0/libAvKys/Lib/src/akaudiopacket.h
@@ -20,49 +20,36 @@
 #ifndef AKAUDIOPACKET_H
 #define AKAUDIOPACKET_H
 
-#include "akaudiocaps.h"
+#include "akpacketbase.h"
 
 class AkAudioPacketPrivate;
+class AkAudioCaps;
 class AkPacket;
-class AkFrac;
 
-class AKCOMMONS_EXPORT AkAudioPacket: public QObject
+class AKCOMMONS_EXPORT AkAudioPacket: public AkPacketBase
 {
     Q_OBJECT
     Q_PROPERTY(AkAudioCaps caps
                READ caps
-               WRITE setCaps
-               RESET resetCaps
-               NOTIFY capsChanged)
-    Q_PROPERTY(QByteArray buffer
-               READ buffer
-               WRITE setBuffer
-               RESET resetBuffer
-               NOTIFY bufferChanged)
-    Q_PROPERTY(qint64 id
-               READ id
-               WRITE setId
-               RESET resetId
-               NOTIFY idChanged)
-    Q_PROPERTY(qint64 pts
-               READ pts
-               WRITE setPts
-               RESET resetPts
-               NOTIFY ptsChanged)
-    Q_PROPERTY(AkFrac timeBase
-               READ timeBase
-               WRITE setTimeBase
-               RESET resetTimeBase
-               NOTIFY timeBaseChanged)
-    Q_PROPERTY(int index
-               READ index
-               WRITE setIndex
-               RESET resetIndex
-               NOTIFY indexChanged)
+               CONSTANT)
+    Q_PROPERTY(size_t size
+               READ size
+               CONSTANT)
+    Q_PROPERTY(size_t samples
+               READ samples
+               CONSTANT)
+    Q_PROPERTY(size_t planes
+               READ planes
+               CONSTANT)
 
     public:
         AkAudioPacket(QObject *parent=nullptr);
-        AkAudioPacket(const AkAudioCaps &caps);
+        AkAudioPacket(const AkAudioCaps &caps,
+                      size_t samples,
+                      bool initialized=false);
+        AkAudioPacket(size_t size,
+                      const AkAudioCaps &caps,
+                      bool initialized=false);
         AkAudioPacket(const AkPacket &other);
         AkAudioPacket(const AkAudioPacket &other);
         ~AkAudioPacket();
@@ -73,52 +60,24 @@ class AKCOMMONS_EXPORT AkAudioPacket: pu
         operator bool() const;
         operator AkPacket() const;
 
-        Q_INVOKABLE AkAudioCaps caps() const;
-        Q_INVOKABLE AkAudioCaps &caps();
-        Q_INVOKABLE QByteArray buffer() const;
-        Q_INVOKABLE QByteArray &buffer();
-        Q_INVOKABLE qint64 id() const;
-        Q_INVOKABLE qint64 &id();
-        Q_INVOKABLE qint64 pts() const;
-        Q_INVOKABLE qint64 &pts();
-        Q_INVOKABLE AkFrac timeBase() const;
-        Q_INVOKABLE AkFrac &timeBase();
-        Q_INVOKABLE int index() const;
-        Q_INVOKABLE int &index();
-        Q_INVOKABLE void copyMetadata(const AkAudioPacket &other);
-
-        Q_INVOKABLE const quint8 *constPlaneData(int plane) const;
-        Q_INVOKABLE quint8 *planeData(int plane);
+        Q_INVOKABLE const AkAudioCaps &caps() const;
+        Q_INVOKABLE size_t size() const;
+        Q_INVOKABLE size_t samples() const;
+        Q_INVOKABLE size_t planes() const;
+        Q_INVOKABLE size_t planeSize(int plane) const;
+        Q_INVOKABLE const char *constData() const;
+        Q_INVOKABLE char *data();
+        Q_INVOKABLE const quint8 *constPlane(int plane) const;
+        Q_INVOKABLE quint8 *plane(int plane);
         Q_INVOKABLE const quint8 *constSample(int channel, int i) const;
         Q_INVOKABLE quint8 *sample(int channel, int i);
         Q_INVOKABLE void setSample(int channel, int i, const quint8 *sample);
-        Q_INVOKABLE AkAudioPacket realign(int align) const;
         Q_INVOKABLE AkAudioPacket pop(int samples);
 
     private:
         AkAudioPacketPrivate *d;
 
-    Q_SIGNALS:
-        void capsChanged(const AkAudioCaps &caps);
-        void bufferChanged(const QByteArray &buffer);
-        void idChanged(qint64 id);
-        void ptsChanged(qint64 pts);
-        void timeBaseChanged(const AkFrac &timeBase);
-        void indexChanged(int index);
-
     public Q_SLOTS:
-        void setCaps(const AkAudioCaps &caps);
-        void setBuffer(const QByteArray &buffer);
-        void setId(qint64 id);
-        void setPts(qint64 pts);
-        void setTimeBase(const AkFrac &timeBase);
-        void setIndex(int index);
-        void resetCaps();
-        void resetBuffer();
-        void resetId();
-        void resetPts();
-        void resetTimeBase();
-        void resetIndex();
         static void registerTypes();
 };
 
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akcaps.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/akcaps.cpp
@@ -24,39 +24,62 @@
 #include <QQmlEngine>
 
 #include "akcaps.h"
+#include "akaudiocaps.h"
+#include "akcompressedvideocaps.h"
+#include "aksubtitlecaps.h"
+#include "akvideocaps.h"
 
 class AkCapsPrivate
 {
     public:
-        QString m_mimeType;
+        AkCaps::CapsType m_type {AkCaps::CapsUnknown};
+        void *m_privateData {nullptr};
+        AkCaps::DataCopy m_copyFunc {nullptr};
+        AkCaps::DataDeleter m_deleterFunc {nullptr};
 };
 
-AkCaps::AkCaps(const QString &mimeType, QObject *parent):
+AkCaps::AkCaps(QObject *parent):
     QObject(parent)
 {
     this->d = new AkCapsPrivate();
-    this->d->m_mimeType = mimeType;
 }
 
 AkCaps::AkCaps(const AkCaps &other):
     QObject()
 {
     this->d = new AkCapsPrivate();
-    this->d->m_mimeType = other.d->m_mimeType;
-    this->update(other);
+    this->d->m_type = other.d->m_type;
+
+    if (other.d->m_privateData && other.d->m_copyFunc)
+        this->d->m_privateData = other.d->m_copyFunc(other.d->m_privateData);
+
+    this->d->m_copyFunc = other.d->m_copyFunc;
+    this->d->m_deleterFunc = other.d->m_deleterFunc;
 }
 
 AkCaps::~AkCaps()
 {
+    if (this->d->m_privateData && this->d->m_copyFunc)
+        this->d->m_deleterFunc(this->d->m_privateData);
+
     delete this->d;
 }
 
 AkCaps &AkCaps::operator =(const AkCaps &other)
 {
     if (this != &other) {
-        this->d->m_mimeType = other.d->m_mimeType;
-        this->clear();
-        this->update(other);
+        this->d->m_type = other.d->m_type;
+
+        if (this->d->m_privateData && this->d->m_copyFunc) {
+            this->d->m_deleterFunc(this->d->m_privateData);
+            this->d->m_privateData = nullptr;
+        }
+
+        if (other.d->m_privateData && other.d->m_copyFunc)
+            this->d->m_privateData = other.d->m_copyFunc(other.d->m_privateData);
+
+        this->d->m_copyFunc = other.d->m_copyFunc;
+        this->d->m_deleterFunc = other.d->m_deleterFunc;
     }
 
     return *this;
@@ -64,130 +87,119 @@ AkCaps &AkCaps::operator =(const AkCaps
 
 bool AkCaps::operator ==(const AkCaps &other) const
 {
-    if (this->dynamicPropertyNames() != other.dynamicPropertyNames())
+    if (this->d->m_type != other.d->m_type)
         return false;
 
-    for (auto &property: this->dynamicPropertyNames())
-        if (this->property(property) != other.property(property))
-            return false;
+    if (this->d->m_privateData == other.d->m_privateData)
+        return true;
 
-    return this->d->m_mimeType == other.d->m_mimeType;
-}
+    switch (this->d->m_type) {
+    case CapsAudio:
+        if (AkAudioCaps(*this) == AkAudioCaps(other))
+            return false;
 
-bool AkCaps::operator !=(const AkCaps &other) const
-{
-    return !(*this == other);
-}
+        break;
+    case CapsVideoCompressed:
+        if (AkCompressedVideoCaps(*this) == AkCompressedVideoCaps(other))
+            return false;
 
-QObject *AkCaps::create(const QString &mimeType)
-{
-    return new AkCaps(mimeType);
-}
+        break;
+    case CapsSubtitle:
+        if (AkSubtitleCaps(*this) == AkSubtitleCaps(other))
+            return false;
 
-QObject *AkCaps::create(const AkCaps &caps)
-{
-    return new AkCaps(caps);
-}
+        break;
+    case CapsVideo:
+        if (AkVideoCaps(*this) == AkVideoCaps(other))
+            return false;
 
-QVariant AkCaps::toVariant() const
-{
-    return QVariant::fromValue(*this);
-}
+        break;
+    default:
+        break;
+    }
 
-AkCaps::operator bool() const
-{
-    return !this->d->m_mimeType.isEmpty();
+    return false;
 }
 
-QString AkCaps::mimeType() const
+bool AkCaps::operator !=(const AkCaps &other) const
 {
-    return this->d->m_mimeType;
+    return !(*this == other);
 }
 
-AkCaps AkCaps::fromMap(const QVariantMap &caps)
+AkCaps::operator bool() const
 {
-    AkCaps akCaps;
+    if (!this->d->m_type || !this->d->m_privateData)
+        return false;
 
-    if (!caps.contains("mimeType"))
-        return akCaps;
+    switch (this->d->m_type) {
+    case CapsAudio:
+        if (!AkAudioCaps(*this))
+            return false;
 
-    for (auto it = caps.begin(); it != caps.end(); it++)
-        akCaps.setProperty(it.key().toStdString().c_str(), it.value());
+        break;
+    case CapsVideoCompressed:
+        if (!AkCompressedVideoCaps(*this))
+            return false;
 
-    return akCaps;
-}
+        break;
+    case CapsSubtitle:
+        if (!AkSubtitleCaps(*this))
+            return false;
 
-QVariantMap AkCaps::toMap() const
-{
-    QVariantMap map {
-        {"mimeType", this->d->m_mimeType},
-    };
+        break;
+    case CapsVideo:
+        if (!AkVideoCaps(*this))
+            return false;
 
-    for (auto &property: this->dynamicPropertyNames()) {
-        auto key = QString::fromUtf8(property.constData());
-        map[key] = this->property(property);
+        break;
+    default:
+        break;
     }
 
-    return map;
+    return true;
 }
 
-AkCaps &AkCaps::update(const AkCaps &other)
+QObject *AkCaps::create()
 {
-    if (this->d->m_mimeType != other.d->m_mimeType)
-        return *this;
-
-    for (auto &property: other.dynamicPropertyNames())
-        this->setProperty(property.constData(),
-                          other.property(property.constData()));
-
-    return *this;
+    return new AkCaps;
 }
 
-bool AkCaps::isCompatible(const AkCaps &other) const
+QObject *AkCaps::create(const AkCaps &caps)
 {
-    if (this->d->m_mimeType != other.d->m_mimeType)
-        return false;
-
-    for (auto &property: other.dynamicPropertyNames())
-        if (!this->dynamicPropertyNames().contains(property) ||
-            this->property(property.constData()) != other.property(property.constData()))
-            return false;
-
-    return true;
+    return new AkCaps(caps);
 }
 
-bool AkCaps::contains(const QString &property) const
+QVariant AkCaps::toVariant() const
 {
-    return this->dynamicPropertyNames().contains(property.toUtf8());
+    return QVariant::fromValue(*this);
 }
 
-void AkCaps::setMimeType(const QString &mimeType)
+AkCaps::CapsType AkCaps::type() const
 {
-    QString _mimeType = mimeType.trimmed();
-
-    if (this->d->m_mimeType == _mimeType)
-        return;
+    return this->d->m_type;
+}
 
-    this->d->m_mimeType = _mimeType;
-    emit this->mimeTypeChanged(this->d->m_mimeType);
+void *AkCaps::privateData() const
+{
+    return this->d->m_privateData;
 }
 
-void AkCaps::resetMimeType()
+void AkCaps::setPrivateData(void *data, DataCopy copyFunc, DataDeleter deleterFunc)
 {
-    this->setMimeType("");
+    this->d->m_privateData = data;
+    this->d->m_copyFunc = copyFunc;
+    this->d->m_deleterFunc = deleterFunc;
 }
 
-void AkCaps::clear()
+void AkCaps::setType(CapsType type)
 {
-    for (auto &property: this->dynamicPropertyNames())
-        this->setProperty(property.constData(), QVariant());
+    this->d->m_type = type;
 }
 
 void AkCaps::registerTypes()
 {
     qRegisterMetaType<AkCaps>("AkCaps");
     qRegisterMetaTypeStreamOperators<AkCaps>("AkCaps");
-    qRegisterMetaType<CapsType>("CapsType");
     qmlRegisterSingletonType<AkCaps>("Ak", 1, 0, "AkCaps",
                                      [] (QQmlEngine *qmlEngine,
                                          QJSEngine *jsEngine) -> QObject * {
@@ -200,22 +212,24 @@ void AkCaps::registerTypes()
 
 QDebug operator <<(QDebug debug, const AkCaps &caps)
 {
-    debug.nospace() << "AkCaps("
-                    << "mimeType="
-                    << caps.mimeType();
-
-    QStringList properties;
-
-    for (auto &property: caps.dynamicPropertyNames())
-        properties << QString::fromUtf8(property.constData());
-
-    properties.sort();
-
-    for (auto &property: properties)
-        debug.nospace() << ","
-                        << property.toStdString().c_str()
-                        << "="
-                        << caps.property(property.toStdString().c_str());
+    debug.nospace() << "AkCaps(";
+
+    switch (caps.d->m_type) {
+    case AkCaps::CapsAudio:
+        debug.nospace() << *reinterpret_cast<AkAudioCaps *>(caps.d->m_privateData);
+        break;
+    case AkCaps::CapsVideoCompressed:
+        debug.nospace() << *reinterpret_cast<AkCompressedVideoCaps *>(caps.d->m_privateData);
+        break;
+    case AkCaps::CapsSubtitle:
+        debug.nospace() << *reinterpret_cast<AkSubtitleCaps *>(caps.d->m_privateData);
+        break;
+    case AkCaps::CapsVideo:
+        debug.nospace() << *reinterpret_cast<AkVideoCaps *>(caps.d->m_privateData);
+        break;
+    default:
+        break;
+    }
 
     debug.nospace() << ")";
 
@@ -224,16 +238,36 @@ QDebug operator <<(QDebug debug, const A
 
 QDataStream &operator >>(QDataStream &istream, AkCaps &caps)
 {
-    int nProperties;
-    istream >> nProperties;
-
-    for (int i = 0; i < nProperties; i++) {
-        QByteArray key;
-        QVariant value;
-        istream >> key;
-        istream >> value;
+    AkCaps::CapsType type;
+    istream >> type;
 
-        caps.setProperty(key.toStdString().c_str(), value);
+    switch (type) {
+    case AkCaps::CapsAudio: {
+        AkAudioCaps audioCaps;
+        istream >> audioCaps;
+        caps = audioCaps;
+        break;
+    }
+    case AkCaps::CapsVideoCompressed: {
+        AkCompressedVideoCaps videoCaps;
+        istream >> videoCaps;
+        caps = videoCaps;
+        break;
+    }
+    case AkCaps::CapsSubtitle: {
+        AkSubtitleCaps subtitleCaps;
+        istream >> subtitleCaps;
+        caps = subtitleCaps;
+        break;
+    }
+    case AkCaps::CapsVideo: {
+        AkVideoCaps videoCaps;
+        istream >> videoCaps;
+        caps = videoCaps;
+        break;
+    }
+    default:
+        break;
     }
 
     return istream;
@@ -241,20 +275,27 @@ QDataStream &operator >>(QDataStream &is
 
 QDataStream &operator <<(QDataStream &ostream, const AkCaps &caps)
 {
-    QVariantMap staticProperties {
-        {"mimeType", caps.mimeType()},
-    };
-
-    int nProperties =
-            staticProperties.size() + caps.dynamicPropertyNames().size();
-    ostream << nProperties;
-
-    for (auto &key: caps.dynamicPropertyNames()) {
-        ostream << key;
-        ostream << caps.property(key);
+    ostream << caps.d->m_type;
+
+    switch (caps.d->m_type) {
+    case AkCaps::CapsAudio:
+        ostream << *reinterpret_cast<AkAudioCaps *>(caps.d->m_privateData);
+        break;
+    case AkCaps::CapsVideoCompressed:
+        ostream << *reinterpret_cast<AkCompressedVideoCaps *>(caps.d->m_privateData);
+        break;
+    case AkCaps::CapsSubtitle:
+        ostream << *reinterpret_cast<AkSubtitleCaps *>(caps.d->m_privateData);
+        break;
+    case AkCaps::CapsVideo:
+        ostream << *reinterpret_cast<AkVideoCaps *>(caps.d->m_privateData);
+        break;
+    default:
+        break;
     }
 
     return ostream;
 }
 
 #include "moc_akcaps.cpp"
+
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akcaps.h
+++ webcamoid-9.0.0/libAvKys/Lib/src/akcaps.h
@@ -25,56 +25,67 @@
 #include "akcommons.h"
 
 class AkCapsPrivate;
+class AkAudioCaps;
+class AkCompressedVideoCaps;
+class AkSubtitleCaps;
+class AkVideoCaps;
 class QDataStream;
 
 class AKCOMMONS_EXPORT AkCaps: public QObject
 {
     Q_OBJECT
-    Q_ENUMS(CapsType)
-    Q_PROPERTY(QString mimeType
-               READ mimeType
-               WRITE setMimeType
-               RESET resetMimeType
-               NOTIFY mimeTypeChanged)
+    Q_PROPERTY(CapsType type
+               READ type
+               CONSTANT)
 
     public:
         enum CapsType
         {
             CapsUnknown = -1,
+            CapsAny = CapsUnknown,
             CapsAudio,
+            CapsAudioCompressed,
             CapsVideo,
+            CapsVideoCompressed,
             CapsSubtitle
         };
+        Q_ENUM(CapsType)
 
-        AkCaps(const QString &mimeType={}, QObject *parent=nullptr);
+        AkCaps(QObject *parent=nullptr);
         AkCaps(const AkCaps &other);
-        virtual ~AkCaps();
+        ~AkCaps();
         AkCaps &operator =(const AkCaps &other);
         bool operator ==(const AkCaps &other) const;
         bool operator !=(const AkCaps &other) const;
         operator bool() const;
 
-        Q_INVOKABLE static QObject *create(const QString &mimeType={});
+        Q_INVOKABLE static QObject *create();
         Q_INVOKABLE static QObject *create(const AkCaps &caps);
         Q_INVOKABLE QVariant toVariant() const;
-        Q_INVOKABLE virtual QString mimeType() const;
-        Q_INVOKABLE static AkCaps fromMap(const QVariantMap &caps);
-        Q_INVOKABLE QVariantMap toMap() const;
-        Q_INVOKABLE AkCaps &update(const AkCaps &other);
-        Q_INVOKABLE bool isCompatible(const AkCaps &other) const;
-        Q_INVOKABLE bool contains(const QString &property) const;
+        Q_INVOKABLE AkCaps::CapsType type() const;
 
     private:
         AkCapsPrivate *d;
 
-    Q_SIGNALS:
-        void mimeTypeChanged(const QString &mimeType);
+        using DataCopy = std::function<void *(void *data)>;
+        using DataDeleter = std::function<void (void *data)>;
+        void *privateData() const;
+        void setPrivateData(void *data,
+                            DataCopy copyFunc,
+                            DataDeleter deleterFunc);
+        void setType(AkCaps::CapsType type);
 
     public Q_SLOTS:
-        virtual void setMimeType(const QString &mimeType);
-        virtual void resetMimeType();
-        void clear();
         static void registerTypes();
+
+    friend QDebug operator <<(QDebug debug, const AkCaps &caps);
+    friend QDataStream &operator >>(QDataStream &istream, AkCaps &caps);
+    friend QDataStream &operator <<(QDataStream &ostream, const AkCaps &caps);
+    friend class AkAudioCaps;
+    friend class AkCapsPrivate;
+    friend class AkCompressedVideoCaps;
+    friend class AkSubtitleCaps;
+    friend class AkVideoCaps;
 };
 
 AKCOMMONS_EXPORT QDebug operator <<(QDebug debug, const AkCaps &caps);
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/akcolorcomponent.cpp
@@ -0,0 +1,291 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QDataStream>
+#include <QDebug>
+#include <QMetaEnum>
+#include <QQmlEngine>
+
+#include "akcolorcomponent.h"
+
+class AkColorComponentPrivate
+{
+    public:
+        AkColorComponent::ComponentType m_type {AkColorComponent::ComponentType(0)};
+        size_t m_step {0};       // Bytes to increment for reading th next pixel.
+        size_t m_offset {0};     // Bytes to skip before reading the component.
+        size_t m_shift {0};      // Shift the value n-bits to the left before reading the component.
+        size_t m_byteLength {0}; // Read n-bytes for the value.
+        size_t m_length {0};     // Size of the component in bits.
+        size_t m_widthDiv {0};   // Plane width should be divided by 2^widthDiv
+        size_t m_heightDiv {0};  // Plane height should be divided by 2^heightDiv
+};
+
+AkColorComponent::AkColorComponent(QObject *parent):
+    QObject(parent)
+{
+    this->d = new AkColorComponentPrivate();
+}
+
+AkColorComponent::AkColorComponent(ComponentType type,
+                                   size_t step,
+                                   size_t offset,
+                                   size_t shift,
+                                   size_t byteLength,
+                                   size_t length,
+                                   size_t widthDiv,
+                                   size_t heightDiv)
+{
+    this->d = new AkColorComponentPrivate();
+    this->d->m_type = type;
+    this->d->m_step = step;
+    this->d->m_offset = offset;
+    this->d->m_shift = shift;
+    this->d->m_byteLength = byteLength;
+    this->d->m_length = length;
+    this->d->m_widthDiv = widthDiv;
+    this->d->m_heightDiv = heightDiv;
+}
+
+AkColorComponent::AkColorComponent(const AkColorComponent &other):
+    QObject()
+{
+    this->d = new AkColorComponentPrivate();
+    this->d->m_type = other.d->m_type;
+    this->d->m_step = other.d->m_step;
+    this->d->m_offset = other.d->m_offset;
+    this->d->m_shift = other.d->m_shift;
+    this->d->m_byteLength = other.d->m_byteLength;
+    this->d->m_length = other.d->m_length;
+    this->d->m_widthDiv = other.d->m_widthDiv;
+    this->d->m_heightDiv = other.d->m_heightDiv;
+}
+
+AkColorComponent::~AkColorComponent()
+{
+    delete this->d;
+}
+
+AkColorComponent &AkColorComponent::operator =(const AkColorComponent &other)
+{
+    if (this != &other) {
+        this->d->m_type = other.d->m_type;
+        this->d->m_step = other.d->m_step;
+        this->d->m_offset = other.d->m_offset;
+        this->d->m_shift = other.d->m_shift;
+        this->d->m_byteLength = other.d->m_byteLength;
+        this->d->m_length = other.d->m_length;
+        this->d->m_widthDiv = other.d->m_widthDiv;
+        this->d->m_heightDiv = other.d->m_heightDiv;
+    }
+
+    return *this;
+}
+
+bool AkColorComponent::operator ==(const AkColorComponent &other) const
+{
+    return this->d->m_type == other.d->m_type
+           && this->d->m_step == other.d->m_step
+           && this->d->m_offset == other.d->m_offset
+           && this->d->m_shift == other.d->m_shift
+           && this->d->m_byteLength == other.d->m_byteLength
+           && this->d->m_length == other.d->m_length
+           && this->d->m_widthDiv == other.d->m_widthDiv
+           && this->d->m_heightDiv == other.d->m_heightDiv;
+}
+
+bool AkColorComponent::operator !=(const AkColorComponent &other) const
+{
+    return !(*this == other);
+}
+
+QObject *AkColorComponent::create()
+{
+    return new AkColorComponent();
+}
+
+QObject *AkColorComponent::create(const AkColorComponent &colorComponent)
+{
+    return new AkColorComponent(colorComponent);
+}
+
+QObject *AkColorComponent::create(ComponentType type,
+                                  size_t step,
+                                  size_t offset,
+                                  size_t shift,
+                                  size_t byteLength,
+                                  size_t length,
+                                  size_t widthDiv,
+                                  size_t heightDiv)
+{
+    return new AkColorComponent(type,
+                                step,
+                                offset,
+                                shift,
+                                byteLength,
+                                length,
+                                widthDiv,
+                                heightDiv);
+}
+
+QVariant AkColorComponent::toVariant() const
+{
+    return QVariant::fromValue(*this);
+}
+
+AkColorComponent::ComponentType AkColorComponent::type() const
+{
+    return this->d->m_type;
+}
+
+size_t AkColorComponent::step() const
+{
+    return this->d->m_step;
+}
+
+size_t AkColorComponent::offset() const
+{
+    return this->d->m_offset;
+}
+
+size_t AkColorComponent::shift() const
+{
+    return this->d->m_shift;
+}
+
+size_t AkColorComponent::byteLength() const
+{
+    return this->d->m_byteLength;
+}
+
+size_t AkColorComponent::length() const
+{
+    return this->d->m_length;
+}
+
+size_t AkColorComponent::widthDiv() const
+{
+    return this->d->m_widthDiv;
+}
+
+size_t AkColorComponent::heightDiv() const
+{
+    return this->d->m_heightDiv;
+}
+
+void AkColorComponent::registerTypes()
+{
+    qRegisterMetaType<AkColorComponent>("AkColorComponent");
+    qRegisterMetaType<AkColorComponentList>("AkColorComponentList");
+    qRegisterMetaTypeStreamOperators<AkColorComponent>("AkColorComponent");
+    qRegisterMetaType<ComponentType>("AkColorComponentType");
+    QMetaType::registerDebugStreamOperator<ComponentType>();
+    qmlRegisterSingletonType<AkColorComponent>("Ak", 1, 0, "AkColorComponent",
+                                          [] (QQmlEngine *qmlEngine,
+                                              QJSEngine *jsEngine) -> QObject * {
+        Q_UNUSED(qmlEngine)
+        Q_UNUSED(jsEngine)
+
+        return new AkColorComponent();
+    });
+}
+
+QDebug operator <<(QDebug debug, const AkColorComponent &colorComponent)
+{
+    debug.nospace() << "AkColorComponent("
+                    << "type="
+                    << colorComponent.type()
+                    << ",step="
+                    << colorComponent.step()
+                    << ",offset="
+                    << colorComponent.offset()
+                    << ",shift="
+                    << colorComponent.shift()
+                    << ",byteLength="
+                    << colorComponent.byteLength()
+                    << ",length="
+                    << colorComponent.length()
+                    << ",widthDiv="
+                    << colorComponent.widthDiv()
+                    << ",heightDiv="
+                    << colorComponent.heightDiv()
+                    << ")";
+
+    return debug.space();
+}
+
+QDebug operator <<(QDebug debug, AkColorComponent::ComponentType type)
+{
+    AkColorComponent colorComponent;
+    int componentTypeIndex =
+            colorComponent.metaObject()->indexOfEnumerator("ComponentType");
+    auto typeEnum = colorComponent.metaObject()->enumerator(componentTypeIndex);
+    QString format(typeEnum.valueToKey(type));
+    format.remove("CT_");
+    debug.nospace() << format.toStdString().c_str();
+
+    return debug.space();
+}
+
+QDataStream &operator >>(QDataStream &istream, AkColorComponent &colorComponent)
+{
+    auto type = AkColorComponent::ComponentType(0);
+    istream >> type;
+    int step = 0;
+    istream >> step;
+    int offset = 0;
+    istream >> offset;
+    int shift = 0;
+    istream >> shift;
+    int byteLength = 0;
+    istream >> byteLength;
+    int length = 0;
+    istream >> length;
+    int widthDiv = 0;
+    istream >> widthDiv;
+    int heightDiv = 0;
+    istream >> heightDiv;
+
+    colorComponent = {type,
+                      size_t(step),
+                      size_t(offset),
+                      size_t(shift),
+                      size_t(byteLength),
+                      size_t(length),
+                      size_t(widthDiv),
+                      size_t(heightDiv)};
+
+    return istream;
+}
+
+QDataStream &operator <<(QDataStream &ostream, const AkColorComponent &colorComponent)
+{
+    ostream << colorComponent.type();
+    ostream << int(colorComponent.step());
+    ostream << int(colorComponent.offset());
+    ostream << int(colorComponent.shift());
+    ostream << int(colorComponent.byteLength());
+    ostream << int(colorComponent.length());
+    ostream << int(colorComponent.widthDiv());
+    ostream << int(colorComponent.heightDiv());
+
+    return ostream;
+}
+
+#include "moc_akcolorcomponent.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/akcolorcomponent.h
@@ -0,0 +1,131 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef AKCOLORCOMPONENT_H
+#define AKCOLORCOMPONENT_H
+
+#include <QObject>
+
+#include "akcommons.h"
+
+class AkColorComponent;
+class AkColorComponentPrivate;
+
+using AkColorComponentList = QVector<AkColorComponent>;
+
+class AKCOMMONS_EXPORT AkColorComponent: public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(ComponentType type
+               READ type
+               CONSTANT)
+    Q_PROPERTY(size_t step
+               READ step
+               CONSTANT)
+    Q_PROPERTY(size_t offset
+               READ offset
+               CONSTANT)
+    Q_PROPERTY(size_t shift
+               READ shift
+               CONSTANT)
+    Q_PROPERTY(size_t byteLength
+               READ byteLength
+               CONSTANT)
+    Q_PROPERTY(size_t length
+               READ length
+               CONSTANT)
+    Q_PROPERTY(size_t widthDiv
+               READ widthDiv
+               CONSTANT)
+    Q_PROPERTY(size_t heightDiv
+               READ heightDiv
+               CONSTANT)
+
+    public:
+        enum ComponentType
+        {
+            CT_R,
+            CT_G,
+            CT_B,
+            CT_Y,
+            CT_U,
+            CT_V,
+            CT_A
+        };
+        Q_ENUM(ComponentType)
+
+        AkColorComponent(QObject *parent=nullptr);
+        AkColorComponent(ComponentType type,
+                         size_t step,
+                         size_t offset,
+                         size_t shift,
+                         size_t byteLength,
+                         size_t length,
+                         size_t widthDiv,
+                         size_t heightDiv);
+        AkColorComponent(const AkColorComponent &other);
+        ~AkColorComponent();
+        AkColorComponent &operator =(const AkColorComponent &other);
+        bool operator ==(const AkColorComponent &other) const;
+        bool operator !=(const AkColorComponent &other) const;
+
+        Q_INVOKABLE static QObject *create();
+        Q_INVOKABLE static QObject *create(const AkColorComponent &colorComponent);
+        Q_INVOKABLE static QObject *create(AkColorComponent::ComponentType type,
+                                           size_t step,
+                                           size_t offset,
+                                           size_t shift,
+                                           size_t byteLength,
+                                           size_t length,
+                                           size_t widthDiv,
+                                           size_t heightDiv);
+        Q_INVOKABLE QVariant toVariant() const;
+
+        Q_INVOKABLE AkColorComponent::ComponentType type() const;
+        Q_INVOKABLE size_t step() const;
+        Q_INVOKABLE size_t offset() const;
+        Q_INVOKABLE size_t shift() const;
+        Q_INVOKABLE size_t byteLength() const;
+        Q_INVOKABLE size_t length() const;
+        Q_INVOKABLE size_t widthDiv() const;
+        Q_INVOKABLE size_t heightDiv() const;
+
+        template <typename T>
+        inline T max() const
+        {
+            return (T(1) << this->length()) - 1;
+        }
+
+    private:
+        AkColorComponentPrivate *d;
+
+    public Q_SLOTS:
+        static void registerTypes();
+};
+
+AKCOMMONS_EXPORT QDebug operator <<(QDebug debug, const AkColorComponent &component);
+AKCOMMONS_EXPORT QDebug operator <<(QDebug debug, AkColorComponent::ComponentType type);
+AKCOMMONS_EXPORT QDataStream &operator >>(QDataStream &istream, AkColorComponent &component);
+AKCOMMONS_EXPORT QDataStream &operator <<(QDataStream &ostream, const AkColorComponent &component);
+
+Q_DECLARE_METATYPE(AkColorComponent)
+Q_DECLARE_METATYPE(AkColorComponentList)
+Q_DECLARE_METATYPE(AkColorComponent::ComponentType)
+
+#endif // AKCOLORCOMPONENT_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/akcolorplane.cpp
@@ -0,0 +1,214 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QDataStream>
+#include <QDebug>
+#include <QMetaEnum>
+#include <QQmlEngine>
+
+#include "akcolorplane.h"
+
+class AkColorPlanePrivate
+{
+    public:
+        AkColorComponentList m_components;
+        size_t m_bitsSize {0};
+        size_t m_pixelSize {0};
+        size_t m_widthDiv {0};
+        size_t m_heightDiv {0};
+};
+
+AkColorPlane::AkColorPlane(QObject *parent):
+    QObject(parent)
+{
+    this->d = new AkColorPlanePrivate();
+}
+
+AkColorPlane::AkColorPlane(const AkColorComponentList &components,
+                           size_t bitsSize)
+{
+    this->d = new AkColorPlanePrivate();
+    this->d->m_components = components;
+    this->d->m_bitsSize = bitsSize;
+
+    for (auto &component: components) {
+        this->d->m_pixelSize = qMax(this->d->m_pixelSize, component.step());
+        this->d->m_widthDiv = this->d->m_widthDiv < 1?
+                                  component.widthDiv():
+                                  qMin(this->d->m_widthDiv, component.widthDiv());
+        this->d->m_heightDiv = qMax(this->d->m_heightDiv, component.heightDiv());
+    }
+}
+
+AkColorPlane::AkColorPlane(const AkColorPlane &other):
+    QObject()
+{
+    this->d = new AkColorPlanePrivate();
+    this->d->m_components = other.d->m_components;
+    this->d->m_bitsSize = other.d->m_bitsSize;
+    this->d->m_pixelSize = other.d->m_pixelSize;
+    this->d->m_widthDiv = other.d->m_widthDiv;
+    this->d->m_heightDiv = other.d->m_heightDiv;
+}
+
+AkColorPlane::~AkColorPlane()
+{
+    delete this->d;
+}
+
+AkColorPlane &AkColorPlane::operator =(const AkColorPlane &other)
+{
+    if (this != &other) {
+        this->d->m_components = other.d->m_components;
+        this->d->m_bitsSize = other.d->m_bitsSize;
+        this->d->m_pixelSize = other.d->m_pixelSize;
+        this->d->m_widthDiv = other.d->m_widthDiv;
+        this->d->m_heightDiv = other.d->m_heightDiv;
+    }
+
+    return *this;
+}
+
+bool AkColorPlane::operator ==(const AkColorPlane &other) const
+{
+    return this->d->m_components == other.d->m_components
+           && this->d->m_bitsSize == other.d->m_bitsSize;
+}
+
+bool AkColorPlane::operator !=(const AkColorPlane &other) const
+{
+    return !(*this == other);
+}
+
+QObject *AkColorPlane::create()
+{
+    return new AkColorComponent();
+}
+
+QObject *AkColorPlane::create(const AkColorPlane &colorComponent)
+{
+    return new AkColorPlane(colorComponent);
+}
+
+QObject *AkColorPlane::create(const AkColorComponentList &components,
+                              size_t bitsSize)
+{
+    return new AkColorPlane(components, bitsSize);
+}
+
+QVariant AkColorPlane::toVariant() const
+{
+    return QVariant::fromValue(*this);
+}
+
+size_t AkColorPlane::components() const
+{
+    return this->d->m_components.size();
+}
+
+const AkColorComponent &AkColorPlane::component(size_t component) const
+{
+    return this->d->m_components[component];
+}
+
+size_t AkColorPlane::bitsSize() const
+{
+    return this->d->m_bitsSize;
+}
+
+size_t AkColorPlane::pixelSize() const
+{
+    return this->d->m_pixelSize;
+}
+
+size_t AkColorPlane::widthDiv() const
+{
+    return this->d->m_widthDiv;
+}
+
+size_t AkColorPlane::heightDiv() const
+{
+    return this->d->m_heightDiv;
+}
+
+void AkColorPlane::registerTypes()
+{
+    qRegisterMetaType<AkColorPlane>("AkColorPlane");
+    qRegisterMetaType<AkColorPlanes>("AkColorPlanes");
+    qRegisterMetaTypeStreamOperators<AkColorPlane>("AkColorPlane");
+    qmlRegisterSingletonType<AkColorPlane>("Ak", 1, 0, "AkColorPlane",
+                                          [] (QQmlEngine *qmlEngine,
+                                              QJSEngine *jsEngine) -> QObject * {
+        Q_UNUSED(qmlEngine)
+        Q_UNUSED(jsEngine)
+
+        return new AkColorPlane();
+    });
+}
+
+QDebug operator <<(QDebug debug, const AkColorPlane &colorPlane)
+{
+    debug.nospace() << "AkColorPlane("
+                    << "components="
+                    << colorPlane.components()
+                    << ",bitsSize="
+                    << colorPlane.bitsSize()
+                    << ",pixelSize="
+                    << colorPlane.pixelSize()
+                    << ",heightDiv="
+                    << colorPlane.heightDiv()
+                    << ")";
+
+    return debug.space();
+}
+
+QDataStream &operator >>(QDataStream &istream, AkColorPlane &colorPlane)
+{
+    int nComponents = 0;
+    istream >> nComponents;
+    AkColorComponentList components;
+
+    for (int i = 0; i < nComponents; i++) {
+        AkColorComponent component;
+        istream >> component;
+        components << component;
+    }
+
+    int bitsSize = 0;
+    istream >> bitsSize;
+
+    colorPlane = {components, size_t(bitsSize)};
+
+    return istream;
+}
+
+QDataStream &operator <<(QDataStream &ostream, const AkColorPlane &colorPlane)
+{
+    auto components = colorPlane.components();
+    ostream << int(components);
+
+    for (size_t i = 0; i < components; ++i)
+        ostream << colorPlane.component(i);
+
+    ostream << int(colorPlane.bitsSize());
+
+    return ostream;
+}
+
+#include "moc_akcolorplane.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/akcolorplane.h
@@ -0,0 +1,83 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef AKCOLORPLANE_H
+#define AKCOLORPLANE_H
+
+#include "akcolorcomponent.h"
+
+class AkColorPlane;
+class AkColorPlanePrivate;
+
+using AkColorPlanes = QVector<AkColorPlane>;
+
+class AKCOMMONS_EXPORT AkColorPlane: public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(size_t components
+               READ components
+               CONSTANT)
+    Q_PROPERTY(size_t bitsSize
+               READ bitsSize
+               CONSTANT)
+    Q_PROPERTY(size_t pixelSize
+               READ pixelSize
+               CONSTANT)
+    Q_PROPERTY(size_t heightDiv
+               READ heightDiv
+               CONSTANT)
+
+    public:
+        AkColorPlane(QObject *parent=nullptr);
+        AkColorPlane(const AkColorComponentList &components,
+                     size_t bitsSize);
+        AkColorPlane(const AkColorPlane &other);
+        ~AkColorPlane();
+        AkColorPlane &operator =(const AkColorPlane &other);
+        bool operator ==(const AkColorPlane &other) const;
+        bool operator !=(const AkColorPlane &other) const;
+
+        Q_INVOKABLE static QObject *create();
+        Q_INVOKABLE static QObject *create(const AkColorPlane &colorPlane);
+        Q_INVOKABLE static QObject *create(const AkColorComponentList &components,
+                                           size_t bitsSize);
+        Q_INVOKABLE QVariant toVariant() const;
+
+        Q_INVOKABLE size_t components() const;
+        Q_INVOKABLE const AkColorComponent &component(size_t component) const;
+        Q_INVOKABLE size_t bitsSize() const;
+        Q_INVOKABLE size_t pixelSize() const;
+        Q_INVOKABLE size_t widthDiv() const;
+        Q_INVOKABLE size_t heightDiv() const;
+
+    private:
+        AkColorPlanePrivate *d;
+
+    public Q_SLOTS:
+        static void registerTypes();
+};
+
+AKCOMMONS_EXPORT QDebug operator <<(QDebug debug, const AkColorPlane &plane);
+AKCOMMONS_EXPORT QDataStream &operator >>(QDataStream &istream, AkColorPlane &plane);
+AKCOMMONS_EXPORT QDataStream &operator <<(QDataStream &ostream, const AkColorPlane &plane);
+
+Q_DECLARE_METATYPE(AkColorPlane)
+Q_DECLARE_METATYPE(AkColorPlanes)
+
+#endif // AKCOLORPLANE_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/akcompressedvideocaps.cpp
@@ -0,0 +1,357 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2016  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QDataStream>
+#include <QDebug>
+#include <QMetaEnum>
+#include <QSize>
+#include <QQmlEngine>
+
+#include "akcompressedvideocaps.h"
+#include "akfrac.h"
+#include "akcaps.h"
+
+class AkCompressedVideoCapsPrivate
+{
+    public:
+        QString m_format;
+        int m_width {0};
+        int m_height {0};
+        AkFrac m_fps;
+};
+
+AkCompressedVideoCaps::AkCompressedVideoCaps(QObject *parent):
+    QObject(parent)
+{
+    this->d = new AkCompressedVideoCapsPrivate();
+}
+
+AkCompressedVideoCaps::AkCompressedVideoCaps(const QString &format,
+                                             int width,
+                                             int height,
+                                             const AkFrac &fps):
+    QObject()
+{
+    this->d = new AkCompressedVideoCapsPrivate();
+    this->d->m_format = format;
+    this->d->m_width = width;
+    this->d->m_height = height;
+    this->d->m_fps = fps;
+}
+
+AkCompressedVideoCaps::AkCompressedVideoCaps(const QString &format,
+                                             const QSize &size,
+                                             const AkFrac &fps):
+    QObject()
+{
+    this->d = new AkCompressedVideoCapsPrivate();
+    this->d->m_format = format;
+    this->d->m_width = size.width();
+    this->d->m_height = size.height();
+    this->d->m_fps = fps;
+}
+
+AkCompressedVideoCaps::AkCompressedVideoCaps(const AkCaps &other):
+    QObject()
+{
+    this->d = new AkCompressedVideoCapsPrivate();
+
+    if (other.type() == AkCaps::CapsVideoCompressed) {
+        auto data = reinterpret_cast<AkCompressedVideoCaps *>(other.privateData());
+        this->d->m_format = data->d->m_format;
+        this->d->m_width = data->d->m_width;
+        this->d->m_height = data->d->m_height;
+        this->d->m_fps = data->d->m_fps;
+    }
+}
+
+AkCompressedVideoCaps::AkCompressedVideoCaps(const AkCompressedVideoCaps &other):
+    QObject()
+{
+    this->d = new AkCompressedVideoCapsPrivate();
+    this->d->m_format = other.d->m_format;
+    this->d->m_width = other.d->m_width;
+    this->d->m_height = other.d->m_height;
+    this->d->m_fps = other.d->m_fps;
+}
+
+AkCompressedVideoCaps::~AkCompressedVideoCaps()
+{
+    delete this->d;
+}
+
+AkCompressedVideoCaps &AkCompressedVideoCaps::operator =(const AkCaps &other)
+{
+    if (other.type() == AkCaps::CapsVideoCompressed) {
+        auto data = reinterpret_cast<AkCompressedVideoCaps *>(other.privateData());
+        this->d->m_format = data->d->m_format;
+        this->d->m_width = data->d->m_width;
+        this->d->m_height = data->d->m_height;
+        this->d->m_fps = data->d->m_fps;
+    } else {
+        this->d->m_format = "";
+        this->d->m_width = 0;
+        this->d->m_height = 0;
+        this->d->m_fps = {};
+    }
+
+    return *this;
+}
+
+AkCompressedVideoCaps &AkCompressedVideoCaps::operator =(const AkCompressedVideoCaps &other)
+{
+    if (this != &other) {
+        this->d->m_format = other.d->m_format;
+        this->d->m_width = other.d->m_width;
+        this->d->m_height = other.d->m_height;
+        this->d->m_fps = other.d->m_fps;
+    }
+
+    return *this;
+}
+
+bool AkCompressedVideoCaps::operator ==(const AkCompressedVideoCaps &other) const
+{
+    return this->d->m_format == other.d->m_format
+            && this->d->m_width == other.d->m_width
+            && this->d->m_height == other.d->m_height
+            && this->d->m_fps == other.d->m_fps;
+}
+
+bool AkCompressedVideoCaps::operator !=(const AkCompressedVideoCaps &other) const
+{
+    return !(*this == other);
+}
+
+AkCompressedVideoCaps::operator bool() const
+{
+    return !this->d->m_format.isEmpty()
+           && this->d->m_width > 0
+           && this->d->m_height > 0;
+}
+
+AkCompressedVideoCaps::operator AkCaps() const
+{
+    AkCaps caps;
+    caps.setType(AkCaps::CapsVideoCompressed);
+    caps.setPrivateData(new AkCompressedVideoCaps(*this),
+                        [] (void *data) -> void * {
+                            return new AkCompressedVideoCaps(*reinterpret_cast<AkCompressedVideoCaps *>(data));
+                        },
+                        [] (void *data) {
+                            delete reinterpret_cast<AkCompressedVideoCaps *>(data);
+                        });
+
+    return caps;
+}
+
+QObject *AkCompressedVideoCaps::create()
+{
+    return new AkCompressedVideoCaps();
+}
+
+QObject *AkCompressedVideoCaps::create(const AkCaps &caps)
+{
+    return new AkCompressedVideoCaps(caps);
+}
+
+QObject *AkCompressedVideoCaps::create(const AkCompressedVideoCaps &caps)
+{
+    return new AkCompressedVideoCaps(caps);
+}
+
+QObject *AkCompressedVideoCaps::create(const QString &format,
+                                       int width,
+                                       int height,
+                                       const AkFrac &fps)
+{
+    return new AkCompressedVideoCaps(format, width, height, fps);
+}
+
+QObject *AkCompressedVideoCaps::create(const QString &format,
+                             const QSize &size,
+                             const AkFrac &fps)
+{
+    return new AkCompressedVideoCaps(format, size, fps);
+}
+
+QVariant AkCompressedVideoCaps::toVariant() const
+{
+    return QVariant::fromValue(*this);
+}
+
+QString AkCompressedVideoCaps::format() const
+{
+    return this->d->m_format;
+}
+
+int AkCompressedVideoCaps::width() const
+{
+    return this->d->m_width;
+}
+
+int AkCompressedVideoCaps::height() const
+{
+    return this->d->m_height;
+}
+
+AkFrac AkCompressedVideoCaps::fps() const
+{
+    return this->d->m_fps;
+}
+
+AkFrac &AkCompressedVideoCaps::fps()
+{
+    return this->d->m_fps;
+}
+
+void AkCompressedVideoCaps::setFormat(const QString &format)
+{
+    if (this->d->m_format == format)
+        return;
+
+    this->d->m_format = format;
+    emit this->formatChanged(format);
+}
+
+void AkCompressedVideoCaps::setSize(const QSize &size)
+{
+    QSize curSize(this->d->m_width, this->d->m_height);
+
+    if (curSize == size)
+        return;
+
+    this->d->m_width = size.width();
+    this->d->m_height = size.height();
+    emit this->widthChanged(size.width());
+    emit this->heightChanged(size.height());
+    emit sizeChanged(size);
+}
+
+void AkCompressedVideoCaps::setWidth(int width)
+{
+    if (this->d->m_width == width)
+        return;
+
+    this->d->m_width = width;
+    emit this->widthChanged(width);
+}
+
+void AkCompressedVideoCaps::setHeight(int height)
+{
+    if (this->d->m_height == height)
+        return;
+
+    this->d->m_height = height;
+    emit this->heightChanged(height);
+}
+
+void AkCompressedVideoCaps::setFps(const AkFrac &fps)
+{
+    if (this->d->m_fps == fps)
+        return;
+
+    this->d->m_fps = fps;
+    emit this->fpsChanged(fps);
+}
+
+void AkCompressedVideoCaps::resetFormat()
+{
+    this->setFormat({});
+}
+
+void AkCompressedVideoCaps::resetSize()
+{
+    this->setSize({});
+}
+
+void AkCompressedVideoCaps::resetWidth()
+{
+    this->setWidth(0);
+}
+
+void AkCompressedVideoCaps::resetHeight()
+{
+    this->setHeight(0);
+}
+
+void AkCompressedVideoCaps::resetFps()
+{
+    this->setFps(AkFrac());
+}
+
+void AkCompressedVideoCaps::registerTypes()
+{
+    qRegisterMetaType<AkCompressedVideoCaps>("AkCompressedVideoCaps");
+    qRegisterMetaTypeStreamOperators<AkCompressedVideoCaps>("AkCompressedVideoCaps");
+    qmlRegisterSingletonType<AkCompressedVideoCaps>("Ak", 1, 0, "AkCompressedVideoCaps",
+                                          [] (QQmlEngine *qmlEngine,
+                                              QJSEngine *jsEngine) -> QObject * {
+        Q_UNUSED(qmlEngine)
+        Q_UNUSED(jsEngine)
+
+        return new AkCompressedVideoCaps();
+    });
+}
+
+QDebug operator <<(QDebug debug, const AkCompressedVideoCaps &caps)
+{
+    debug.nospace() << "AkCompressedVideoCaps("
+                    << "format="
+                    << caps.format()
+                    << ",width="
+                    << caps.width()
+                    << ",height="
+                    << caps.height()
+                    << ",fps="
+                    << caps.fps()
+                    << ")";
+
+    return debug.space();
+}
+
+QDataStream &operator >>(QDataStream &istream, AkCompressedVideoCaps &caps)
+{
+    QString format;
+    istream >> format;
+    caps.setFormat(format);
+    int width = 0;
+    istream >> width;
+    caps.setWidth(width);
+    int height = 0;
+    istream >> height;
+    caps.setHeight(height);
+    AkFrac fps;
+    istream >> fps;
+    caps.setFps(fps);
+
+    return istream;
+}
+
+QDataStream &operator <<(QDataStream &ostream, const AkCompressedVideoCaps &caps)
+{
+    ostream << caps.format();
+    ostream << caps.width();
+    ostream << caps.height();
+    ostream << caps.fps();
+
+    return ostream;
+}
+
+#include "moc_akcompressedvideocaps.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/akcompressedvideocaps.h
@@ -0,0 +1,122 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef AKCOMPRESSEDVIDEOCAPS_H
+#define AKCOMPRESSEDVIDEOCAPS_H
+
+#include <QObject>
+
+#include "akcommons.h"
+
+class AkCompressedVideoCapsPrivate;
+class AkCaps;
+class AkFrac;
+
+class AKCOMMONS_EXPORT AkCompressedVideoCaps: public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(QString format
+               READ format
+               WRITE setFormat
+               RESET resetFormat
+               NOTIFY formatChanged)
+    Q_PROPERTY(int width
+               READ width
+               WRITE setWidth
+               RESET resetWidth
+               NOTIFY widthChanged)
+    Q_PROPERTY(int height
+               READ height
+               WRITE setHeight
+               RESET resetHeight
+               NOTIFY heightChanged)
+    Q_PROPERTY(AkFrac fps
+               READ fps
+               WRITE setFps
+               RESET resetFps
+               NOTIFY fpsChanged)
+
+    public:
+        AkCompressedVideoCaps(QObject *parent=nullptr);
+        AkCompressedVideoCaps(const QString &format,
+                              int width,
+                              int height,
+                              const AkFrac &fps);
+        AkCompressedVideoCaps(const QString &format,
+                              const QSize &size,
+                              const AkFrac &fps);
+        AkCompressedVideoCaps(const AkCaps &other);
+        AkCompressedVideoCaps(const AkCompressedVideoCaps &other);
+        ~AkCompressedVideoCaps();
+        AkCompressedVideoCaps &operator =(const AkCaps &other);
+        AkCompressedVideoCaps &operator =(const AkCompressedVideoCaps &other);
+        bool operator ==(const AkCompressedVideoCaps &other) const;
+        bool operator !=(const AkCompressedVideoCaps &other) const;
+        operator bool() const;
+        operator AkCaps() const;
+
+        Q_INVOKABLE static QObject *create();
+        Q_INVOKABLE static QObject *create(const AkCaps &caps);
+        Q_INVOKABLE static QObject *create(const AkCompressedVideoCaps &caps);
+        Q_INVOKABLE static QObject *create(const QString &format,
+                                           int width,
+                                           int height,
+                                           const AkFrac &fps);
+        Q_INVOKABLE static QObject *create(const QString &format,
+                                           const QSize &size,
+                                           const AkFrac &fps);
+        Q_INVOKABLE QVariant toVariant() const;
+
+        Q_INVOKABLE QString format() const;
+        Q_INVOKABLE int width() const;
+        Q_INVOKABLE int height() const;
+        Q_INVOKABLE AkFrac fps() const;
+        Q_INVOKABLE AkFrac &fps();
+
+    private:
+        AkCompressedVideoCapsPrivate *d;
+
+    Q_SIGNALS:
+        void formatChanged(const QString &format);
+        void sizeChanged(const QSize &size);
+        void widthChanged(int width);
+        void heightChanged(int height);
+        void fpsChanged(const AkFrac &fps);
+
+    public Q_SLOTS:
+        void setFormat(const QString &format);
+        void setSize(const QSize &size);
+        void setWidth(int width);
+        void setHeight(int height);
+        void setFps(const AkFrac &fps);
+        void resetFormat();
+        void resetSize();
+        void resetWidth();
+        void resetHeight();
+        void resetFps();
+        static void registerTypes();
+};
+
+AKCOMMONS_EXPORT QDebug operator <<(QDebug debug, const AkCompressedVideoCaps &caps);
+AKCOMMONS_EXPORT QDataStream &operator >>(QDataStream &istream, AkCompressedVideoCaps &caps);
+AKCOMMONS_EXPORT QDataStream &operator <<(QDataStream &ostream, const AkCompressedVideoCaps &caps);
+
+Q_DECLARE_METATYPE(AkCompressedVideoCaps)
+
+#endif // AKCOMPRESSEDVIDEOCAPS_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/akcompressedvideopacket.cpp
@@ -0,0 +1,184 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2016  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QDebug>
+#include <QQmlEngine>
+
+#include "akcompressedvideopacket.h"
+#include "akcompressedvideocaps.h"
+#include "akfrac.h"
+#include "akpacket.h"
+
+class AkCompressedVideoPacketPrivate
+{
+    public:
+        AkCompressedVideoCaps m_caps;
+        QByteArray m_data;
+};
+
+AkCompressedVideoPacket::AkCompressedVideoPacket(QObject *parent):
+    AkPacketBase(parent)
+{
+    this->d = new AkCompressedVideoPacketPrivate();
+}
+
+AkCompressedVideoPacket::AkCompressedVideoPacket(const AkCompressedVideoCaps &caps,
+                                                 size_t size,
+                                                 bool initialized):
+    AkPacketBase()
+{
+    this->d = new AkCompressedVideoPacketPrivate();
+    this->d->m_caps = caps;
+
+    if (initialized)
+        this->d->m_data = QByteArray(int(size), 0);
+    else
+        this->d->m_data = QByteArray(int(size), Qt::Uninitialized);
+}
+
+AkCompressedVideoPacket::AkCompressedVideoPacket(const AkPacket &other):
+    AkPacketBase(other)
+{
+    this->d = new AkCompressedVideoPacketPrivate();
+
+    if (other.type() == AkPacket::PacketVideoCompressed) {
+        auto data = reinterpret_cast<AkCompressedVideoPacket *>(other.privateData());
+        this->d->m_caps = data->d->m_caps;
+        this->d->m_data = data->d->m_data;
+    }
+}
+
+AkCompressedVideoPacket::AkCompressedVideoPacket(const AkCompressedVideoPacket &other):
+    AkPacketBase(other)
+{
+    this->d = new AkCompressedVideoPacketPrivate();
+    this->d->m_caps = other.d->m_caps;
+    this->d->m_data = other.d->m_data;
+}
+
+AkCompressedVideoPacket::~AkCompressedVideoPacket()
+{
+    delete this->d;
+}
+
+AkCompressedVideoPacket &AkCompressedVideoPacket::operator =(const AkPacket &other)
+{
+    if (other.type() == AkPacket::PacketVideoCompressed) {
+        auto data = reinterpret_cast<AkCompressedVideoPacket *>(other.privateData());
+        this->d->m_caps = data->d->m_caps;
+        this->d->m_data = data->d->m_data;
+    } else {
+        this->d->m_caps = AkCompressedVideoCaps();
+        this->d->m_data.clear();
+    }
+
+    this->copyMetadata(other);
+
+    return *this;
+}
+
+AkCompressedVideoPacket &AkCompressedVideoPacket::operator =(const AkCompressedVideoPacket &other)
+{
+    if (this != &other) {
+        this->d->m_caps = other.d->m_caps;
+        this->d->m_data = other.d->m_data;
+        this->copyMetadata(other);
+    }
+
+    return *this;
+}
+
+AkCompressedVideoPacket::operator bool() const
+{
+    return this->d->m_caps && !this->d->m_data.isEmpty();
+}
+
+AkCompressedVideoPacket::operator AkPacket() const
+{
+    AkPacket packet;
+    packet.setType(AkPacket::PacketVideoCompressed);
+    packet.setPrivateData(new AkCompressedVideoPacket(*this),
+                          [] (void *data) -> void * {
+                              return new AkCompressedVideoPacket(*reinterpret_cast<AkCompressedVideoPacket *>(data));
+                          },
+                          [] (void *data) {
+                              delete reinterpret_cast<AkCompressedVideoPacket *>(data);
+                          });
+    packet.copyMetadata(*this);
+
+    return packet;
+}
+
+const AkCompressedVideoCaps &AkCompressedVideoPacket::caps() const
+{
+    return this->d->m_caps;
+}
+
+char *AkCompressedVideoPacket::data() const
+{
+    return this->d->m_data.data();
+}
+
+const char *AkCompressedVideoPacket::constData() const
+{
+    return this->d->m_data.constData();
+}
+
+size_t AkCompressedVideoPacket::size() const
+{
+    return this->d->m_data.size();
+}
+
+void AkCompressedVideoPacket::registerTypes()
+{
+    qRegisterMetaType<AkCompressedVideoPacket>("AkCompressedVideoPacket");
+    qmlRegisterSingletonType<AkCompressedVideoPacket>("Ak", 1, 0, "AkCompressedVideoPacket",
+                                            [] (QQmlEngine *qmlEngine,
+                                                QJSEngine *jsEngine) -> QObject * {
+        Q_UNUSED(qmlEngine)
+        Q_UNUSED(jsEngine)
+
+        return new AkCompressedVideoPacket();
+    });
+}
+
+QDebug operator <<(QDebug debug, const AkCompressedVideoPacket &packet)
+{
+    debug.nospace() << "AkCompressedVideoPacket("
+                    << "caps="
+                    << packet.caps()
+                    << ",dataSize="
+                    << packet.size()
+                    << ",id="
+                    << packet.id()
+                    << ",pts="
+                    << packet.pts()
+                    << "("
+                    << packet.pts() * packet.timeBase().value()
+                    << ")"
+                    << ",timeBase="
+                    << packet.timeBase()
+                    << ",index="
+                    << packet.index()
+                    << ")";
+
+    return debug.space();
+}
+
+#include "moc_akcompressedvideopacket.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/akcompressedvideopacket.h
@@ -0,0 +1,68 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2016  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef ACOMPRESSEDKVIDEOPACKET_H
+#define ACOMPRESSEDKVIDEOPACKET_H
+
+#include "akpacketbase.h"
+
+class AkCompressedVideoPacketPrivate;
+class AkCompressedVideoCaps;
+class AkPacket;
+
+class AKCOMMONS_EXPORT AkCompressedVideoPacket: public AkPacketBase
+{
+    Q_OBJECT
+    Q_PROPERTY(AkCompressedVideoCaps caps
+               READ caps
+               CONSTANT)
+    Q_PROPERTY(size_t size
+               READ size
+               CONSTANT)
+
+    public:
+        AkCompressedVideoPacket(QObject *parent=nullptr);
+        AkCompressedVideoPacket(const AkCompressedVideoCaps &caps,
+                                size_t size,
+                                bool initialized=false);
+        AkCompressedVideoPacket(const AkPacket &other);
+        AkCompressedVideoPacket(const AkCompressedVideoPacket &other);
+        ~AkCompressedVideoPacket();
+        AkCompressedVideoPacket &operator =(const AkPacket &other);
+        AkCompressedVideoPacket &operator =(const AkCompressedVideoPacket &other);
+        operator bool() const;
+        operator AkPacket() const;
+
+        Q_INVOKABLE const AkCompressedVideoCaps &caps() const;
+        Q_INVOKABLE char *data() const;
+        Q_INVOKABLE const char *constData() const;
+        Q_INVOKABLE size_t size() const;
+
+    private:
+        AkCompressedVideoPacketPrivate *d;
+
+    public Q_SLOTS:
+        static void registerTypes();
+};
+
+AKCOMMONS_EXPORT QDebug operator <<(QDebug debug, const AkCompressedVideoPacket &packet);
+
+Q_DECLARE_METATYPE(AkCompressedVideoPacket)
+
+#endif // AKCOMPRESSEDVIDEOPACKET_H
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akelement.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/akelement.cpp
@@ -25,7 +25,6 @@
 #include <QQmlEngine>
 
 #include "akelement.h"
-#include "akcaps.h"
 #include "akpacket.h"
 #include "akaudiopacket.h"
 #include "akvideopacket.h"
@@ -191,11 +190,6 @@ bool AkElement::unlink(const QObject *sr
     return true;
 }
 
-AkPacket AkElement::operator ()(const AkPacket &packet)
-{
-    return this->iStream(packet);
-}
-
 QString AkElement::controlInterfaceProvide(const QString &controlId) const
 {
     Q_UNUSED(controlId)
@@ -214,25 +208,28 @@ AkPacket AkElement::iAudioStream(const A
 {
     Q_UNUSED(packet)
 
-    return AkPacket();
+    return {};
 }
 
 AkPacket AkElement::iVideoStream(const AkVideoPacket &packet)
 {
     Q_UNUSED(packet)
 
-    return AkPacket();
+    return {};
 }
 
 AkPacket AkElement::iStream(const AkPacket &packet)
 {
-    if (packet.caps().mimeType() == "audio/x-raw")
+    switch (packet.type()) {
+    case AkPacket::PacketAudio:
         return this->iAudioStream(packet);
-
-    if (packet.caps().mimeType() == "video/x-raw")
+    case AkPacket::PacketVideo:
         return this->iVideoStream(packet);
+    default:
+        break;
+    }
 
-    return AkPacket();
+    return {};
 }
 
 bool AkElement::setState(AkElement::ElementState state)
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akelement.h
+++ webcamoid-9.0.0/libAvKys/Lib/src/akelement.h
@@ -24,13 +24,6 @@
 
 #include "akcommons.h"
 
-#define akSend(packet) { \
-    if (packet) \
-        emit this->oStream(packet); \
-    \
-    return packet; \
-}
-
 class AkElement;
 class AkElementPrivate;
 class AkPacket;
@@ -45,7 +38,6 @@ using AkElementPtr = QSharedPointer<AkEl
 class AKCOMMONS_EXPORT AkElement: public QObject
 {
     Q_OBJECT
-    Q_ENUMS(ElementState)
     Q_PROPERTY(AkElement::ElementState state
                READ state
                WRITE setState
@@ -59,6 +51,7 @@ class AKCOMMONS_EXPORT AkElement: public
             ElementStatePaused,
             ElementStatePlaying
         };
+        Q_ENUM(ElementState)
 
         AkElement(QObject *parent=nullptr);
         virtual ~AkElement();
@@ -92,8 +85,6 @@ class AKCOMMONS_EXPORT AkElement: public
         Q_INVOKABLE static bool unlink(const QObject *srcElement,
                                        const QObject *dstElement);
 
-        virtual AkPacket operator ()(const AkPacket &packet);
-
     private:
         AkElementPrivate *d;
 
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akfrac.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/akfrac.cpp
@@ -104,12 +104,6 @@ bool AkFrac::operator !=(const AkFrac &o
     return !(*this == other);
 }
 
-AkFrac AkFrac::operator *(const AkFrac &other) const
-{
-    return AkFrac(this->d->m_num * other.d->m_num,
-                  this->d->m_den * other.d->m_den);
-}
-
 AkFrac::operator bool() const
 {
     return this->d->m_den != 0;
@@ -120,11 +114,6 @@ AkFrac::operator QString() const
     return QString("%1/%2").arg(this->d->m_num).arg(this->d->m_den);
 }
 
-AkFrac AkFrac::operator *(const AkFrac &other)
-{
-    return {this->d->m_num * other.d->m_num, this->d->m_den * other.d->m_den};
-}
-
 QObject *AkFrac::create()
 {
     return new AkFrac();
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akfrac.h
+++ webcamoid-9.0.0/libAvKys/Lib/src/akfrac.h
@@ -59,10 +59,8 @@ class AKCOMMONS_EXPORT AkFrac: public QO
         AkFrac &operator =(const AkFrac &other);
         bool operator ==(const AkFrac &other) const;
         bool operator !=(const AkFrac &other) const;
-        AkFrac operator *(const AkFrac &other) const;
         operator bool() const;
         operator QString() const;
-        AkFrac operator *(const AkFrac &other);
 
         Q_INVOKABLE static QObject *create();
         Q_INVOKABLE static QObject *create(qint64 num, qint64 den);
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akmultimediasourceelement.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/akmultimediasourceelement.cpp
@@ -18,7 +18,6 @@
  */
 
 #include "akmultimediasourceelement.h"
-#include "akcaps.h"
 
 class AkMultimediaSourceElementPrivate
 {
@@ -60,9 +59,9 @@ bool AkMultimediaSourceElement::loop() c
     return this->d->m_loop;
 }
 
-int AkMultimediaSourceElement::defaultStream(const QString &mimeType)
+int AkMultimediaSourceElement::defaultStream(AkCaps::CapsType type)
 {
-    Q_UNUSED(mimeType)
+    Q_UNUSED(type)
 
     return -1;
 }
@@ -71,14 +70,14 @@ QString AkMultimediaSourceElement::descr
 {
     Q_UNUSED(media)
 
-    return QString();
+    return {};
 }
 
 AkCaps AkMultimediaSourceElement::caps(int stream)
 {
     Q_UNUSED(stream)
 
-    return AkCaps();
+    return {};
 }
 
 void AkMultimediaSourceElement::setMedia(const QString &media)
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akmultimediasourceelement.h
+++ webcamoid-9.0.0/libAvKys/Lib/src/akmultimediasourceelement.h
@@ -20,6 +20,7 @@
 #ifndef AKMULTIMEDIASOURCEELEMENT_H
 #define AKMULTIMEDIASOURCEELEMENT_H
 
+#include "akcaps.h"
 #include "akelement.h"
 
 class AkMultimediaSourceElement;
@@ -40,8 +41,7 @@ class AKCOMMONS_EXPORT AkMultimediaSourc
         Q_INVOKABLE virtual QString media() const;
         Q_INVOKABLE virtual QList<int> streams();
         Q_INVOKABLE virtual bool loop() const;
-
-        Q_INVOKABLE virtual int defaultStream(const QString &mimeType);
+        Q_INVOKABLE virtual int defaultStream(AkCaps::CapsType type);
         Q_INVOKABLE virtual QString description(const QString &media);
         Q_INVOKABLE virtual AkCaps caps(int stream);
 
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akpacket.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/akpacket.cpp
@@ -22,58 +22,68 @@
 #include <QQmlEngine>
 
 #include "akpacket.h"
+#include "akaudiocaps.h"
+#include "akaudiopacket.h"
 #include "akcaps.h"
-#include "akfrac.h"
+#include "akcompressedvideocaps.h"
+#include "akcompressedvideopacket.h"
+#include "aksubtitlecaps.h"
+#include "aksubtitlepacket.h"
+#include "akvideocaps.h"
+#include "akvideopacket.h"
 
 class AkPacketPrivate
 {
     public:
-        AkCaps m_caps;
-        QByteArray m_buffer;
-        qint64 m_pts {0};
-        AkFrac m_timeBase;
-        qint64 m_id {-1};
-        int m_index {-1};
+        AkPacket::PacketType m_type {AkPacket::PacketUnknown};
+        void *m_privateData {nullptr};
+        AkPacket::DataCopy m_copyFunc {nullptr};
+        AkPacket::DataDeleter m_deleterFunc {nullptr};
 };
 
 AkPacket::AkPacket(QObject *parent):
-    QObject(parent)
+    AkPacketBase(parent)
 {
     this->d = new AkPacketPrivate();
 }
 
-AkPacket::AkPacket(const AkCaps &caps)
-{
-    this->d = new AkPacketPrivate();
-    this->d->m_caps = caps;
-}
-
 AkPacket::AkPacket(const AkPacket &other):
-    QObject()
+    AkPacketBase(other)
 {
     this->d = new AkPacketPrivate();
-    this->d->m_caps = other.d->m_caps;
-    this->d->m_buffer = other.d->m_buffer;
-    this->d->m_pts = other.d->m_pts;
-    this->d->m_timeBase = other.d->m_timeBase;
-    this->d->m_index = other.d->m_index;
-    this->d->m_id = other.d->m_id;
+    this->d->m_type = other.d->m_type;
+
+    if (other.d->m_privateData && other.d->m_copyFunc)
+        this->d->m_privateData = other.d->m_copyFunc(other.d->m_privateData);
+
+    this->d->m_copyFunc = other.d->m_copyFunc;
+    this->d->m_deleterFunc = other.d->m_deleterFunc;
 }
 
 AkPacket::~AkPacket()
 {
+    if (this->d->m_privateData && this->d->m_copyFunc)
+        this->d->m_deleterFunc(this->d->m_privateData);
+
     delete this->d;
 }
 
 AkPacket &AkPacket::operator =(const AkPacket &other)
 {
     if (this != &other) {
-        this->d->m_caps = other.d->m_caps;
-        this->d->m_buffer = other.d->m_buffer;
-        this->d->m_pts = other.d->m_pts;
-        this->d->m_timeBase = other.d->m_timeBase;
-        this->d->m_index = other.d->m_index;
-        this->d->m_id = other.d->m_id;
+        this->d->m_type = other.d->m_type;
+
+        if (this->d->m_privateData && this->d->m_copyFunc) {
+            this->d->m_deleterFunc(this->d->m_privateData);
+            this->d->m_privateData = nullptr;
+        }
+
+        if (other.d->m_privateData && other.d->m_copyFunc)
+            this->d->m_privateData = other.d->m_copyFunc(other.d->m_privateData);
+
+        this->d->m_copyFunc = other.d->m_copyFunc;
+        this->d->m_deleterFunc = other.d->m_deleterFunc;
+        this->copyMetadata(other);
     }
 
     return *this;
@@ -81,159 +91,117 @@ AkPacket &AkPacket::operator =(const AkP
 
 AkPacket::operator bool() const
 {
-    return this->d->m_caps && !this->d->m_buffer.isEmpty();
-}
-
-AkCaps AkPacket::caps() const
-{
-    return this->d->m_caps;
-}
+    if (!this->d->m_privateData)
+        return false;
 
-AkCaps &AkPacket::caps()
-{
-    return this->d->m_caps;
-}
-
-QByteArray AkPacket::buffer() const
-{
-    return this->d->m_buffer;
-}
-
-QByteArray &AkPacket::buffer()
-{
-    return this->d->m_buffer;
-}
-
-qint64 AkPacket::id() const
-{
-    return this->d->m_id;
-}
-
-qint64 &AkPacket::id()
-{
-    return this->d->m_id;
-}
-
-qint64 AkPacket::pts() const
-{
-    return this->d->m_pts;
-}
-
-qint64 &AkPacket::pts()
-{
-    return this->d->m_pts;
-}
-
-AkFrac AkPacket::timeBase() const
-{
-    return this->d->m_timeBase;
-}
-
-AkFrac &AkPacket::timeBase()
-{
-    return this->d->m_timeBase;
-}
-
-int AkPacket::index() const
-{
-    return this->d->m_index;
-}
-
-int &AkPacket::index()
-{
-    return this->d->m_index;
-}
-
-void AkPacket::copyMetadata(const AkPacket &other)
-{
-    this->d->m_pts = other.d->m_pts;
-    this->d->m_timeBase = other.d->m_timeBase;
-    this->d->m_index = other.d->m_index;
-    this->d->m_id = other.d->m_id;
-}
-
-void AkPacket::setCaps(const AkCaps &caps)
-{
-    if (this->d->m_caps == caps)
-        return;
-
-    this->d->m_caps = caps;
-    emit this->capsChanged(caps);
-}
-
-void AkPacket::setBuffer(const QByteArray &buffer)
-{
-    if (this->d->m_buffer == buffer)
-        return;
+    switch (this->d->m_type) {
+    case AkPacket::PacketAudio:
+        return *reinterpret_cast<AkAudioPacket *>(this->d->m_privateData);
+    case AkPacket::PacketSubtitle:
+        return *reinterpret_cast<AkSubtitlePacket *>(this->d->m_privateData);
+    case AkPacket::PacketVideo:
+        return *reinterpret_cast<AkVideoPacket *>(this->d->m_privateData);
+    case AkPacket::PacketVideoCompressed:
+        return *reinterpret_cast<AkCompressedVideoPacket *>(this->d->m_privateData);
+    default:
+        break;
+    }
 
-    this->d->m_buffer = buffer;
-    emit this->bufferChanged(buffer);
+    return false;
 }
 
-void AkPacket::setId(qint64 id)
+AkPacket::PacketType AkPacket::type() const
 {
-    if (this->d->m_id == id)
-        return;
-
-    this->d->m_id = id;
-    emit this->idChanged(id);
+    return this->d->m_type;
 }
 
-void AkPacket::setPts(qint64 pts)
+AkCaps AkPacket::caps() const
 {
-    if (this->d->m_pts == pts)
-        return;
+    switch (this->d->m_type) {
+    case AkPacket::PacketAudio:
+        return reinterpret_cast<AkAudioPacket *>(this->d->m_privateData)->caps();
+    case AkPacket::PacketSubtitle:
+        return reinterpret_cast<AkSubtitlePacket *>(this->d->m_privateData)->caps();
+    case AkPacket::PacketVideo:
+        return reinterpret_cast<AkVideoPacket *>(this->d->m_privateData)->caps();
+    case AkPacket::PacketVideoCompressed:
+        return reinterpret_cast<AkCompressedVideoPacket *>(this->d->m_privateData)->caps();
+    default:
+        break;
+    }
 
-    this->d->m_pts = pts;
-    emit this->ptsChanged(pts);
+    return {};
 }
 
-void AkPacket::setTimeBase(const AkFrac &timeBase)
+char *AkPacket::data() const
 {
-    if (this->d->m_timeBase == timeBase)
-        return;
+    switch (this->d->m_type) {
+    case AkPacket::PacketAudio:
+        return reinterpret_cast<AkAudioPacket *>(this->d->m_privateData)->data();
+    case AkPacket::PacketSubtitle:
+        return reinterpret_cast<AkSubtitlePacket *>(this->d->m_privateData)->data();
+    case AkPacket::PacketVideo:
+        return reinterpret_cast<AkVideoPacket *>(this->d->m_privateData)->data();
+    case AkPacket::PacketVideoCompressed:
+        return reinterpret_cast<AkCompressedVideoPacket *>(this->d->m_privateData)->data();
+    default:
+        break;
+    }
 
-    this->d->m_timeBase = timeBase;
-    emit this->timeBaseChanged(timeBase);
+    return nullptr;
 }
 
-void AkPacket::setIndex(int index)
+const char *AkPacket::constData() const
 {
-    if (this->d->m_index == index)
-        return;
-
-    this->d->m_index = index;
-    emit this->indexChanged(index);
-}
+    switch (this->d->m_type) {
+    case AkPacket::PacketAudio:
+        return reinterpret_cast<AkAudioPacket *>(this->d->m_privateData)->constData();
+    case AkPacket::PacketSubtitle:
+        return reinterpret_cast<AkSubtitlePacket *>(this->d->m_privateData)->constData();
+    case AkPacket::PacketVideo:
+        return reinterpret_cast<AkVideoPacket *>(this->d->m_privateData)->constData();
+    case AkPacket::PacketVideoCompressed:
+        return reinterpret_cast<AkCompressedVideoPacket *>(this->d->m_privateData)->constData();
+    default:
+        break;
+    }
 
-void AkPacket::resetCaps()
-{
-    this->setCaps(AkCaps());
+    return nullptr;
 }
 
-void AkPacket::resetBuffer()
+size_t AkPacket::size() const
 {
-    this->setBuffer({});
-}
+    switch (this->d->m_type) {
+    case AkPacket::PacketAudio:
+        return reinterpret_cast<AkAudioPacket *>(this->d->m_privateData)->size();
+    case AkPacket::PacketSubtitle:
+        return reinterpret_cast<AkSubtitlePacket *>(this->d->m_privateData)->size();
+    case AkPacket::PacketVideo:
+        return reinterpret_cast<AkVideoPacket *>(this->d->m_privateData)->size();
+    case AkPacket::PacketVideoCompressed:
+        return reinterpret_cast<AkCompressedVideoPacket *>(this->d->m_privateData)->size();
+    default:
+        break;
+    }
 
-void AkPacket::resetId()
-{
-    this->setId(-1);
+    return 0;
 }
 
-void AkPacket::resetPts()
+void *AkPacket::privateData() const
 {
-    this->setPts(0);
+    return this->d->m_privateData;
 }
 
-void AkPacket::resetTimeBase()
+void AkPacket::setPrivateData(void *data, DataCopy copyFunc, DataDeleter deleterFunc)
 {
-    this->setTimeBase({});
+    this->d->m_privateData = data;
+    this->d->m_copyFunc = copyFunc;
+    this->d->m_deleterFunc = deleterFunc;
 }
 
-void AkPacket::resetIndex()
+void AkPacket::setType(AkPacket::PacketType type)
 {
-    this->setIndex(-1);
+    this->d->m_type = type;
 }
 
 void AkPacket::registerTypes()
@@ -251,23 +219,26 @@ void AkPacket::registerTypes()
 
 QDebug operator <<(QDebug debug, const AkPacket &packet)
 {
-    debug.nospace() << "AkPacket("
-                    << "caps="
-                    << packet.caps()
-                    << ",bufferSize="
-                    << packet.buffer().size()
-                    << ",id="
-                    << packet.id()
-                    << ",pts="
-                    << packet.pts()
-                    << "("
-                    << packet.pts() * packet.timeBase().value()
-                    << ")"
-                    << ",timeBase="
-                    << packet.timeBase()
-                    << ",index="
-                    << packet.index()
-                    << ")";
+    debug.nospace() << "AkPacket(";
+
+    switch (packet.type()) {
+    case AkPacket::PacketAudio:
+        debug.nospace() << *reinterpret_cast<AkAudioPacket *>(packet.d->m_privateData);
+        break;
+    case AkPacket::PacketSubtitle:
+        debug.nospace() << *reinterpret_cast<AkSubtitlePacket *>(packet.d->m_privateData);
+        break;
+    case AkPacket::PacketVideo:
+        debug.nospace() << *reinterpret_cast<AkVideoPacket *>(packet.d->m_privateData);
+        break;
+    case AkPacket::PacketVideoCompressed:
+        debug.nospace() << *reinterpret_cast<AkCompressedVideoPacket *>(packet.d->m_privateData);
+        break;
+    default:
+        break;
+    }
+
+    debug.nospace() << ")";
 
     return debug.space();
 }
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akpacket.h
+++ webcamoid-9.0.0/libAvKys/Lib/src/akpacket.h
@@ -20,105 +20,79 @@
 #ifndef AKPACKET_H
 #define AKPACKET_H
 
-#include <QObject>
-
-#include "akcommons.h"
+#include "akpacketbase.h"
 
 class AkPacketPrivate;
+class AkAudioPacket;
 class AkCaps;
-class AkFrac;
-
-template<typename T>
-inline T AkNoPts()
-{
-    return T(0x1) << (sizeof(T) - 1);
-}
+class AkCompressedAudioPacket;
+class AkCompressedVideoPacket;
+class AkSubtitlePacket;
+class AkVideoPacket;
 
-class AKCOMMONS_EXPORT AkPacket: public QObject
+class AKCOMMONS_EXPORT AkPacket: public AkPacketBase
 {
     Q_OBJECT
     Q_PROPERTY(AkCaps caps
                READ caps
-               WRITE setCaps
-               RESET resetCaps
-               NOTIFY capsChanged)
-    Q_PROPERTY(QByteArray buffer
-               READ buffer
-               WRITE setBuffer
-               RESET resetBuffer
-               NOTIFY bufferChanged)
-    Q_PROPERTY(qint64 id
-               READ id
-               WRITE setId
-               RESET resetId
-               NOTIFY idChanged)
-    Q_PROPERTY(qint64 pts
-               READ pts
-               WRITE setPts
-               RESET resetPts
-               NOTIFY ptsChanged)
-    Q_PROPERTY(AkFrac timeBase
-               READ timeBase
-               WRITE setTimeBase
-               RESET resetTimeBase
-               NOTIFY timeBaseChanged)
-    Q_PROPERTY(int index
-               READ index
-               WRITE setIndex
-               RESET resetIndex
-               NOTIFY indexChanged)
+               CONSTANT)
+    Q_PROPERTY(PacketType type
+               READ type
+               CONSTANT)
+    Q_PROPERTY(size_t size
+               READ size
+               CONSTANT)
 
     public:
+        enum PacketType
+        {
+            PacketUnknown = -1,
+            PacketAudio,
+            PacketAudioCompressed,
+            PacketVideo,
+            PacketVideoCompressed,
+            PacketSubtitle
+        };
+        Q_ENUM(PacketType)
+
         AkPacket(QObject *parent=nullptr);
-        AkPacket(const AkCaps &caps);
         AkPacket(const AkPacket &other);
-        virtual ~AkPacket();
+        ~AkPacket();
         AkPacket &operator =(const AkPacket &other);
         operator bool() const;
 
+        Q_INVOKABLE AkPacket::PacketType type() const;
         Q_INVOKABLE AkCaps caps() const;
-        Q_INVOKABLE AkCaps &caps();
-        Q_INVOKABLE QByteArray buffer() const;
-        Q_INVOKABLE QByteArray &buffer();
-        Q_INVOKABLE qint64 id() const;
-        Q_INVOKABLE qint64 &id();
-        Q_INVOKABLE qint64 pts() const;
-        Q_INVOKABLE qint64 &pts();
-        Q_INVOKABLE AkFrac timeBase() const;
-        Q_INVOKABLE AkFrac &timeBase();
-        Q_INVOKABLE int index() const;
-        Q_INVOKABLE int &index();
-        Q_INVOKABLE void copyMetadata(const AkPacket &other);
+        Q_INVOKABLE char *data() const;
+        Q_INVOKABLE const char *constData() const;
+        Q_INVOKABLE size_t size() const;
 
     private:
         AkPacketPrivate *d;
 
-    Q_SIGNALS:
-        void capsChanged(const AkCaps &caps);
-        void bufferChanged(const QByteArray &buffer);
-        void idChanged(qint64 id);
-        void ptsChanged(qint64 pts);
-        void timeBaseChanged(const AkFrac &timeBase);
-        void indexChanged(int index);
+        using DataCopy = std::function<void *(void *data)>;
+        using DataDeleter = std::function<void (void *data)>;
+        void *privateData() const;
+        void setPrivateData(void *data,
+                            DataCopy copyFunc,
+                            DataDeleter deleterFunc);
+        void setType(AkPacket::PacketType type);
 
     public Q_SLOTS:
-        void setCaps(const AkCaps &caps);
-        void setBuffer(const QByteArray &buffer);
-        void setId(qint64 id);
-        void setPts(qint64 pts);
-        void setTimeBase(const AkFrac &timeBase);
-        void setIndex(int index);
-        void resetCaps();
-        void resetBuffer();
-        void resetId();
-        void resetPts();
-        void resetTimeBase();
-        void resetIndex();
         static void registerTypes();
+
+    friend QDebug operator <<(QDebug debug, const AkPacket &packet);
+    friend class AkPacketPrivate;
+    friend class AkAudioPacket;
+    friend class AkCompressedAudioPacket;
+    friend class AkCompressedVideoPacket;
+    friend class AkSubtitlePacket;
+    friend class AkVideoPacket;
 };
 
 AKCOMMONS_EXPORT QDebug operator <<(QDebug debug, const AkPacket &packet);
 
 Q_DECLARE_METATYPE(AkPacket)
+Q_DECLARE_METATYPE(AkPacket::PacketType)
 
 #endif // AKPACKET_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/akpacketbase.cpp
@@ -0,0 +1,141 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QDebug>
+#include <QVariant>
+#include <QQmlEngine>
+
+#include "akpacketbase.h"
+#include "akfrac.h"
+
+class AkPacketBasePrivate
+{
+    public:
+        qint64 m_pts {0};
+        AkFrac m_timeBase;
+        qint64 m_id {-1};
+        int m_index {-1};
+};
+
+AkPacketBase::AkPacketBase(QObject *parent):
+    QObject(parent)
+{
+    this->d = new AkPacketBasePrivate();
+}
+
+AkPacketBase::AkPacketBase(const AkPacketBase &other):
+    QObject()
+{
+    this->d = new AkPacketBasePrivate();
+    this->d->m_pts = other.d->m_pts;
+    this->d->m_timeBase = other.d->m_timeBase;
+    this->d->m_id = other.d->m_id;
+    this->d->m_index = other.d->m_index;
+}
+
+AkPacketBase::~AkPacketBase()
+{
+    delete this->d;
+}
+
+qint64 AkPacketBase::id() const
+{
+    return this->d->m_id;
+}
+
+qint64 AkPacketBase::pts() const
+{
+    return this->d->m_pts;
+}
+
+AkFrac AkPacketBase::timeBase() const
+{
+    return this->d->m_timeBase;
+}
+
+int AkPacketBase::index() const
+{
+    return this->d->m_index;
+}
+
+void AkPacketBase::copyMetadata(const AkPacketBase &other)
+{
+    this->d->m_pts = other.d->m_pts;
+    this->d->m_timeBase = other.d->m_timeBase;
+    this->d->m_index = other.d->m_index;
+    this->d->m_id = other.d->m_id;
+}
+
+void AkPacketBase::setId(qint64 id)
+{
+    if (this->d->m_id == id)
+        return;
+
+    this->d->m_id = id;
+    emit this->idChanged(id);
+}
+
+void AkPacketBase::setPts(qint64 pts)
+{
+    if (this->d->m_pts == pts)
+        return;
+
+    this->d->m_pts = pts;
+    emit this->ptsChanged(pts);
+}
+
+void AkPacketBase::setTimeBase(const AkFrac &timeBase)
+{
+    if (this->d->m_timeBase == timeBase)
+        return;
+
+    this->d->m_timeBase = timeBase;
+    emit this->timeBaseChanged(timeBase);
+}
+
+void AkPacketBase::setIndex(int index)
+{
+    if (this->d->m_index == index)
+        return;
+
+    this->d->m_index = index;
+    emit this->indexChanged(index);
+}
+
+void AkPacketBase::resetId()
+{
+    this->setId(-1);
+}
+
+void AkPacketBase::resetPts()
+{
+    this->setPts(0);
+}
+
+void AkPacketBase::resetTimeBase()
+{
+    this->setTimeBase({});
+}
+
+void AkPacketBase::resetIndex()
+{
+    this->setIndex(-1);
+}
+
+#include "moc_akpacketbase.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/akpacketbase.h
@@ -0,0 +1,92 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef AKPACKETBASE_H
+#define AKPACKETBASE_H
+
+#include <QObject>
+
+#include "akcommons.h"
+
+class AkPacketBase;
+class AkPacketBasePrivate;
+class AkFrac;
+
+template<typename T>
+inline T AkNoPts()
+{
+    return T(0x1) << (sizeof(T) - 1);
+}
+
+class AKCOMMONS_EXPORT AkPacketBase: public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(qint64 id
+               READ id
+               WRITE setId
+               RESET resetId
+               NOTIFY idChanged)
+    Q_PROPERTY(qint64 pts
+               READ pts
+               WRITE setPts
+               RESET resetPts
+               NOTIFY ptsChanged)
+    Q_PROPERTY(AkFrac timeBase
+               READ timeBase
+               WRITE setTimeBase
+               RESET resetTimeBase
+               NOTIFY timeBaseChanged)
+    Q_PROPERTY(int index
+               READ index
+               WRITE setIndex
+               RESET resetIndex
+               NOTIFY indexChanged)
+
+    public:
+        AkPacketBase(QObject *parent=nullptr);
+        AkPacketBase(const AkPacketBase &other);
+        virtual ~AkPacketBase();
+
+        Q_INVOKABLE qint64 id() const;
+        Q_INVOKABLE qint64 pts() const;
+        Q_INVOKABLE AkFrac timeBase() const;
+        Q_INVOKABLE int index() const;
+        Q_INVOKABLE void copyMetadata(const AkPacketBase &other);
+
+    private:
+        AkPacketBasePrivate *d;
+
+    Q_SIGNALS:
+        void idChanged(qint64 id);
+        void ptsChanged(qint64 pts);
+        void timeBaseChanged(const AkFrac &timeBase);
+        void indexChanged(int index);
+
+    public Q_SLOTS:
+        void setId(qint64 id);
+        void setPts(qint64 pts);
+        void setTimeBase(const AkFrac &timeBase);
+        void setIndex(int index);
+        void resetId();
+        void resetPts();
+        void resetTimeBase();
+        void resetIndex();
+};
+
+#endif // AKPACKETBASE_H
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akplugininfo.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/akplugininfo.cpp
@@ -46,7 +46,7 @@ AkPluginInfo::AkPluginInfo(QObject *pare
 }
 
 AkPluginInfo::AkPluginInfo(const QVariantMap &metaData):
-    QObject(nullptr)
+    QObject()
 {
     this->d = new AkPluginInfoPrivate();
     this->d->m_name = metaData.value("name").toString();
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akpluginmanager.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/akpluginmanager.cpp
@@ -57,7 +57,8 @@ AkPluginManager::AkPluginManager(QObject
     this->scanPlugins();
 }
 
-AkPluginManager::AkPluginManager(const AkPluginManager &other)
+AkPluginManager::AkPluginManager(const AkPluginManager &other):
+    QObject()
 {
     this->d = new AkPluginManagerPrivate(this);
     this->d->m_pluginFilePattern = other.d->m_pluginFilePattern;
@@ -202,6 +203,7 @@ void AkPluginManager::registerTypes()
     qRegisterMetaType<AkPluginLinks>("AkPluginLinks");
     qRegisterMetaType<PluginStatus>("PluginStatus");
     qRegisterMetaType<PluginsFilter>("PluginsFilter");
+    qRegisterMetaType<PluginsFilters>("PluginsFilters");
     qmlRegisterSingletonInstance<AkPluginManager>("Ak",
                                                   1,
                                                   0,
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akpluginmanager.h
+++ webcamoid-9.0.0/libAvKys/Lib/src/akpluginmanager.h
@@ -36,7 +36,6 @@ using AkPluginLinks = QMap<QString, QStr
 class AKCOMMONS_EXPORT AkPluginManager: public QObject
 {
     Q_OBJECT
-    Q_ENUMS(PluginStatus)
     Q_FLAGS(PluginsFilter)
     Q_PROPERTY(bool recursiveSearch
                READ recursiveSearch
@@ -60,6 +59,7 @@ class AKCOMMONS_EXPORT AkPluginManager:
             Enabled,
             Disabled
         };
+        Q_ENUM(PluginStatus)
 
         enum PluginsFilter
         {
@@ -70,6 +70,8 @@ class AKCOMMONS_EXPORT AkPluginManager:
             FilterBestMatch = 0x4,
         };
         Q_DECLARE_FLAGS(PluginsFilters, PluginsFilter)
+        Q_FLAG(PluginsFilters)
+        Q_ENUM(PluginsFilter)
 
         AkPluginManager(QObject *parent=nullptr);
         AkPluginManager(const AkPluginManager &other);
@@ -94,10 +96,10 @@ class AKCOMMONS_EXPORT AkPluginManager:
         Q_INVOKABLE AkPluginLinks links() const;
         Q_INVOKABLE QStringList listPlugins(const QString &pluginId={},
                                             const QStringList &implements={},
-                                            PluginsFilters filter=FilterAll) const;
+                                            AkPluginManager::PluginsFilters filter=FilterAll) const;
         Q_INVOKABLE AkPluginInfo defaultPlugin(const QString &pluginId,
                                                const QStringList &implements={}) const;
-        Q_INVOKABLE PluginStatus pluginStatus(const QString &pluginId) const;
+        Q_INVOKABLE AkPluginManager::PluginStatus pluginStatus(const QString &pluginId) const;
         Q_INVOKABLE static void registerTypes();
         Q_INVOKABLE static AkPluginManager *instance();
 
@@ -110,7 +112,7 @@ class AKCOMMONS_EXPORT AkPluginManager:
         void pluginsChanged(const QStringList &plugins);
         void linksChanged(const AkPluginLinks &links);
         void pluginsStatusChanged(const QString &pluginId,
-                                  PluginStatus status);
+                                  AkPluginManager::PluginStatus status);
 
     public slots:
         void setRecursiveSearch(bool recursiveSearch);
@@ -124,9 +126,9 @@ class AKCOMMONS_EXPORT AkPluginManager:
         void resetLinks();
         void scanPlugins();
         void setPluginStatus(const QStringList &plugins,
-                             PluginStatus status);
+                             AkPluginManager::PluginStatus status);
         void setPluginStatus(const QString &pluginId,
-                             PluginStatus status);
+                             AkPluginManager::PluginStatus status);
         void setCachedPlugins(const QStringList &plugins);
 };
 
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/aksubtitlecaps.cpp
@@ -0,0 +1,282 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QDataStream>
+#include <QDebug>
+#include <QMetaEnum>
+#include <QQmlEngine>
+#include <QRect>
+
+#include "aksubtitlecaps.h"
+#include "akcaps.h"
+
+class AkSubtitleCapsPrivate
+{
+    public:
+        AkSubtitleCaps::SubtitleFormat m_format {AkSubtitleCaps::SubtitleFormat_none};
+        QRect m_rect;
+};
+
+AkSubtitleCaps::AkSubtitleCaps(QObject *parent):
+    QObject(parent)
+{
+    this->d = new AkSubtitleCapsPrivate();
+}
+
+AkSubtitleCaps::AkSubtitleCaps(SubtitleFormat format):
+    QObject()
+{
+    this->d = new AkSubtitleCapsPrivate();
+    this->d->m_format = format;
+}
+
+AkSubtitleCaps::AkSubtitleCaps(SubtitleFormat format,
+                               const QRect &rect):
+    QObject()
+{
+    this->d = new AkSubtitleCapsPrivate();
+    this->d->m_format = format;
+    this->d->m_rect = rect;
+}
+
+AkSubtitleCaps::AkSubtitleCaps(const AkCaps &other):
+    QObject()
+{
+    this->d = new AkSubtitleCapsPrivate();
+
+    if (other.type() == AkCaps::CapsSubtitle) {
+        auto data = reinterpret_cast<AkSubtitleCaps *>(other.privateData());
+        this->d->m_format = data->d->m_format;
+        this->d->m_rect = data->d->m_rect;
+    }
+}
+
+AkSubtitleCaps::AkSubtitleCaps(const AkSubtitleCaps &other):
+    QObject()
+{
+    this->d = new AkSubtitleCapsPrivate();
+    this->d->m_format = other.d->m_format;
+    this->d->m_rect = other.d->m_rect;
+}
+
+AkSubtitleCaps::~AkSubtitleCaps()
+{
+    delete this->d;
+}
+
+AkSubtitleCaps &AkSubtitleCaps::operator =(const AkCaps &other)
+{
+    if (other.type() == AkCaps::CapsSubtitle) {
+        auto data = reinterpret_cast<AkSubtitleCaps *>(other.privateData());
+        this->d->m_format = data->d->m_format;
+        this->d->m_rect = data->d->m_rect;
+    } else {
+        this->d->m_format = SubtitleFormat_none;
+        this->d->m_rect = {};
+    }
+
+    return *this;
+}
+
+AkSubtitleCaps &AkSubtitleCaps::operator =(const AkSubtitleCaps &other)
+{
+    if (this != &other) {
+        this->d->m_format = other.d->m_format;
+        this->d->m_rect = other.d->m_rect;
+    }
+
+    return *this;
+}
+
+bool AkSubtitleCaps::operator ==(const AkSubtitleCaps &other) const
+{
+    return this->d->m_format == other.d->m_format
+            && this->d->m_rect == other.d->m_rect;
+}
+
+bool AkSubtitleCaps::operator !=(const AkSubtitleCaps &other) const
+{
+    return !(*this == other);
+}
+
+QObject *AkSubtitleCaps::create()
+{
+    return new AkSubtitleCaps();
+}
+
+QObject *AkSubtitleCaps::create(const AkSubtitleCaps &caps)
+{
+    return new AkSubtitleCaps(caps);
+}
+
+QObject *AkSubtitleCaps::create(SubtitleFormat format)
+{
+    return new AkSubtitleCaps(format);
+}
+
+QObject *AkSubtitleCaps::create(AkSubtitleCaps::SubtitleFormat format,
+                                const QRect &rect)
+{
+    return new AkSubtitleCaps(format, rect);
+}
+
+QVariant AkSubtitleCaps::toVariant() const
+{
+    return QVariant::fromValue(*this);
+}
+
+AkSubtitleCaps::operator bool() const
+{
+    return this->d->m_format != SubtitleFormat_none
+           && !this->d->m_rect.isEmpty();
+}
+
+AkSubtitleCaps::operator AkCaps() const
+{
+    AkCaps caps;
+    caps.setType(AkCaps::CapsSubtitle);
+    caps.setPrivateData(new AkSubtitleCaps(*this),
+                        [] (void *data) -> void * {
+                            return new AkSubtitleCaps(*reinterpret_cast<AkSubtitleCaps *>(data));
+                        },
+                        [] (void *data) {
+                            delete reinterpret_cast<AkSubtitleCaps *>(data);
+                        });
+
+    return caps;
+}
+
+AkSubtitleCaps::SubtitleFormat AkSubtitleCaps::format() const
+{
+    return this->d->m_format;
+}
+
+QRect AkSubtitleCaps::rect() const
+{
+    return this->d->m_rect;
+}
+
+QString AkSubtitleCaps::formatToString(SubtitleFormat subtitleFormat)
+{
+    AkSubtitleCaps caps;
+    int formatIndex = caps.metaObject()->indexOfEnumerator("SubtitleFormat");
+    QMetaEnum formatEnum = caps.metaObject()->enumerator(formatIndex);
+    QString format(formatEnum.valueToKey(subtitleFormat));
+    format.remove("SubtitleFormat_");
+
+    return format;
+}
+
+AkSubtitleCaps::SubtitleFormat AkSubtitleCaps::formatFromString(const QString &subtitleFormat)
+{
+    AkSubtitleCaps caps;
+    QString format = "SubtitleFormat_" + subtitleFormat;
+    int formatIndex = caps.metaObject()->indexOfEnumerator("SubtitleFormat");
+    QMetaEnum formatEnum = caps.metaObject()->enumerator(formatIndex);
+    int formatInt = formatEnum.keyToValue(format.toStdString().c_str());
+
+    return static_cast<SubtitleFormat>(formatInt);
+}
+
+void AkSubtitleCaps::setFormat(SubtitleFormat format)
+{
+    if (this->d->m_format == format)
+        return;
+
+    this->d->m_format = format;
+    emit this->formatChanged(format);
+}
+
+void AkSubtitleCaps::setRect(const QRect &rect)
+{
+    if (this->d->m_rect == rect)
+        return;
+
+    this->d->m_rect = rect;
+    emit this->rectChanged(rect);
+}
+
+void AkSubtitleCaps::resetFormat()
+{
+    this->setFormat(SubtitleFormat_none);
+}
+
+void AkSubtitleCaps::resetRect()
+{
+    this->setRect({});
+}
+
+void AkSubtitleCaps::registerTypes()
+{
+    qRegisterMetaType<AkSubtitleCaps>("AkSubtitleCaps");
+    qRegisterMetaTypeStreamOperators<AkSubtitleCaps>("AkSubtitleCaps");
+    qRegisterMetaType<SubtitleFormat>("SubtitleFormat");
+    QMetaType::registerDebugStreamOperator<SubtitleFormat>();
+    qmlRegisterSingletonType<AkSubtitleCaps>("Ak", 1, 0, "AkSubtitleCaps",
+                                          [] (QQmlEngine *qmlEngine,
+                                              QJSEngine *jsEngine) -> QObject * {
+        Q_UNUSED(qmlEngine)
+        Q_UNUSED(jsEngine)
+
+        return new AkSubtitleCaps();
+    });
+}
+
+QDebug operator <<(QDebug debug, const AkSubtitleCaps &caps)
+{
+    QDebugStateSaver saver(debug);
+    debug.nospace() << "AkSubtitleCaps("
+                    << "format="
+                    << caps.format()
+                    << ",rect="
+                    << caps.rect()
+                    << ")";
+
+    return debug;
+}
+
+QDebug operator <<(QDebug debug, AkSubtitleCaps::SubtitleFormat format)
+{
+    QDebugStateSaver saver(debug);
+    debug.nospace() << AkSubtitleCaps::formatToString(format).toStdString().c_str();
+
+    return debug;
+}
+
+QDataStream &operator >>(QDataStream &istream, AkSubtitleCaps &caps)
+{
+    AkSubtitleCaps::SubtitleFormat format = AkSubtitleCaps::SubtitleFormat_none;
+    istream >> format;
+    caps.setFormat(format);
+    QRect rect;
+    istream >> rect;
+    caps.setRect(rect);
+
+    return istream;
+}
+
+QDataStream &operator <<(QDataStream &ostream, const AkSubtitleCaps &caps)
+{
+    ostream << caps.format();
+    ostream << caps.rect();
+
+    return ostream;
+}
+
+#include "moc_aksubtitlecaps.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/aksubtitlecaps.h
@@ -0,0 +1,106 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef AKSUBTITLECAPS_H
+#define AKSUBTITLECAPS_H
+
+#include <QObject>
+
+#include "akcommons.h"
+
+class AkSubtitleCapsPrivate;
+class AkCaps;
+
+class AKCOMMONS_EXPORT AkSubtitleCaps: public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(SubtitleFormat format
+               READ format
+               WRITE setFormat
+               RESET resetFormat
+               NOTIFY formatChanged)
+    Q_PROPERTY(QRect rect
+               READ rect
+               WRITE setRect
+               RESET resetRect
+               NOTIFY rectChanged)
+
+    public:
+        enum SubtitleFormat
+        {
+            SubtitleFormat_none = -1,
+            SubtitleFormat_text,
+            SubtitleFormat_ass,
+            SubtitleFormat_bitmap,
+        };
+        Q_ENUM(SubtitleFormat)
+
+        AkSubtitleCaps(QObject *parent=nullptr);
+        AkSubtitleCaps(SubtitleFormat format);
+        AkSubtitleCaps(SubtitleFormat format, const QRect &rect);
+        AkSubtitleCaps(const AkCaps &other);
+        AkSubtitleCaps(const AkSubtitleCaps &other);
+        ~AkSubtitleCaps();
+        AkSubtitleCaps &operator =(const AkCaps &other);
+        AkSubtitleCaps &operator =(const AkSubtitleCaps &other);
+        bool operator ==(const AkSubtitleCaps &other) const;
+        bool operator !=(const AkSubtitleCaps &other) const;
+        operator bool() const;
+        operator AkCaps() const;
+
+        Q_INVOKABLE static QObject *create();
+        Q_INVOKABLE static QObject *create(const AkSubtitleCaps &caps);
+        Q_INVOKABLE static QObject *create(AkSubtitleCaps::SubtitleFormat format);
+        Q_INVOKABLE static QObject *create(AkSubtitleCaps::SubtitleFormat format,
+                                           const QRect &rect);
+        Q_INVOKABLE QVariant toVariant() const;
+
+        Q_INVOKABLE AkSubtitleCaps::SubtitleFormat format() const;
+        Q_INVOKABLE QRect rect() const;
+
+        Q_INVOKABLE static QString formatToString(AkSubtitleCaps::SubtitleFormat format);
+        Q_INVOKABLE static AkSubtitleCaps::SubtitleFormat formatFromString(const QString &format);
+
+    private:
+        AkSubtitleCapsPrivate *d;
+
+    Q_SIGNALS:
+        void formatChanged(AkSubtitleCaps::SubtitleFormat format);
+        void rectChanged(const QRect &rect);
+
+    public Q_SLOTS:
+        void setFormat(AkSubtitleCaps::SubtitleFormat format);
+        void setRect(const QRect &rect);
+        void resetFormat();
+        void resetRect();
+        static void registerTypes();
+
+    friend QDataStream &operator >>(QDataStream &istream, AkSubtitleCaps &caps);
+    friend QDataStream &operator <<(QDataStream &ostream, const AkSubtitleCaps &caps);
+};
+
+AKCOMMONS_EXPORT QDebug operator <<(QDebug debug, const AkSubtitleCaps &caps);
+AKCOMMONS_EXPORT QDebug operator <<(QDebug debug, AkSubtitleCaps::SubtitleFormat format);
+AKCOMMONS_EXPORT QDataStream &operator >>(QDataStream &istream, AkSubtitleCaps &caps);
+AKCOMMONS_EXPORT QDataStream &operator <<(QDataStream &ostream, const AkSubtitleCaps &caps);
+
+Q_DECLARE_METATYPE(AkSubtitleCaps)
+Q_DECLARE_METATYPE(AkSubtitleCaps::SubtitleFormat)
+
+#endif // AKSUBTITLECAPS_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/aksubtitlepacket.cpp
@@ -0,0 +1,185 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QDebug>
+#include <QQmlEngine>
+
+#include "aksubtitlepacket.h"
+#include "akfrac.h"
+#include "akpacket.h"
+#include "aksubtitlecaps.h"
+
+class AkSubtitlePacketPrivate
+{
+    public:
+        AkSubtitleCaps m_caps;
+        QByteArray m_data;
+};
+
+AkSubtitlePacket::AkSubtitlePacket(QObject *parent):
+    AkPacketBase(parent)
+{
+    this->d = new AkSubtitlePacketPrivate();
+}
+
+AkSubtitlePacket::AkSubtitlePacket(const AkSubtitleCaps &caps,
+                                   size_t size,
+                                   bool initialized):
+    AkPacketBase()
+{
+    this->d = new AkSubtitlePacketPrivate();
+    this->d->m_caps = caps;
+
+    if (initialized)
+        this->d->m_data = QByteArray(int(size), 0);
+    else
+        this->d->m_data = QByteArray(int(size), Qt::Uninitialized);
+}
+
+AkSubtitlePacket::AkSubtitlePacket(const AkPacket &other):
+    AkPacketBase(other)
+{
+    this->d = new AkSubtitlePacketPrivate();
+
+    if (other.type() == AkPacket::PacketSubtitle) {
+        auto data = reinterpret_cast<AkSubtitlePacket *>(other.privateData());
+        this->d->m_caps = data->d->m_caps;
+        this->d->m_data = data->d->m_data;
+    }
+}
+
+AkSubtitlePacket::AkSubtitlePacket(const AkSubtitlePacket &other):
+    AkPacketBase(other)
+{
+    this->d = new AkSubtitlePacketPrivate();
+    this->d->m_caps = other.d->m_caps;
+    this->d->m_data = other.d->m_data;
+}
+
+AkSubtitlePacket::~AkSubtitlePacket()
+{
+    delete this->d;
+}
+
+AkSubtitlePacket &AkSubtitlePacket::operator =(const AkPacket &other)
+{
+    if (other.type() == AkPacket::PacketSubtitle) {
+        auto data = reinterpret_cast<AkSubtitlePacket *>(other.privateData());
+        this->d->m_caps = data->d->m_caps;
+        this->d->m_data = data->d->m_data;
+    } else {
+        this->d->m_caps = AkSubtitleCaps();
+        this->d->m_data.clear();
+    }
+
+    this->copyMetadata(other);
+
+    return *this;
+}
+
+AkSubtitlePacket &AkSubtitlePacket::operator =(const AkSubtitlePacket &other)
+{
+    if (this != &other) {
+        this->d->m_caps = other.d->m_caps;
+        this->d->m_data = other.d->m_data;
+        this->copyMetadata(other);
+    }
+
+    return *this;
+}
+
+AkSubtitlePacket::operator bool() const
+{
+    return this->d->m_caps && !this->d->m_data.isEmpty();
+}
+
+AkSubtitlePacket::operator AkPacket() const
+{
+    AkPacket packet;
+    packet.setType(AkPacket::PacketSubtitle);
+    packet.setPrivateData(new AkSubtitlePacket(*this),
+                          [] (void *data) -> void * {
+                              return new AkSubtitlePacket(*reinterpret_cast<AkSubtitlePacket *>(data));
+                          },
+                          [] (void *data) {
+                              delete reinterpret_cast<AkSubtitlePacket *>(data);
+                          });
+    packet.copyMetadata(*this);
+
+    return packet;
+}
+
+const AkSubtitleCaps &AkSubtitlePacket::caps() const
+{
+    return this->d->m_caps;
+}
+
+char *AkSubtitlePacket::data() const
+{
+    return this->d->m_data.data();
+}
+
+const char *AkSubtitlePacket::constData() const
+{
+    return this->d->m_data.constData();
+}
+
+size_t AkSubtitlePacket::size() const
+{
+    return this->d->m_data.size();
+}
+
+void AkSubtitlePacket::registerTypes()
+{
+    qRegisterMetaType<AkSubtitlePacket>("AkSubtitlePacket");
+    qmlRegisterSingletonType<AkSubtitlePacket>("Ak", 1, 0, "AkSubtitlePacket",
+                                            [] (QQmlEngine *qmlEngine,
+                                                QJSEngine *jsEngine) -> QObject * {
+        Q_UNUSED(qmlEngine)
+        Q_UNUSED(jsEngine)
+
+        return new AkSubtitlePacket();
+    });
+}
+
+QDebug operator <<(QDebug debug, const AkSubtitlePacket &packet)
+{
+    QDebugStateSaver saver(debug);
+    debug.nospace() << "AkSubtitlePacket("
+                    << "caps="
+                    << packet.caps()
+                    << ",dataSize="
+                    << packet.size()
+                    << ",id="
+                    << packet.id()
+                    << ",pts="
+                    << packet.pts()
+                    << "("
+                    << packet.pts() * packet.timeBase().value()
+                    << ")"
+                    << ",timeBase="
+                    << packet.timeBase()
+                    << ",index="
+                    << packet.index()
+                    << ")";
+
+    return debug;
+}
+
+#include "moc_aksubtitlepacket.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/aksubtitlepacket.h
@@ -0,0 +1,69 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef AKSUBTITLEPACKET_H
+#define AKSUBTITLEPACKET_H
+
+#include "akpacketbase.h"
+
+class AkSubtitlePacketPrivate;
+class AkSubtitleCaps;
+class AkPacket;
+
+class AKCOMMONS_EXPORT AkSubtitlePacket: public AkPacketBase
+{
+    Q_OBJECT
+    Q_PROPERTY(AkSubtitleCaps caps
+               READ caps
+               CONSTANT)
+    Q_PROPERTY(size_t size
+               READ size
+               CONSTANT)
+
+    public:
+        AkSubtitlePacket(QObject *parent=nullptr);
+        AkSubtitlePacket(const AkSubtitleCaps &caps,
+                         size_t size,
+                         bool initialized=false);
+        AkSubtitlePacket(const AkPacket &other);
+        AkSubtitlePacket(const AkSubtitlePacket &other);
+        ~AkSubtitlePacket();
+        AkSubtitlePacket &operator =(const AkPacket &other);
+        AkSubtitlePacket &operator =(const AkSubtitlePacket &other);
+        operator bool() const;
+        operator AkPacket() const;
+
+        Q_INVOKABLE const AkSubtitleCaps &caps() const;
+        Q_INVOKABLE char *data() const;
+        Q_INVOKABLE const char *constData() const;
+        Q_INVOKABLE size_t size() const;
+
+    private:
+        AkSubtitlePacketPrivate *d;
+        void dataChanged(const QByteArray &data);
+
+    public Q_SLOTS:
+        static void registerTypes();
+};
+
+AKCOMMONS_EXPORT QDebug operator <<(QDebug debug, const AkSubtitlePacket &packet);
+
+Q_DECLARE_METATYPE(AkSubtitlePacket)
+
+#endif // AKSUBTITLEPACKET_H
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akunit.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/akunit.cpp
@@ -36,6 +36,7 @@ class AkUnitPrivate
         AkUnit::Unit m_unit {AkUnit::px};
         qreal m_pixels {0.0};
         QSize m_parentSize;
+        qreal m_scaleFactor {1.0};
 
         // Screen info
         QSize m_screenSize;
@@ -45,6 +46,7 @@ class AkUnitPrivate
         bool m_hasParent {false};
 
         explicit AkUnitPrivate(AkUnit *self);
+        void updateScaleFactor();
         qreal pixels(qreal value, AkUnit::Unit unit) const;
         qreal fromPixels(qreal value, AkUnit::Unit unit) const;
         static const UnitsMap &unitsMap();
@@ -61,7 +63,7 @@ AkUnit::AkUnit(qreal value, Unit unit):
     this->d->m_value = value;
     this->d->m_unit = unit;
     this->d->m_parentSize = this->d->m_screenSize;
-    this->d->m_pixels = this->d->pixels(value, unit);
+    this->d->m_pixels = this->d->m_scaleFactor * this->d->pixels(value, unit);
 }
 
 AkUnit::AkUnit(qreal value, const QString &unit):
@@ -71,7 +73,7 @@ AkUnit::AkUnit(qreal value, const QStrin
     this->d->m_value = value;
     this->d->m_unit = AkUnitPrivate::unitsMap().value(unit, AkUnit::px);
     this->d->m_parentSize = this->d->m_screenSize;
-    this->d->m_pixels = this->d->pixels(value, this->d->m_unit);
+    this->d->m_pixels = this->d->m_scaleFactor * this->d->pixels(value, this->d->m_unit);
 }
 
 AkUnit::AkUnit(qreal value, Unit unit, QWindow *parent):
@@ -82,7 +84,7 @@ AkUnit::AkUnit(qreal value, Unit unit, Q
     this->d->m_unit = unit;
     this->d->m_hasParent = parent != nullptr;
     this->d->m_parentSize = parent? parent->size(): this->d->m_screenSize;
-    this->d->m_pixels = this->d->pixels(value, unit);
+    this->d->m_pixels = this->d->m_scaleFactor * this->d->pixels(value, unit);
 
     if (parent) {
         QObject::connect(parent,
@@ -110,7 +112,7 @@ AkUnit::AkUnit(qreal value, const QStrin
     this->d->m_unit = AkUnitPrivate::unitsMap().value(unit, AkUnit::px);
     this->d->m_hasParent = parent != nullptr;
     this->d->m_parentSize = parent? parent->size(): this->d->m_screenSize;
-    this->d->m_pixels = this->d->pixels(value, this->d->m_unit);
+    this->d->m_pixels = this->d->m_scaleFactor * this->d->pixels(value, this->d->m_unit);
 
     if (parent) {
         QObject::connect(parent,
@@ -141,7 +143,7 @@ AkUnit::AkUnit(qreal value, Unit unit, Q
                                 QSize(qRound(parent->width()),
                                       qRound(parent->height())):
                                 this->d->m_screenSize;
-    this->d->m_pixels = this->d->pixels(value, unit);
+    this->d->m_pixels = this->d->m_scaleFactor * this->d->pixels(value, unit);
 
     if (parent) {
         QObject::connect(parent,
@@ -172,7 +174,7 @@ AkUnit::AkUnit(qreal value, const QStrin
                                 QSize(qRound(parent->width()),
                                       qRound(parent->height())):
                                 this->d->m_screenSize;
-    this->d->m_pixels = this->d->pixels(value, this->d->m_unit);
+    this->d->m_pixels = this->d->m_scaleFactor * this->d->pixels(value, this->d->m_unit);
 
     if (parent) {
         QObject::connect(parent,
@@ -200,7 +202,7 @@ AkUnit::AkUnit(const AkUnit &other):
     this->d->m_unit = other.d->m_unit;
     this->d->m_hasParent = other.d->m_hasParent;
     this->d->m_parentSize = other.d->m_screenSize;
-    this->d->m_pixels = this->d->pixels(this->d->m_value, this->d->m_unit);
+    this->d->m_pixels = this->d->m_pixels;
 }
 
 AkUnit::~AkUnit()
@@ -323,7 +325,7 @@ void AkUnit::setValue(qreal value)
         return;
 
     this->d->m_value = value;
-    auto pixels = this->d->pixels(this->d->m_value, this->d->m_unit);
+    auto pixels = this->d->m_scaleFactor * this->d->pixels(this->d->m_value, this->d->m_unit);
     bool pixelsChanged = !qFuzzyCompare(this->d->m_pixels, pixels);
 
     if (pixelsChanged)
@@ -341,7 +343,7 @@ void AkUnit::setUnit(AkUnit::Unit unit)
         return;
 
     this->d->m_unit = unit;
-    auto pixels = this->d->pixels(this->d->m_value, this->d->m_unit);
+    auto pixels = this->d->m_scaleFactor * this->d->pixels(this->d->m_value, this->d->m_unit);
     bool pixelsChanged = !qFuzzyCompare(this->d->m_pixels, pixels);
 
     if (pixelsChanged)
@@ -382,6 +384,7 @@ void AkUnit::registerTypes()
 AkUnitPrivate::AkUnitPrivate(AkUnit *self):
     self(self)
 {
+    this->updateScaleFactor();
     this->updateScreenInfo(false);
     QObject::connect(qApp,
                      &QGuiApplication::primaryScreenChanged,
@@ -391,6 +394,19 @@ AkUnitPrivate::AkUnitPrivate(AkUnit *sel
     });
 }
 
+void AkUnitPrivate::updateScaleFactor()
+{
+    auto scaleFactorStr = qgetenv("QT_SCALE_FACTOR");
+
+    if (!scaleFactorStr.isEmpty()) {
+        bool ok = false;
+        auto factor = scaleFactorStr.toDouble(&ok);
+
+        if (ok)
+            this->m_scaleFactor = factor;
+    }
+}
+
 qreal AkUnitPrivate::pixels(qreal value, AkUnit::Unit unit) const
 {
     switch (unit) {
@@ -518,7 +534,7 @@ void AkUnitPrivate::updateScreenInfo(boo
 
 void AkUnitPrivate::updatePixels()
 {
-    auto pixels = this->pixels(this->m_value, this->m_unit);
+    auto pixels = this->m_scaleFactor * this->pixels(this->m_value, this->m_unit);
 
     if (qFuzzyCompare(this->m_pixels, pixels))
         return;
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akunit.h
+++ webcamoid-9.0.0/libAvKys/Lib/src/akunit.h
@@ -32,7 +32,6 @@ class QQuickItem;
 class AKCOMMONS_EXPORT AkUnit: public QObject
 {
     Q_OBJECT
-    Q_ENUMS(AkUnit::Unit)
     Q_PROPERTY(qreal value
                READ value
                WRITE setValue
@@ -65,6 +64,7 @@ class AKCOMMONS_EXPORT AkUnit: public QO
             vmin,
             vmax,
         };
+        Q_ENUM(Unit)
 
         AkUnit(qreal value=0.0, Unit unit=px);
         AkUnit(qreal value, const QString &unit);
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akvideocaps.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/akvideocaps.cpp
@@ -1,955 +1,2277 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include <QDataStream>
-#include <QDebug>
-#include <QMetaEnum>
-#include <QSize>
-#include <QVector>
-#include <QQmlEngine>
-
-#include "akvideocaps.h"
-#include "akfrac.h"
-#include "akcaps.h"
-
-class VideoFormat
-{
-    public:
-        AkVideoCaps::PixelFormat format;
-        int bpp;
-        quint32 fourCC;
-        QVector<int> planes;
-        QVector<int> planes_div;
-
-        static inline const QVector<VideoFormat> &formats()
-        {
-            static const QVector<VideoFormat> videoFormats = {
-                {AkVideoCaps::Format_none          ,   0, AK_FOURCC_NULL           , {}              , {}          },
-                {AkVideoCaps::Format_rgb444be      ,  12, AkFourCCS("\xcBGR")      , {16}            , {1}         },
-                {AkVideoCaps::Format_rgb444le      ,  12, AkFourCCS("RGB\xc")      , {16}            , {1}         },
-                {AkVideoCaps::Format_argb444be     ,  16, AK_FOURCC_NULL           , {16}            , {1}         },
-                {AkVideoCaps::Format_argb444le     ,  16, AK_FOURCC_NULL           , {16}            , {1}         },
-                {AkVideoCaps::Format_rgb555be      ,  15, AkFourCCS("\xfBGR")      , {16}            , {1}         },
-                {AkVideoCaps::Format_rgb555le      ,  15, AkFourCCS("RGB\xf")      , {16}            , {1}         },
-                {AkVideoCaps::Format_argb555be     ,  16, AK_FOURCC_NULL           , {16}            , {1}         },
-                {AkVideoCaps::Format_argb555le     ,  16, AK_FOURCC_NULL           , {16}            , {1}         },
-                {AkVideoCaps::Format_rgb565be      ,  16, AkFourCCS("\x10""BGR")   , {16}            , {1}         },
-                {AkVideoCaps::Format_rgb565le      ,  16, AkFourCCS("RGB\x10")     , {16}            , {1}         },
-                {AkVideoCaps::Format_rgb0          ,  24, AkFourCCS("RGB\x0")      , {32}            , {1}         },
-                {AkVideoCaps::Format_rgb24         ,  24, AkFourCCS("RGB\x18")     , {24}            , {1}         },
-                {AkVideoCaps::Format_rgb48be       ,  48, AkFourCCS("0RGB")        , {48}            , {1}         },
-                {AkVideoCaps::Format_rgb48le       ,  48, AkFourCCS("RGB0")        , {48}            , {1}         },
-                {AkVideoCaps::Format_bgr444be      ,  12, AkFourCCS("\xcRGB")      , {16}            , {1}         },
-                {AkVideoCaps::Format_bgr444le      ,  12, AkFourCCS("BGR\xc")      , {16}            , {1}         },
-                {AkVideoCaps::Format_bgr555be      ,  15, AkFourCCS("\xfRGB")      , {16}            , {1}         },
-                {AkVideoCaps::Format_bgr555le      ,  15, AkFourCCS("BGR\xf")      , {16}            , {1}         },
-                {AkVideoCaps::Format_bgr565be      ,  16, AkFourCCS("\x10RGB")     , {16}            , {1}         },
-                {AkVideoCaps::Format_bgr565le      ,  16, AkFourCCS("BGR\x10")     , {16}            , {1}         },
-                {AkVideoCaps::Format_rgb666        ,  18, AK_FOURCC_NULL           , {24}            , {1}         },
-                {AkVideoCaps::Format_argb1665      ,  18, AK_FOURCC_NULL           , {24}            , {1}         },
-                {AkVideoCaps::Format_argb1666      ,  19, AK_FOURCC_NULL           , {24}            , {1}         },
-                {AkVideoCaps::Format_bgr666        ,  18, AK_FOURCC_NULL           , {24}            , {1}         },
-                {AkVideoCaps::Format_argb6666      ,  24, AK_FOURCC_NULL           , {24}            , {1}         },
-                {AkVideoCaps::Format_abgr6666      ,  24, AK_FOURCC_NULL           , {24}            , {1}         },
-                {AkVideoCaps::Format_0bgr          ,  32, AkFourCCS("\x0BGR")      , {32}            , {1}         },
-                {AkVideoCaps::Format_0rgb          ,  32, AkFourCCS("\x0RGB")      , {32}            , {1}         },
-                {AkVideoCaps::Format_abgr          ,  32, AkFourCCS("ABGR")        , {32}            , {1}         },
-                {AkVideoCaps::Format_argb          ,  32, AkFourCCS("ARGB")        , {32}            , {1}         },
-                {AkVideoCaps::Format_bgr0          ,  32, AkFourCCS("BGR\x0")      , {32}            , {1}         },
-                {AkVideoCaps::Format_bgr24         ,  32, AkFourCCS("BGR\x18")     , {24}            , {1}         },
-                {AkVideoCaps::Format_bgr48be       ,  48, AkFourCCS("0BGR")        , {48}            , {1}         },
-                {AkVideoCaps::Format_bgr48le       ,  48, AkFourCCS("BGR0")        , {48}            , {1}         },
-                {AkVideoCaps::Format_rgba          ,  32, AkFourCCS("RGBA")        , {32}            , {1}         },
-                {AkVideoCaps::Format_rgba64be      ,  64, AkFourCCS("\x40RBA")     , {64}            , {1}         },
-                {AkVideoCaps::Format_rgba64le      ,  64, AkFourCCS("RBA\x40")     , {64}            , {1}         },
-                {AkVideoCaps::Format_bgra          ,  32, AkFourCCS("BGRA")        , {32}            , {1}         },
-                {AkVideoCaps::Format_bgra64be      ,  64, AkFourCCS("\x40""BRA")   , {64}            , {1}         },
-                {AkVideoCaps::Format_bgra64le      ,  64, AkFourCCS("BRA\x40")     , {64}            , {1}         },
-                {AkVideoCaps::Format_argb1887      ,  24, AK_FOURCC_NULL           , {24}            , {1}         },
-                {AkVideoCaps::Format_bgra1888      ,  25, AK_FOURCC_NULL           , {32}            , {1}         },
-                {AkVideoCaps::Format_monob         ,   1, AkFourCCS("B0W1")        , { 1}            , {1}         },
-                {AkVideoCaps::Format_monow         ,   1, AkFourCCS("B1W0")        , { 1}            , {1}         },
-                {AkVideoCaps::Format_rgb4          ,   4, AkFourCCS("RGB\x4")      , { 4}            , {1}         },
-                {AkVideoCaps::Format_rgb4_byte     ,   4, AkFourCCS("B4BY")        , { 8}            , {1}         },
-                {AkVideoCaps::Format_rgb8          ,   8, AkFourCCS("RGB\x8")      , { 8}            , {1}         },
-                {AkVideoCaps::Format_bgr4          ,   4, AkFourCCS("BGR\x4")      , { 4}            , {1}         },
-                {AkVideoCaps::Format_bgr4_byte     ,   4, AkFourCCS("R4BY")        , { 8}            , {1}         },
-                {AkVideoCaps::Format_bgr8          ,   8, AkFourCCS("BGR\x8")      , { 8}            , {1}         },
-                {AkVideoCaps::Format_gray2         ,   2, AK_FOURCC_NULL           , { 8}            , {1}         },
-                {AkVideoCaps::Format_gray4         ,   4, AK_FOURCC_NULL           , { 8}            , {1}         },
-                {AkVideoCaps::Format_gray24        ,  24, AK_FOURCC_NULL           , {32}            , {1}         },
-                {AkVideoCaps::Format_gray32        ,  32, AK_FOURCC_NULL           , {32}            , {1}         },
-                {AkVideoCaps::Format_gray          ,   8, AkFourCCS("Y800")        , { 8}            , {1}         },
-                {AkVideoCaps::Format_gray9be       ,   9, AkFourCCS("\x9\x01Y")    , {16}            , {1}         },
-                {AkVideoCaps::Format_gray9le       ,   9, AkFourCCS("Y1\x0\x9")    , {16}            , {1}         },
-                {AkVideoCaps::Format_gray10be      ,  10, AkFourCCS("\xa\x01Y")    , {16}            , {1}         },
-                {AkVideoCaps::Format_gray10le      ,  10, AkFourCCS("Y1\x0\xa")    , {16}            , {1}         },
-                {AkVideoCaps::Format_gray12be      ,  12, AkFourCCS("\xc\x01Y")    , {16}            , {1}         },
-                {AkVideoCaps::Format_gray12le      ,  12, AkFourCCS("Y1\x0\xc")    , {16}            , {1}         },
-                {AkVideoCaps::Format_gray14be      ,  14, AkFourCCS("\xe\x01Y")    , {16}            , {1}         },
-                {AkVideoCaps::Format_gray14le      ,  14, AkFourCCS("Y1\x0\xe")    , {16}            , {1}         },
-                {AkVideoCaps::Format_gray16be      ,  16, AkFourCCS("\x10\x01Y")   , {16}            , {1}         },
-                {AkVideoCaps::Format_gray16le      ,  16, AkFourCCS("Y1\x0\x10")   , {16}            , {1}         },
-                {AkVideoCaps::Format_grayf32be     ,  32, AK_FOURCC_NULL           , {32}            , {1}         },
-                {AkVideoCaps::Format_grayf32le     ,  32, AK_FOURCC_NULL           , {32}            , {1}         },
-                {AkVideoCaps::Format_bayer_bggr8   ,   8, AkFourCCS("\xba""BG\x8") , { 8}            , {1}         },
-                {AkVideoCaps::Format_bayer_gbrg8   ,   8, AkFourCCS("\xbaGB\x8")   , { 8}            , {1}         },
-                {AkVideoCaps::Format_bayer_grbg8   ,   8, AkFourCCS("\xbaGR\x8")   , { 8}            , {1}         },
-                {AkVideoCaps::Format_bayer_rggb8   ,   8, AkFourCCS("\xbaRG\x8")   , { 8}            , {1}         },
-                {AkVideoCaps::Format_bayer_bggr16be,  16, AkFourCCS("\x10GB\xba")  , {16}            , {1}         },
-                {AkVideoCaps::Format_bayer_bggr16le,  16, AkFourCCS("\xba""BG\x10"), {16}            , {1}         },
-                {AkVideoCaps::Format_bayer_gbrg16be,  16, AkFourCCS("\x10""BG\xba"), {16}            , {1}         },
-                {AkVideoCaps::Format_bayer_gbrg16le,  16, AkFourCCS("\xbaGB\x10")  , {16}            , {1}         },
-                {AkVideoCaps::Format_bayer_grbg16be,  16, AkFourCCS("\x10RG\xba")  , {16}            , {1}         },
-                {AkVideoCaps::Format_bayer_grbg16le,  16, AkFourCCS("\xbaGR\x10")  , {16}            , {1}         },
-                {AkVideoCaps::Format_bayer_rggb16be,  16, AkFourCCS("\x10GR\xba")  , {16}            , {1}         },
-                {AkVideoCaps::Format_bayer_rggb16le,  16, AkFourCCS("\xbaRG\x10")  , {16}            , {1}         },
-                {AkVideoCaps::Format_ayuv64be      ,  64, AK_FOURCC_NULL           , {64}            , {1}         },
-                {AkVideoCaps::Format_ayuv64le      ,  64, AK_FOURCC_NULL           , {64}            , {1}         },
-                {AkVideoCaps::Format_uyvy422       ,  16, AkFourCCS("UYVY")        , {16}            , {1}         },
-                {AkVideoCaps::Format_vyuy422       ,  16, AK_FOURCC_NULL           , {16}            , {1}         },
-                {AkVideoCaps::Format_uyyvyy411     ,  12, AkFourCCS("Y411")        , {12}            , {1}         },
-                {AkVideoCaps::Format_ya16be        ,  32, AK_FOURCC_NULL           , {32}            , {1}         },
-                {AkVideoCaps::Format_ya16le        ,  32, AK_FOURCC_NULL           , {32}            , {1}         },
-                {AkVideoCaps::Format_ya8           ,  16, AkFourCCS("Y2\x0\x8")    , {16}            , {1}         },
-                {AkVideoCaps::Format_yuyv422       ,  16, AkFourCCS("YUY2")        , {16}            , {1}         },
-                {AkVideoCaps::Format_yvyu422       ,  16, AkFourCCS("YVYU")        , {16}            , {1}         },
-                {AkVideoCaps::Format_xyz12be       ,  36, AkFourCCS("\x24ZYX")     , {48}            , {1}         },
-                {AkVideoCaps::Format_xyz12le       ,  36, AkFourCCS("XYZ\x24")     , {48}            , {1}         },
-                {AkVideoCaps::Format_nv12          ,  12, AkFourCCS("NV12")        , { 8,  8}        , {1, 2}      },
-                {AkVideoCaps::Format_nv16          ,  16, AK_FOURCC_NULL           , { 8,  8}        , {1, 1}      },
-                {AkVideoCaps::Format_nv20be        ,  20, AK_FOURCC_NULL           , {16, 16}        , {1, 1}      },
-                {AkVideoCaps::Format_nv20le        ,  20, AK_FOURCC_NULL           , {16, 16}        , {1, 1}      },
-                {AkVideoCaps::Format_nv21          ,  12, AkFourCCS("NV21")        , { 8,  8}        , {1, 2}      },
-                {AkVideoCaps::Format_p010be        ,  15, AK_FOURCC_NULL           , {16, 16}        , {1, 2}      },
-                {AkVideoCaps::Format_p010le        ,  15, AK_FOURCC_NULL           , {16, 16}        , {1, 2}      },
-                {AkVideoCaps::Format_p016be        ,  24, AK_FOURCC_NULL           , {16, 16}        , {1, 2}      },
-                {AkVideoCaps::Format_p016le        ,  24, AK_FOURCC_NULL           , {16, 16}        , {1, 2}      },
-                {AkVideoCaps::Format_yuv410p       ,   9, AkFourCCS("YUV9")        , { 8,  2,  2}    , {1, 4, 4}   },
-                {AkVideoCaps::Format_yuv411p       ,  12, AkFourCCS("Y41B")        , { 8,  2,  2}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv420p       ,  12, AkFourCCS("I420")        , { 8,  4,  4}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yvu420p       ,  12, AK_FOURCC_NULL           , { 8,  4,  4}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuv422p       ,  16, AkFourCCS("Y42B")        , { 8,  4,  4}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv440p       ,  16, AkFourCCS("440P")        , { 8,  8,  8}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuv444p       ,  24, AkFourCCS("444P")        , { 8,  8,  8}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuvj411p      ,  12, AK_FOURCC_NULL           , { 8,  2,  2}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuvj420p      ,  12, AkFourCCS("I420")        , { 8,  4,  4}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuvj422p      ,  16, AkFourCCS("Y42B")        , { 8,  4,  4}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuvj440p      ,  16, AkFourCCS("440P")        , { 8,  8,  8}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuvj444p      ,  24, AkFourCCS("444P")        , { 8,  8,  8}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv420p9be    ,  13, AkFourCCS("\x9\xb3Y")    , {16,  8,  8}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuv420p9le    ,  13, AkFourCCS("Y3\xb\x9")    , {16,  8,  8}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuv420p10be   ,  15, AkFourCCS("\xa\xb3Y")    , {16,  8,  8}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuv420p10le   ,  15, AkFourCCS("Y3\xb\xa")    , {16,  8,  8}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuv420p12be   ,  18, AkFourCCS("\xc\xb3Y")    , {16,  8,  8}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuv420p12le   ,  18, AkFourCCS("Y3\xb\xc")    , {16,  8,  8}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuv420p14be   ,  21, AkFourCCS("\xe\xb3Y")    , {16,  8,  8}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuv420p14le   ,  21, AkFourCCS("Y3\xb\xe")    , {16,  8,  8}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuv420p16be   ,  24, AkFourCCS("\x10\xb3Y")   , {16,  8,  8}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuv420p16le   ,  24, AkFourCCS("Y3\xb\x10")   , {16,  8,  8}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuv422p9be    ,  18, AkFourCCS("\x9\xa3Y")    , {16,  8,  8}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv422p9le    ,  18, AkFourCCS("Y3\xa\x9")    , {16,  8,  8}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv422p10be   ,  20, AkFourCCS("\xa\xa3Y")    , {16,  8,  8}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv422p10le   ,  20, AkFourCCS("Y3\xa\xa")    , {16,  8,  8}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv422p12be   ,  24, AkFourCCS("\xc\xa3Y")    , {16,  8,  8}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv422p12le   ,  24, AkFourCCS("Y3\xa\xc")    , {16,  8,  8}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv422p14be   ,  28, AkFourCCS("\xe\xa3Y")    , {16,  8,  8}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv422p14le   ,  28, AkFourCCS("Y3\xa\xe")    , {16,  8,  8}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv422p16be   ,  32, AkFourCCS("\x10\xa3Y")   , {16,  8,  8}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv422p16le   ,  32, AkFourCCS("Y3\xa\x10")   , {16,  8,  8}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv440p10be   ,  20, AK_FOURCC_NULL           , {16, 16, 16}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuv440p10le   ,  20, AK_FOURCC_NULL           , {16, 16, 16}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuv440p12be   ,  24, AK_FOURCC_NULL           , {16, 16, 16}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuv440p12le   ,  24, AK_FOURCC_NULL           , {16, 16, 16}    , {1, 2, 2}   },
-                {AkVideoCaps::Format_yuv444p9be    ,  27, AkFourCCS("\x9\x03Y")    , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv444p9le    ,  27, AkFourCCS("Y3\x0\x9")    , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv444p10be   ,  30, AkFourCCS("\xa\x03Y")    , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv444p10le   ,  30, AkFourCCS("Y3\x0\xa")    , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv444p12be   ,  36, AkFourCCS("\xc\x03Y")    , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv444p12le   ,  36, AkFourCCS("Y3\x0\xc")    , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv444p14be   ,  42, AkFourCCS("\xe\x03Y")    , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv444p14le   ,  42, AkFourCCS("Y3\x0\xe")    , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv444p16be   ,  48, AkFourCCS("\x10\x03Y")   , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuv444p16le   ,  48, AkFourCCS("Y3\x0\x10")   , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_yuva420p      ,  20, AkFourCCS("Y4\xb\x8")    , { 8,  4,  4,  8}, {1, 2, 2, 1}},
-                {AkVideoCaps::Format_yuva422p      ,  24, AkFourCCS("Y4\xa\x8")    , { 8,  4,  4,  8}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_yuv444        ,  24, AK_FOURCC_NULL           , {24}            , {1}         },
-                {AkVideoCaps::Format_yuva444p      ,  32, AkFourCCS("Y4\x0\x8")    , { 8,  8,  8,  8}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_yuva420p9be   ,  22, AkFourCCS("\x9\xb4Y")    , {16,  8,  8, 16}, {1, 2, 2, 1}},
-                {AkVideoCaps::Format_yuva420p9le   ,  22, AkFourCCS("Y4\xb\x9")    , {16,  8,  8, 16}, {1, 2, 2, 1}},
-                {AkVideoCaps::Format_yuva420p10be  ,  25, AkFourCCS("\xa\xb4Y")    , {16,  8,  8, 16}, {1, 2, 2, 1}},
-                {AkVideoCaps::Format_yuva420p10le  ,  25, AkFourCCS("Y4\xb\xa")    , {16,  8,  8, 16}, {1, 2, 2, 1}},
-                {AkVideoCaps::Format_yuva420p16be  ,  40, AkFourCCS("\x10\xb4Y")   , {16,  8,  8, 16}, {1, 2, 2, 1}},
-                {AkVideoCaps::Format_yuva420p16le  ,  40, AkFourCCS("Y4\xb\x10")   , {16,  8,  8, 16}, {1, 2, 2, 1}},
-                {AkVideoCaps::Format_yuva422p9be   ,  27, AkFourCCS("\x9\xa4Y")    , {16,  8,  8, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_yuva422p9le   ,  27, AkFourCCS("Y4\xa\x9")    , {16,  8,  8, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_yuva422p10be  ,  30, AkFourCCS("\xa\xa4Y")    , {16,  8,  8, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_yuva422p10le  ,  30, AkFourCCS("Y4\xa\xa")    , {16,  8,  8, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_yuva422p16be  ,  48, AkFourCCS("\x10\xa4Y")   , {16,  8,  8, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_yuva422p16le  ,  48, AkFourCCS("Y4\xa\x10")   , {16,  8,  8, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_yuva444p9be   ,  36, AkFourCCS("\x9\x04Y")    , {16, 16, 16, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_yuva444p9le   ,  36, AkFourCCS("Y4\x0\x9")    , {16, 16, 16, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_yuva444p10be  ,  40, AkFourCCS("\xa\x04Y")    , {16, 16, 16, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_yuva444p10le  ,  40, AkFourCCS("Y4\x0\xa")    , {16, 16, 16, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_yuva444p16be  ,  64, AkFourCCS("\x10\x04Y")   , {16, 16, 16, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_yuva444p16le  ,  64, AkFourCCS("Y4\x0\x10")   , {16, 16, 16, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_gbrp          ,  24, AkFourCCS("G3\x0\x8")    , { 8,  8,  8}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_gbrp9be       ,  27, AkFourCCS("\x9\x03G")    , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_gbrp9le       ,  27, AkFourCCS("G3\x0\x9")    , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_gbrp10be      ,  30, AkFourCCS("\xa\x03G")    , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_gbrp10le      ,  30, AkFourCCS("G3\x0\xa")    , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_gbrp12be      ,  36, AkFourCCS("\xc\x03G")    , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_gbrp12le      ,  36, AkFourCCS("G3\x0\xc")    , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_gbrp14be      ,  42, AkFourCCS("\xe\x03G")    , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_gbrp14le      ,  42, AkFourCCS("G3\x0\xe")    , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_gbrp16be      ,  48, AkFourCCS("\x10\x03G")   , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_gbrp16le      ,  48, AkFourCCS("G3\x0\x10")   , {16, 16, 16}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_gbrpf32be     ,  96, AK_FOURCC_NULL           , {32, 32, 32}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_gbrpf32le     ,  96, AK_FOURCC_NULL           , {32, 32, 32}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_rgbp          ,  24, AK_FOURCC_NULL           , { 8,  8,  8}    , {1, 1, 1}   },
-                {AkVideoCaps::Format_rgbap         ,  32, AK_FOURCC_NULL           , { 8,  8,  8,  8}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_gbrap         ,  32, AkFourCCS("G4\x0\x8")    , { 8,  8,  8,  8}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_gbrap10be     ,  40, AkFourCCS("\xa\x04G")    , {16, 16, 16, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_gbrap10le     ,  40, AkFourCCS("G4\x0\xa")    , {16, 16, 16, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_gbrap12be     ,  48, AkFourCCS("\xc\x04G")    , {16, 16, 16, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_gbrap12le     ,  48, AkFourCCS("G4\x0\xc")    , {16, 16, 16, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_gbrap16be     ,  64, AkFourCCS("\x10\x04G")   , {16, 16, 16, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_gbrap16le     ,  64, AkFourCCS("G4\x0\x10")   , {16, 16, 16, 16}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_gbrapf32be    , 128, AK_FOURCC_NULL           , {32, 32, 32, 32}, {1, 1, 1, 1}},
-                {AkVideoCaps::Format_gbrapf32le    , 128, AK_FOURCC_NULL           , {32, 32, 32, 32}, {1, 1, 1, 1}},
-            };
-
-            return videoFormats;
-        }
-
-        static inline const VideoFormat *byFormat(AkVideoCaps::PixelFormat format)
-        {
-            for (auto &format_: formats())
-                if (format_.format == format)
-                    return &format_;
-
-            return &formats().front();
-        }
-
-        static inline const VideoFormat *byBpp(int bpp)
-        {
-            for (auto &format: formats())
-                if (format.bpp == bpp)
-                    return &format;
-
-            return &formats().front();
-        }
-
-        static inline const VideoFormat *byFourCC(quint32 fourCC)
-        {
-            for (auto &format: formats())
-                if (format.fourCC == fourCC)
-                    return &format;
-
-            return &formats().front();
-        }
-
-        template<typename T>
-        static inline T alignUp(const T &value, const T &align)
-        {
-            return (value + align - 1) & ~(align - 1);
-        }
-};
-
-class AkVideoCapsPrivate
-{
-    public:
-        AkVideoCaps::PixelFormat m_format {AkVideoCaps::Format_none};
-        int m_width {0};
-        int m_height {0};
-        int m_align {1};
-        AkFrac m_fps;
-        const QVector<int> *m_planes_div {nullptr};
-        QVector<size_t> m_bypl;
-        QVector<size_t> m_offset;
-
-        void updateParams();
-};
-
-AkVideoCaps::AkVideoCaps(QObject *parent):
-    QObject(parent)
-{
-    this->d = new AkVideoCapsPrivate();
-}
-
-AkVideoCaps::AkVideoCaps(AkVideoCaps::PixelFormat format,
-                         int width,
-                         int height,
-                         const AkFrac &fps,
-                         int align)
-{
-    this->d = new AkVideoCapsPrivate();
-    this->d->m_format = format;
-    this->d->m_width = width;
-    this->d->m_height = height;
-    this->d->m_fps = fps;
-    this->d->m_align = align;
-    this->d->updateParams();
-}
-
-AkVideoCaps::AkVideoCaps(AkVideoCaps::PixelFormat format,
-                         const QSize &size,
-                         const AkFrac &fps,
-                         int align)
-{
-    this->d = new AkVideoCapsPrivate();
-    this->d->m_format = format;
-    this->d->m_width = size.width();
-    this->d->m_height = size.height();
-    this->d->m_fps = fps;
-    this->d->m_align = align;
-    this->d->updateParams();
-}
-
-
-AkVideoCaps::AkVideoCaps(const AkCaps &caps)
-{
-    this->d = new AkVideoCapsPrivate();
-
-    if (caps.mimeType() == "video/x-raw")
-        this->update(caps);
-}
-
-AkVideoCaps::AkVideoCaps(const AkVideoCaps &other):
-    QObject()
-{
-    this->d = new AkVideoCapsPrivate();
-    this->d->m_format = other.d->m_format;
-    this->d->m_width = other.d->m_width;
-    this->d->m_height = other.d->m_height;
-    this->d->m_fps = other.d->m_fps;
-    this->d->m_align = other.d->m_align;
-    this->d->m_planes_div = other.d->m_planes_div;
-    this->d->m_bypl = other.d->m_bypl;
-    this->d->m_offset = other.d->m_offset;
-    auto properties = other.dynamicPropertyNames();
-
-    for (auto &property: properties)
-        this->setProperty(property, other.property(property));
-}
-
-AkVideoCaps::~AkVideoCaps()
-{
-    delete this->d;
-}
-
-AkVideoCaps &AkVideoCaps::operator =(const AkVideoCaps &other)
-{
-    if (this != &other) {
-        this->d->m_format = other.d->m_format;
-        this->d->m_width = other.d->m_width;
-        this->d->m_height = other.d->m_height;
-        this->d->m_fps = other.d->m_fps;
-        this->d->m_align = other.d->m_align;
-        this->d->m_planes_div = other.d->m_planes_div;
-        this->d->m_bypl = other.d->m_bypl;
-        this->d->m_offset = other.d->m_offset;
-
-        this->clear();
-        auto properties = other.dynamicPropertyNames();
-
-        for (auto &property: properties)
-            this->setProperty(property, other.property(property));
-
-        this->d->updateParams();
-    }
-
-    return *this;
-}
-
-AkVideoCaps &AkVideoCaps::operator =(const AkCaps &caps)
-{
-    if (caps.mimeType() == "video/x-raw") {
-        this->update(caps);
-    } else {
-        this->d->m_format = AkVideoCaps::Format_none;
-        this->d->m_width = 0;
-        this->d->m_height = 0;
-        this->d->m_fps = AkFrac();
-        this->d->m_align = 1;
-    }
-
-    return *this;
-}
-
-bool AkVideoCaps::operator ==(const AkVideoCaps &other) const
-{
-    if (this->dynamicPropertyNames() != other.dynamicPropertyNames())
-        return false;
-
-    for (auto &property: this->dynamicPropertyNames())
-        if (this->property(property) != other.property(property))
-            return false;
-
-    return this->d->m_format == other.d->m_format
-            && this->d->m_width == other.d->m_width
-            && this->d->m_height == other.d->m_height
-            && this->d->m_fps == other.d->m_fps
-            && this->d->m_align == other.d->m_align;
-}
-
-bool AkVideoCaps::operator !=(const AkVideoCaps &other) const
-{
-    return !(*this == other);
-}
-
-QObject *AkVideoCaps::create()
-{
-    return new AkVideoCaps();
-}
-
-QObject *AkVideoCaps::create(const AkCaps &caps)
-{
-    return new AkVideoCaps(caps);
-}
-
-QObject *AkVideoCaps::create(const AkVideoCaps &caps)
-{
-    return new AkVideoCaps(caps);
-}
-
-QObject *AkVideoCaps::create(AkVideoCaps::PixelFormat format,
-                             int width,
-                             int height,
-                             const AkFrac &fps,
-                             int align)
-{
-    return new AkVideoCaps(format, width, height, fps, align);
-}
-
-QObject *AkVideoCaps::create(const QString &format,
-                             int width,
-                             int height,
-                             const AkFrac &fps,
-                             int align)
-{
-    return new AkVideoCaps(AkVideoCaps::pixelFormatFromString(format),
-                           width,
-                           height,
-                           fps,
-                           align);
-}
-
-QObject *AkVideoCaps::create(AkVideoCaps::PixelFormat format,
-                             const QSize &size,
-                             const AkFrac &fps,
-                             int align)
-{
-    return new AkVideoCaps(format, size, fps, align);
-}
-
-QObject *AkVideoCaps::create(const QString &format,
-                             const QSize &size,
-                             const AkFrac &fps,
-                             int align)
-{
-    return new AkVideoCaps(AkVideoCaps::pixelFormatFromString(format),
-                           size,
-                           fps,
-                           align);
-}
-
-QVariant AkVideoCaps::toVariant() const
-{
-    return QVariant::fromValue(*this);
-}
-
-AkVideoCaps::operator AkCaps() const
-{
-    AkCaps caps("video/x-raw");
-    caps.setProperty("format", this->d->m_format);
-    caps.setProperty("width" , this->d->m_width);
-    caps.setProperty("height", this->d->m_height);
-    caps.setProperty("fps"   , QVariant::fromValue(this->d->m_fps));
-    caps.setProperty("align" , this->d->m_align);
-
-    return caps;
-}
-
-AkVideoCaps::operator bool() const
-{
-    return this->pictureSize() > 0;
-}
-
-AkVideoCaps::PixelFormat AkVideoCaps::format() const
-{
-    return this->d->m_format;
-}
-
-quint32 AkVideoCaps::fourCC() const
-{
-    return AkVideoCaps::fourCC(this->d->m_format);
-}
-
-int AkVideoCaps::bpp() const
-{
-    return VideoFormat::byFormat(this->d->m_format)->bpp;
-}
-
-QSize AkVideoCaps::size() const
-{
-    return {this->d->m_width, this->d->m_height};
-}
-
-int AkVideoCaps::width() const
-{
-    return this->d->m_width;
-}
-
-int AkVideoCaps::height() const
-{
-    return this->d->m_height;
-}
-
-AkFrac AkVideoCaps::fps() const
-{
-    return this->d->m_fps;
-}
-
-AkFrac &AkVideoCaps::fps()
-{
-    return this->d->m_fps;
-}
-
-int AkVideoCaps::align() const
-{
-    return this->d->m_align;
-}
-
-size_t AkVideoCaps::pictureSize() const
-{
-    auto vf = VideoFormat::byFormat(this->d->m_format);
-
-    if (!vf)
-        return 0;
-
-    size_t size = 0;
-
-    for (int i = 0; i < vf->planes.size(); i++)
-        size += this->planeSize(i);
-
-    return size;
-}
-
-AkVideoCaps AkVideoCaps::fromMap(const QVariantMap &caps)
-{
-    AkVideoCaps videoCaps;
-
-    if (!caps.contains("mimeType") || caps["mimeType"] != "video/x-raw")
-        return videoCaps;
-
-    for (auto it = caps.begin(); it != caps.end(); it++) {
-        auto value = it.value();
-
-        if (it.key() == "mimeType")
-            continue;
-
-        videoCaps.setProperty(it.key().toStdString().c_str(), value);
-    }
-
-    return videoCaps;
-}
-
-QVariantMap AkVideoCaps::toMap() const
-{
-    QVariantMap map {
-        {"mimeType", "video/x-raw"                      },
-        {"format"  , this->d->m_format                  },
-        {"width"   , this->d->m_width                   },
-        {"height"  , this->d->m_height                  },
-        {"fps"     , QVariant::fromValue(this->d->m_fps)},
-        {"align"   , this->d->m_align                   },
-    };
-
-    for (auto &property: this->dynamicPropertyNames()) {
-        auto key = QString::fromUtf8(property.constData());
-        map[key] = this->property(property);
-    }
-
-    return map;
-}
-
-AkVideoCaps &AkVideoCaps::update(const AkCaps &caps)
-{
-    if (caps.mimeType() != "video/x-raw")
-        return *this;
-
-    this->clear();
-
-    for (auto &property: caps.dynamicPropertyNames()) {
-        int i = this->metaObject()->indexOfProperty(property);
-
-        if (this->metaObject()->property(i).isWritable())
-            this->setProperty(property, caps.property(property));
-    }
-
-    this->d->updateParams();
-
-    return *this;
-}
-
-size_t AkVideoCaps::planeOffset(int plane) const
-{
-    return this->d->m_offset[plane];
-}
-
-size_t AkVideoCaps::lineOffset(int plane, int y) const
-{
-    y /= (*this->d->m_planes_div)[plane];
-
-    return this->planeOffset(plane) + this->bytesPerLine(plane) *  size_t(y);
-}
-
-size_t AkVideoCaps::bytesPerLine(int plane) const
-{
-    return this->d->m_bypl.value(plane, 0);
-}
-
-int AkVideoCaps::planes() const
-{
-    auto vf = VideoFormat::byFormat(this->d->m_format);
-
-    return vf? vf->planes.size(): 0;
-}
-
-size_t AkVideoCaps::planeSize(int plane) const
-{
-    auto bypl = this->bytesPerLine(plane);
-
-    if (bypl < 1)
-        return 0;
-
-    auto vf = VideoFormat::byFormat(this->d->m_format);
-
-    return bypl
-            * size_t(this->d->m_height)
-            / size_t(vf->planes_div[plane]);
-}
-
-AkVideoCaps AkVideoCaps::nearest(const AkVideoCapsList &caps) const
-{
-    AkVideoCaps nearestCap;
-    auto q = std::numeric_limits<uint64_t>::max();
-    auto svf = VideoFormat::byFormat(this->d->m_format);
-
-    for (auto &cap: caps) {
-        auto vf = VideoFormat::byFormat(cap.d->m_format);
-        uint64_t diffFourcc = cap.d->m_format == this->d->m_format? 0: 1;
-        auto diffWidth = cap.d->m_width - this->d->m_width;
-        auto diffHeight = cap.d->m_height - this->d->m_height;
-        auto diffBpp = vf->bpp - svf->bpp;
-        auto diffPlanes = vf->planes.size() - svf->planes.size();
-        int diffPlanesBits = 0;
-
-        if (vf->planes != svf->planes) {
-            for (auto &bits: vf->planes)
-                diffPlanesBits += bits;
-
-            for (auto &bits: svf->planes)
-                diffPlanesBits -= bits;
-        }
-
-        uint64_t k = diffFourcc
-                   + uint64_t(diffWidth * diffWidth)
-                   + uint64_t(diffHeight * diffHeight)
-                   + diffBpp * diffBpp
-                   + diffPlanes * diffPlanes
-                   + diffPlanesBits * diffPlanesBits;
-
-        if (k < q) {
-            nearestCap = cap;
-            q = k;
-        }
-    }
-
-    return nearestCap;
-}
-
-int AkVideoCaps::bitsPerPixel(AkVideoCaps::PixelFormat pixelFormat)
-{
-    return VideoFormat::byFormat(pixelFormat)->bpp;
-}
-
-int AkVideoCaps::bitsPerPixel(const QString &pixelFormat)
-{
-    return AkVideoCaps::bitsPerPixel(AkVideoCaps::pixelFormatFromString(pixelFormat));
-}
-
-QString AkVideoCaps::pixelFormatToString(AkVideoCaps::PixelFormat pixelFormat)
-{
-    AkVideoCaps caps;
-    int formatIndex = caps.metaObject()->indexOfEnumerator("PixelFormat");
-    QMetaEnum formatEnum = caps.metaObject()->enumerator(formatIndex);
-    QString format(formatEnum.valueToKey(pixelFormat));
-    format.remove("Format_");
-
-    return format;
-}
-
-AkVideoCaps::PixelFormat AkVideoCaps::pixelFormatFromString(const QString &pixelFormat)
-{
-    AkVideoCaps caps;
-    QString format = "Format_" + pixelFormat;
-    int enumIndex = caps.metaObject()->indexOfEnumerator("PixelFormat");
-    QMetaEnum enumType = caps.metaObject()->enumerator(enumIndex);
-    int enumValue = enumType.keyToValue(format.toStdString().c_str());
-
-    return static_cast<PixelFormat>(enumValue);
-}
-
-quint32 AkVideoCaps::fourCC(AkVideoCaps::PixelFormat pixelFormat)
-{
-    return VideoFormat::byFormat(pixelFormat)->fourCC;
-}
-
-quint32 AkVideoCaps::fourCC(const QString &pixelFormat)
-{
-    return AkVideoCaps::fourCC(AkVideoCaps::pixelFormatFromString(pixelFormat));
-}
-
-void AkVideoCaps::setFormat(AkVideoCaps::PixelFormat format)
-{
-    if (this->d->m_format == format)
-        return;
-
-    this->d->m_format = format;
-    this->d->updateParams();
-    emit this->formatChanged(format);
-}
-
-void AkVideoCaps::setSize(const QSize &size)
-{
-    QSize curSize(this->d->m_width, this->d->m_height);
-
-    if (curSize == size)
-        return;
-
-    this->d->m_width = size.width();
-    this->d->m_height = size.height();
-    this->d->updateParams();
-    emit this->widthChanged(size.width());
-    emit this->heightChanged(size.height());
-    emit sizeChanged(size);
-}
-
-void AkVideoCaps::setWidth(int width)
-{
-    if (this->d->m_width == width)
-        return;
-
-    this->d->m_width = width;
-    this->d->updateParams();
-    emit this->widthChanged(width);
-}
-
-void AkVideoCaps::setHeight(int height)
-{
-    if (this->d->m_height == height)
-        return;
-
-    this->d->m_height = height;
-    this->d->updateParams();
-    emit this->heightChanged(height);
-}
-
-void AkVideoCaps::setFps(const AkFrac &fps)
-{
-    if (this->d->m_fps == fps)
-        return;
-
-    this->d->m_fps = fps;
-    emit this->fpsChanged(fps);
-}
-
-void AkVideoCaps::setAlign(int align)
-{
-    if (this->d->m_align == align)
-        return;
-
-    this->d->m_align = align;
-    this->d->updateParams();
-    emit this->alignChanged(align);
-}
-
-void AkVideoCaps::resetFormat()
-{
-    this->setFormat(AkVideoCaps::Format_none);
-}
-
-void AkVideoCaps::resetSize()
-{
-    this->setSize(QSize());
-}
-
-void AkVideoCaps::resetWidth()
-{
-    this->setWidth(0);
-}
-
-void AkVideoCaps::resetHeight()
-{
-    this->setHeight(0);
-}
-
-void AkVideoCaps::resetFps()
-{
-    this->setFps(AkFrac());
-}
-
-void AkVideoCaps::resetAlign()
-{
-    this->setAlign(1);
-}
-
-void AkVideoCaps::clear()
-{
-    for (auto &property: this->dynamicPropertyNames())
-        this->setProperty(property.constData(), {});
-}
-
-void AkVideoCaps::registerTypes()
-{
-    qRegisterMetaType<AkVideoCaps>("AkVideoCaps");
-    qRegisterMetaType<AkVideoCapsList>("AkVideoCapsList");
-    qRegisterMetaTypeStreamOperators<AkVideoCaps>("AkVideoCaps");
-    qRegisterMetaType<PixelFormat>("PixelFormat");
-    qRegisterMetaType<PixelFormatList>("PixelFormatList");
-    QMetaType::registerDebugStreamOperator<AkVideoCaps::PixelFormat>();
-    qmlRegisterSingletonType<AkVideoCaps>("Ak", 1, 0, "AkVideoCaps",
-                                          [] (QQmlEngine *qmlEngine,
-                                              QJSEngine *jsEngine) -> QObject * {
-        Q_UNUSED(qmlEngine)
-        Q_UNUSED(jsEngine)
-
-        return new AkVideoCaps();
-    });
-}
-
-void AkVideoCapsPrivate::updateParams()
-{
-    auto vf = VideoFormat::byFormat(this->m_format);
-
-    if (!vf) {
-        this->m_planes_div = nullptr;
-        this->m_offset.clear();
-        this->m_bypl.clear();
-
-        return;
-    }
-
-    this->m_planes_div = &vf->planes_div;
-    this->m_offset.clear();
-    this->m_bypl.clear();
-    size_t offset = 0;
-
-    for (int i = 0; i < vf->planes_div.size(); i++) {
-        this->m_offset << offset;
-        auto bypl = VideoFormat::alignUp(size_t(vf->planes[i]
-                                                * this->m_width
-                                                / 8),
-                                         size_t(this->m_align));
-        this->m_bypl << bypl;
-        offset += bypl * size_t(this->m_height) / size_t(vf->planes_div[i]);
-    }
-}
-
-QDebug operator <<(QDebug debug, const AkVideoCaps &caps)
-{
-    debug.nospace() << "AkVideoCaps("
-                    << "format="
-                    << caps.format()
-                    << ",width="
-                    << caps.width()
-                    << ",height="
-                    << caps.height()
-                    << ",fps="
-                    << caps.fps()
-                    << ",align="
-                    << caps.align();
-
-    QStringList properties;
-
-    for (auto &property: caps.dynamicPropertyNames())
-        properties << QString::fromUtf8(property.constData());
-
-    properties.sort();
-
-    for (auto &property: properties)
-        debug.nospace() << ","
-                        << property.toStdString().c_str()
-                        << "="
-                        << caps.property(property.toStdString().c_str());
-
-    debug.nospace() << ")";
-
-    return debug.space();
-}
-
-QDebug operator <<(QDebug debug, AkVideoCaps::PixelFormat format)
-{
-    debug.nospace() << AkVideoCaps::pixelFormatToString(format).toStdString().c_str();
-
-    return debug.space();
-}
-
-QDataStream &operator >>(QDataStream &istream, AkVideoCaps &caps)
-{
-    int nProperties;
-    istream >> nProperties;
-
-    for (int i = 0; i < nProperties; i++) {
-        QByteArray key;
-        QVariant value;
-        istream >> key;
-        istream >> value;
-
-        caps.setProperty(key.toStdString().c_str(), value);
-    }
-
-    return istream;
-}
-
-QDataStream &operator <<(QDataStream &ostream, const AkVideoCaps &caps)
-{
-    QVariantMap staticProperties {
-        {"format", caps.format()                  },
-        {"width" , caps.width()                   },
-        {"height", caps.height()                  },
-        {"fps"   , QVariant::fromValue(caps.fps())},
-        {"align" , caps.align()                   },
-    };
-
-    int nProperties =
-            staticProperties.size() + caps.dynamicPropertyNames().size();
-    ostream << nProperties;
-
-    for (auto &key: caps.dynamicPropertyNames()) {
-        ostream << key;
-        ostream << caps.property(key);
-    }
-
-    return ostream;
-}
-
-#include "moc_akvideocaps.cpp"
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2016  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QDataStream>
+#include <QDebug>
+#include <QMetaEnum>
+#include <QSize>
+#include <QVector>
+#include <QQmlEngine>
+#include <QtMath>
+
+#include "akvideocaps.h"
+#include "akfrac.h"
+#include "akcaps.h"
+#include "akvideoformatspec.h"
+
+#define VFT_Unknown AkVideoFormatSpec::VFT_Unknown
+#define VFT_RGB     AkVideoFormatSpec::VFT_RGB
+#define VFT_YUV     AkVideoFormatSpec::VFT_YUV
+#define VFT_Gray    AkVideoFormatSpec::VFT_Gray
+
+#define CT_R AkColorComponent::CT_R
+#define CT_G AkColorComponent::CT_G
+#define CT_B AkColorComponent::CT_B
+#define CT_Y AkColorComponent::CT_Y
+#define CT_U AkColorComponent::CT_U
+#define CT_V AkColorComponent::CT_V
+#define CT_A AkColorComponent::CT_A
+
+class VideoFormat
+{
+    public:
+        AkVideoCaps::PixelFormat format;
+        AkVideoFormatSpec spec;
+
+        static inline const VideoFormat *formats()
+        {
+            static const VideoFormat videoFormats[] = {
+                {AkVideoCaps::Format_0bgr,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_B, 4, 1, 0, 1, 8, 0, 0},
+                        {CT_G, 4, 2, 0, 1, 8, 0, 0},
+                        {CT_R, 4, 3, 0, 1, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_0bgrpackbe,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_B, 4, 0, 16, 4, 8, 0, 0},
+                        {CT_G, 4, 0,  8, 4, 8, 0, 0},
+                        {CT_R, 4, 0,  0, 4, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_0bgrpackle,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_B, 4, 0, 16, 4, 8, 0, 0},
+                        {CT_G, 4, 0,  8, 4, 8, 0, 0},
+                        {CT_R, 4, 0,  0, 4, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_0bgr444be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_B, 2, 0,  8, 2, 4, 0, 0},
+                        {CT_G, 2, 0,  4, 2, 4, 0, 0},
+                        {CT_R, 2, 0,  0, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_0bgr444le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_B, 2, 0,  8, 2, 4, 0, 0},
+                        {CT_G, 2, 0,  4, 2, 4, 0, 0},
+                        {CT_R, 2, 0,  0, 2, 4, 0, 0}}, 16}
+                  }}},
+                 {AkVideoCaps::Format_0rgb,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_R, 4, 1, 0, 1, 8, 0, 0},
+                        {CT_G, 4, 2, 0, 1, 8, 0, 0},
+                        {CT_B, 4, 3, 0, 1, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_0rgbpackbe,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_R, 4, 0, 16, 4, 8, 0, 0},
+                        {CT_G, 4, 0,  8, 4, 8, 0, 0},
+                        {CT_B, 4, 0,  0, 4, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_0rgbpackle,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_R, 4, 0, 16, 4, 8, 0, 0},
+                        {CT_G, 4, 0,  8, 4, 8, 0, 0},
+                        {CT_B, 4, 0,  0, 4, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_0yuv,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 4, 1, 0, 1, 8, 0, 0},
+                        {CT_U, 4, 2, 0, 1, 8, 0, 0},
+                        {CT_V, 4, 3, 0, 1, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_abgr,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_A, 4, 0, 0, 1, 8, 0, 0},
+                        {CT_B, 4, 1, 0, 1, 8, 0, 0},
+                        {CT_G, 4, 2, 0, 1, 8, 0, 0},
+                        {CT_R, 4, 3, 0, 1, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_abgr1555be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_A, 2, 0, 15, 2, 1, 0, 0},
+                        {CT_B, 2, 0, 10, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  5, 2, 5, 0, 0},
+                        {CT_R, 2, 0,  0, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_abgr1555le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_A, 2, 0, 15, 2, 1, 0, 0},
+                        {CT_B, 2, 0, 10, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  5, 2, 5, 0, 0},
+                        {CT_R, 2, 0,  0, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_abgr4444be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_A, 2, 0, 12, 2, 4, 0, 0},
+                        {CT_B, 2, 0,  8, 2, 4, 0, 0},
+                        {CT_G, 2, 0,  4, 2, 4, 0, 0},
+                        {CT_R, 2, 0,  0, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_abgr4444le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_A, 2, 0, 12, 2, 4, 0, 0},
+                        {CT_B, 2, 0,  8, 2, 4, 0, 0},
+                        {CT_G, 2, 0,  4, 2, 4, 0, 0},
+                        {CT_R, 2, 0,  0, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_argb,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_A, 4, 0, 0, 1, 8, 0, 0},
+                        {CT_R, 4, 1, 0, 1, 8, 0, 0},
+                        {CT_G, 4, 2, 0, 1, 8, 0, 0},
+                        {CT_B, 4, 3, 0, 1, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_argbpackbe,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_A, 4, 0, 24, 4, 8, 0, 0},
+                        {CT_R, 4, 0, 16, 4, 8, 0, 0},
+                        {CT_G, 4, 0,  8, 4, 8, 0, 0},
+                        {CT_B, 4, 0,  0, 4, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_argbpackle,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_A, 4, 0, 24, 4, 8, 0, 0},
+                        {CT_R, 4, 0, 16, 4, 8, 0, 0},
+                        {CT_G, 4, 0,  8, 4, 8, 0, 0},
+                        {CT_B, 4, 0,  0, 4, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_abgrpackbe,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_A, 4, 0, 24, 4, 8, 0, 0},
+                        {CT_B, 4, 0, 16, 4, 8, 0, 0},
+                        {CT_G, 4, 0,  8, 4, 8, 0, 0},
+                        {CT_R, 4, 0,  0, 4, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_abgrpackle,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_A, 4, 0, 24, 4, 8, 0, 0},
+                        {CT_B, 4, 0, 16, 4, 8, 0, 0},
+                        {CT_G, 4, 0,  8, 4, 8, 0, 0},
+                        {CT_R, 4, 0,  0, 4, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_argb1555be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_A, 2, 0, 15, 2, 1, 0, 0},
+                        {CT_R, 2, 0, 10, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  5, 2, 5, 0, 0},
+                        {CT_B, 2, 0,  0, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_argb1555le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_A, 2, 0, 15, 2, 1, 0, 0},
+                        {CT_R, 2, 0, 10, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  5, 2, 5, 0, 0},
+                        {CT_B, 2, 0,  0, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_argb4444be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_A, 2, 0, 12, 2, 4, 0, 0},
+                        {CT_R, 2, 0,  8, 2, 4, 0, 0},
+                        {CT_G, 2, 0,  4, 2, 4, 0, 0},
+                        {CT_B, 2, 0,  0, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_argb4444le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_A, 2, 0, 12, 2, 4, 0, 0},
+                        {CT_R, 2, 0,  8, 2, 4, 0, 0},
+                        {CT_G, 2, 0,  4, 2, 4, 0, 0},
+                        {CT_B, 2, 0,  0, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_argb64be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_A, 8, 0, 0, 2, 16, 0, 0},
+                        {CT_R, 8, 2, 0, 2, 16, 0, 0},
+                        {CT_G, 8, 4, 0, 2, 16, 0, 0},
+                        {CT_B, 8, 6, 0, 2, 16, 0, 0}}, 64}
+                  }}},
+                {AkVideoCaps::Format_argb64le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_A, 8, 0, 0, 2, 16, 0, 0},
+                        {CT_R, 8, 2, 0, 2, 16, 0, 0},
+                        {CT_G, 8, 4, 0, 2, 16, 0, 0},
+                        {CT_B, 8, 6, 0, 2, 16, 0, 0}}, 64}
+                  }}},
+                {AkVideoCaps::Format_argb2101010be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_A, 8, 0, 30, 2,  2, 0, 0},
+                        {CT_R, 8, 0, 20, 2, 10, 0, 0},
+                        {CT_G, 8, 0, 10, 2, 10, 0, 0},
+                        {CT_B, 8, 0,  0, 2, 10, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_argb2101010le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_A, 8, 0, 30, 2,  2, 0, 0},
+                        {CT_R, 8, 0, 20, 2, 10, 0, 0},
+                        {CT_G, 8, 0, 10, 2, 10, 0, 0},
+                        {CT_B, 8, 0,  0, 2, 10, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_rgba1010102be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_R, 8, 0, 22, 2, 10, 0, 0},
+                        {CT_G, 8, 0, 12, 2, 10, 0, 0},
+                        {CT_B, 8, 0,  2, 2, 10, 0, 0},
+                        {CT_A, 8, 0,  0, 2,  2, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_rgba1010102le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_R, 8, 0, 22, 2, 10, 0, 0},
+                        {CT_G, 8, 0, 12, 2, 10, 0, 0},
+                        {CT_B, 8, 0,  2, 2, 10, 0, 0},
+                        {CT_A, 8, 0,  0, 2,  2, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_rgb0444be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_R, 2, 0, 12, 2, 4, 0, 0},
+                        {CT_G, 2, 0,  8, 2, 4, 0, 0},
+                        {CT_B, 2, 0,  4, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_rgb0444le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_R, 2, 0, 12, 2, 4, 0, 0},
+                        {CT_G, 2, 0,  8, 2, 4, 0, 0},
+                        {CT_B, 2, 0,  4, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_ayuvpackbe,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_A, 4, 0, 24, 4, 8, 0, 0},
+                        {CT_Y, 4, 0, 16, 4, 8, 0, 0},
+                        {CT_U, 4, 0,  8, 4, 8, 0, 0},
+                        {CT_V, 4, 0,  0, 4, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_ayuvpackle,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_A, 4, 0, 24, 4, 8, 0, 0},
+                        {CT_Y, 4, 0, 16, 4, 8, 0, 0},
+                        {CT_U, 4, 0,  8, 4, 8, 0, 0},
+                        {CT_V, 4, 0,  0, 4, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_ayuv,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_A, 4, 0, 0, 1, 8, 0, 0},
+                        {CT_Y, 4, 1, 0, 1, 8, 0, 0},
+                        {CT_U, 4, 2, 0, 1, 8, 0, 0},
+                        {CT_V, 4, 3, 0, 1, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_ayuv64be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_A, 8, 0, 0, 2, 16, 0, 0},
+                        {CT_Y, 8, 2, 0, 2, 16, 0, 0},
+                        {CT_U, 8, 4, 0, 2, 16, 0, 0},
+                        {CT_V, 8, 6, 0, 2, 16, 0, 0}}, 64}
+                  }}},
+                {AkVideoCaps::Format_ayuv64le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_A, 8, 0, 0, 2, 16, 0, 0},
+                        {CT_Y, 8, 2, 0, 2, 16, 0, 0},
+                        {CT_U, 8, 4, 0, 2, 16, 0, 0},
+                        {CT_V, 8, 6, 0, 2, 16, 0, 0}}, 64}
+                  }}},
+                {AkVideoCaps::Format_bgr0,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_B, 4, 0, 0, 1, 8, 0, 0},
+                        {CT_G, 4, 1, 0, 1, 8, 0, 0},
+                        {CT_R, 4, 2, 0, 1, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_bgr24,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_B, 3, 0, 0, 1, 8, 0, 0},
+                        {CT_G, 3, 1, 0, 1, 8, 0, 0},
+                        {CT_R, 3, 2, 0, 1, 8, 0, 0}}, 24}
+                  }}},
+                {AkVideoCaps::Format_bgr0444be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_B, 2, 0, 12, 2, 4, 0, 0},
+                        {CT_G, 2, 0,  8, 2, 4, 0, 0},
+                        {CT_R, 2, 0,  4, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_bgr0444le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_B, 2, 0, 12, 2, 4, 0, 0},
+                        {CT_G, 2, 0,  8, 2, 4, 0, 0},
+                        {CT_R, 2, 0,  4, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_bgr0555be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_B, 2, 0, 11, 2, 4, 0, 0},
+                        {CT_G, 2, 0,  6, 2, 4, 0, 0},
+                        {CT_R, 2, 0,  1, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_bgr0555le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_B, 2, 0, 11, 2, 4, 0, 0},
+                        {CT_G, 2, 0,  6, 2, 4, 0, 0},
+                        {CT_R, 2, 0,  1, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_bgr444be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_B, 2, 0, 8, 2, 4, 0, 0},
+                        {CT_G, 2, 0, 4, 2, 4, 0, 0},
+                        {CT_R, 2, 0, 0, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_bgr444le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_B, 2, 0, 8, 2, 4, 0, 0},
+                        {CT_G, 2, 0, 4, 2, 4, 0, 0},
+                        {CT_R, 2, 0, 0, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_bgr48be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_B, 6, 0, 0, 2, 16, 0, 0},
+                        {CT_G, 6, 2, 0, 2, 16, 0, 0},
+                        {CT_R, 6, 4, 0, 2, 16, 0, 0}}, 48}
+                  }}},
+                {AkVideoCaps::Format_bgr48le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_B, 6, 0, 0, 2, 16, 0, 0},
+                        {CT_G, 6, 2, 0, 2, 16, 0, 0},
+                        {CT_R, 6, 4, 0, 2, 16, 0, 0}}, 48}
+                  }}},
+                {AkVideoCaps::Format_bgr555be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_B, 2, 0, 10, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  5, 2, 5, 0, 0},
+                        {CT_R, 2, 0,  0, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_bgr555le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_B, 2, 0, 10, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  5, 2, 5, 0, 0},
+                        {CT_R, 2, 0,  0, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_bgr565be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_B, 2, 0, 11, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  5, 2, 6, 0, 0},
+                        {CT_R, 2, 0,  0, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_bgr565le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_B, 2, 0, 11, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  5, 2, 6, 0, 0},
+                        {CT_R, 2, 0,  0, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_bgr233,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_B, 1, 0, 6, 1, 2, 0, 0},
+                        {CT_G, 1, 0, 3, 1, 3, 0, 0},
+                        {CT_R, 1, 0, 0, 1, 3, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_bgr332,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_B, 1, 0, 5, 1, 3, 0, 0},
+                        {CT_G, 1, 0, 2, 1, 3, 0, 0},
+                        {CT_R, 1, 0, 0, 1, 2, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_bgra,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_B, 4, 0, 0, 1, 8, 0, 0},
+                        {CT_G, 4, 1, 0, 1, 8, 0, 0},
+                        {CT_R, 4, 2, 0, 1, 8, 0, 0},
+                        {CT_A, 4, 3, 0, 1, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_bgra4444be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_B, 2, 0, 12, 2, 4, 0, 0},
+                        {CT_G, 2, 0,  8, 2, 4, 0, 0},
+                        {CT_R, 2, 0,  4, 2, 4, 0, 0},
+                        {CT_A, 2, 0,  0, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_bgra4444le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_B, 2, 0, 12, 2, 4, 0, 0},
+                        {CT_G, 2, 0,  8, 2, 4, 0, 0},
+                        {CT_R, 2, 0,  4, 2, 4, 0, 0},
+                        {CT_A, 2, 0,  0, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_bgra5551be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_B, 2, 0, 11, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  6, 2, 5, 0, 0},
+                        {CT_R, 2, 0,  1, 2, 5, 0, 0},
+                        {CT_A, 2, 0,  0, 2, 1, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_bgra5551le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_B, 2, 0, 11, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  6, 2, 5, 0, 0},
+                        {CT_R, 2, 0,  1, 2, 5, 0, 0},
+                        {CT_A, 2, 0,  0, 2, 1, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_bgra64be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_B, 8, 0, 0, 2, 16, 0, 0},
+                        {CT_G, 8, 2, 0, 2, 16, 0, 0},
+                        {CT_R, 8, 4, 0, 2, 16, 0, 0},
+                        {CT_A, 8, 6, 0, 2, 16, 0, 0}}, 64}
+                  }}},
+                {AkVideoCaps::Format_bgra64le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_B, 8, 0, 0, 2, 16, 0, 0},
+                        {CT_G, 8, 2, 0, 2, 16, 0, 0},
+                        {CT_R, 8, 4, 0, 2, 16, 0, 0},
+                        {CT_A, 8, 6, 0, 2, 16, 0, 0}}, 64}
+                  }}},
+                {AkVideoCaps::Format_gbr24p,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_G, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_B, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_R, 1, 0, 0, 1, 8, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_gbrap,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_G, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_B, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_R, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_A, 1, 0, 0, 1, 8, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_gbrap10be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_G, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_B, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_R, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_A, 2, 0, 0, 2, 10, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gbrap10le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_G, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_B, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_R, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_A, 2, 0, 0, 2, 10, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gbrap12be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_G, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_B, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_R, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_A, 2, 0, 0, 2, 12, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gbrap12le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_G, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_B, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_R, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_A, 2, 0, 0, 2, 12, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gbrap16be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_G, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_B, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_R, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_A, 2, 0, 0, 2, 16, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gbrap16le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_G, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_B, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_R, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_A, 2, 0, 0, 2, 16, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gbrp,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_G, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_B, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_R, 1, 0, 0, 1, 8, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_gbrp10be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_G, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_B, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_R, 2, 0, 0, 2, 10, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gbrp10le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_G, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_B, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_R, 2, 0, 0, 2, 10, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gbrp12be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_G, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_B, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_R, 2, 0, 0, 2, 12, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gbrp12le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_G, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_B, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_R, 2, 0, 0, 2, 12, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gbrp14be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN,
+                  {
+                      {{{CT_G, 2, 0, 0, 2, 14, 0, 0}}, 16},
+                      {{{CT_B, 2, 0, 0, 2, 14, 0, 0}}, 16},
+                      {{{CT_R, 2, 0, 0, 2, 14, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gbrp14le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_G, 2, 0, 0, 2, 14, 0, 0}}, 16},
+                      {{{CT_B, 2, 0, 0, 2, 14, 0, 0}}, 16},
+                      {{{CT_R, 2, 0, 0, 2, 14, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gbrp16be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_G, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_B, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_R, 2, 0, 0, 2, 16, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gbrp16le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_G, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_B, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_R, 2, 0, 0, 2, 16, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gbrp9be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_G, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_B, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_R, 2, 0, 0, 2, 9, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gbrp9le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_G, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_B, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_R, 2, 0, 0, 2, 9, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gray9be,
+                 {VFT_Gray,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 9, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gray9le,
+                 {VFT_Gray,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 9, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gray10be,
+                 {VFT_Gray,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gray10le,
+                 {VFT_Gray,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gray12be,
+                 {VFT_Gray,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 12, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gray12le,
+                 {VFT_Gray,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 12, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gray14be,
+                 {VFT_Gray,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 14, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gray14le,
+                 {VFT_Gray,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 14, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gray16be,
+                 {VFT_Gray,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gray16le,
+                 {VFT_Gray,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_gray32be,
+                 {VFT_Gray,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 4, 0, 0, 4, 32, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_gray32le,
+                 {VFT_Gray,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 4, 0, 0, 4, 32, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_gray4,
+                 {VFT_Gray,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 4, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_gray6,
+                 {VFT_Gray,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 6, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_gray8,
+                 {VFT_Gray,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_graya8,
+                 {VFT_Gray,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 2, 0, 0, 1, 8, 0, 0},
+                        {CT_A, 2, 1, 0, 1, 8, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_graya8packbe,
+                 {VFT_Gray,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 8, 2, 8, 0, 0},
+                        {CT_A, 2, 0, 0, 2, 8, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_graya8packle,
+                 {VFT_Gray,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 8, 2, 8, 0, 0},
+                        {CT_A, 2, 0, 0, 2, 8, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_graya16be,
+                 {VFT_Gray,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 4, 0, 0, 2, 16, 0, 0},
+                       {CT_A, 4, 2, 0, 2, 16, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_graya16le,
+                 {VFT_Gray,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 4, 0, 0, 2, 16, 0, 0},
+                        {CT_A, 4, 2, 0, 2, 16, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_nv12,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_U, 2, 0, 0, 1, 8, 1, 1},
+                        {CT_V, 2, 1, 0, 1, 8, 1, 1}}, 8}
+                  }}},
+                {AkVideoCaps::Format_nv12a,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_U, 2, 0, 0, 1, 8, 1, 1},
+                        {CT_V, 2, 1, 0, 1, 8, 1, 1}}, 8},
+                      {{{CT_A, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                  }}},
+                {AkVideoCaps::Format_nv16,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_U, 2, 0, 0, 1, 8, 1, 0},
+                        {CT_V, 2, 1, 0, 1, 8, 1, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_nv20be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_V, 4, 0, 0, 2, 10, 1, 0},
+                        {CT_U, 4, 2, 0, 2, 10, 1, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_nv20le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_V, 4, 0, 0, 2, 10, 1, 0},
+                        {CT_U, 4, 2, 0, 2, 10, 1, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_nv21,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 1, 8, 1, 1},
+                        {CT_U, 2, 1, 0, 1, 8, 1, 1}}, 8}
+                  }}},
+                {AkVideoCaps::Format_nv24,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_U, 2, 0, 0, 1, 8, 0, 0},
+                        {CT_V, 2, 1, 0, 1, 8, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_nv42,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 1, 8, 0, 0},
+                        {CT_U, 2, 1, 0, 1, 8, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_nv61,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 1, 8, 1, 0},
+                        {CT_U, 2, 1, 0, 1, 8, 1, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_p010be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 6, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 4, 0, 6, 2, 10, 1, 1},
+                        {CT_V, 4, 2, 6, 2, 10, 1, 1}}, 16}
+                  }}},
+                {AkVideoCaps::Format_p010le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 6, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 4, 0, 6, 2, 10, 1, 1},
+                        {CT_V, 4, 2, 6, 2, 10, 1, 1}}, 16}
+                  }}},
+                {AkVideoCaps::Format_p016be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 4, 0, 0, 2, 16, 1, 1},
+                        {CT_V, 4, 2, 0, 2, 16, 1, 1}}, 16}
+                  }}},
+                {AkVideoCaps::Format_p016le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 4, 0, 0, 2, 16, 1, 1},
+                        {CT_V, 4, 2, 0, 2, 16, 1, 1}}, 16}
+                  }}},
+                {AkVideoCaps::Format_p210be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 6, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 4, 0, 6, 2, 10, 1, 0},
+                        {CT_V, 4, 2, 6, 2, 10, 1, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_p210le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 6, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 4, 0, 6, 2, 10, 1, 0},
+                        {CT_V, 4, 2, 6, 2, 10, 1, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_p216be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 4, 0, 0, 2, 16, 1, 0},
+                        {CT_V, 4, 2, 0, 2, 16, 1, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_p216le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 4, 0, 0, 2, 16, 1, 0},
+                        {CT_V, 4, 2, 0, 2, 16, 1, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_p410be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 6, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 4, 0, 6, 2, 10, 0, 0},
+                        {CT_V, 4, 2, 6, 2, 10, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_p410le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 6, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 4, 0, 6, 2, 10, 0, 0},
+                        {CT_V, 4, 2, 6, 2, 10, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_p416be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 4, 0, 0, 2, 16, 0, 0},
+                        {CT_V, 4, 2, 0, 2, 16, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_p416le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 4, 0, 0, 2, 16, 0, 0},
+                        {CT_V, 4, 2, 0, 2, 16, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_rgb0,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_R, 4, 0, 0, 1, 8, 0, 0},
+                        {CT_G, 4, 1, 0, 1, 8, 0, 0},
+                        {CT_B, 4, 2, 0, 1, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_rgb24,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_R, 3, 0, 0, 1, 8, 0, 0},
+                        {CT_G, 3, 1, 0, 1, 8, 0, 0},
+                        {CT_B, 3, 2, 0, 1, 8, 0, 0}}, 24}
+                  }}},
+                {AkVideoCaps::Format_rgb24p,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_R, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_G, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_B, 1, 0, 0, 1, 8, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_rgb444be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_R, 2, 0, 8, 2, 4, 0, 0},
+                        {CT_G, 2, 0, 4, 2, 4, 0, 0},
+                        {CT_B, 2, 0, 0, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_rgb444le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_R, 2, 0, 8, 2, 4, 0, 0},
+                        {CT_G, 2, 0, 4, 2, 4, 0, 0},
+                        {CT_B, 2, 0, 0, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_rgb48be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN   , {
+                      {{{CT_R, 6, 0, 0, 2, 16, 0, 0},
+                        {CT_G, 6, 2, 0, 2, 16, 0, 0},
+                        {CT_B, 6, 4, 0, 2, 16, 0, 0}}, 48}
+                  }}},
+                {AkVideoCaps::Format_rgb48le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_R, 6, 0, 0, 2, 16, 0, 0},
+                        {CT_G, 6, 2, 0, 2, 16, 0, 0},
+                        {CT_B, 6, 4, 0, 2, 16, 0, 0}}, 48}
+                  }}},
+                {AkVideoCaps::Format_rgb555be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_R, 2, 0, 10, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  5, 2, 5, 0, 0},
+                        {CT_B, 2, 0,  0, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_rgb555le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_R, 2, 0, 10, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  5, 2, 5, 0, 0},
+                        {CT_B, 2, 0,  0, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_rgb5550be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_R, 2, 0, 11, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  6, 2, 5, 0, 0},
+                        {CT_B, 2, 0,  1, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_rgb5550le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_R, 2, 0, 11, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  6, 2, 5, 0, 0},
+                        {CT_B, 2, 0,  1, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_rgb565be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_R, 2, 0, 11, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  5, 2, 6, 0, 0},
+                        {CT_B, 2, 0,  0, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_rgb565le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_R, 2, 0, 11, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  5, 2, 6, 0, 0},
+                        {CT_B, 2, 0,  0, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_rgb233,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_R, 1, 0, 6, 1, 2, 0, 0},
+                        {CT_G, 1, 0, 3, 1, 3, 0, 0},
+                        {CT_B, 1, 0, 0, 1, 3, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_rgb332,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_R, 1, 0, 5, 1, 3, 0, 0},
+                        {CT_G, 1, 0, 2, 1, 3, 0, 0},
+                        {CT_B, 1, 0, 0, 1, 2, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_rgba,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_R, 4, 0, 0, 1, 8, 0, 0},
+                        {CT_G, 4, 1, 0, 1, 8, 0, 0},
+                        {CT_B, 4, 2, 0, 1, 8, 0, 0},
+                        {CT_A, 4, 3, 0, 1, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_rgbapackbe,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_R, 4, 0, 24, 4, 8, 0, 0},
+                        {CT_G, 4, 0, 16, 4, 8, 0, 0},
+                        {CT_B, 4, 0,  8, 4, 8, 0, 0},
+                        {CT_A, 4, 0,  0, 4, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_rgbapackle,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_R, 4, 0, 24, 4, 8, 0, 0},
+                        {CT_G, 4, 0, 16, 4, 8, 0, 0},
+                        {CT_B, 4, 0,  8, 4, 8, 0, 0},
+                        {CT_A, 4, 0,  0, 4, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_rgb0packbe,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_R, 4, 0, 24, 4, 8, 0, 0},
+                        {CT_G, 4, 0, 16, 4, 8, 0, 0},
+                        {CT_B, 4, 0,  8, 4, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_rgb0packle,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_R, 4, 0, 24, 4, 8, 0, 0},
+                        {CT_G, 4, 0, 16, 4, 8, 0, 0},
+                        {CT_B, 4, 0,  8, 4, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_rgba4444be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_R, 2, 0, 12, 2, 4, 0, 0},
+                        {CT_G, 2, 0,  8, 2, 4, 0, 0},
+                        {CT_B, 2, 0,  4, 2, 4, 0, 0},
+                        {CT_A, 2, 0,  0, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_rgba4444le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_R, 2, 0, 12, 2, 4, 0, 0},
+                        {CT_G, 2, 0,  8, 2, 4, 0, 0},
+                        {CT_B, 2, 0,  4, 2, 4, 0, 0},
+                        {CT_A, 2, 0,  0, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_rgb0555be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_R, 2, 0, 11, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  6, 2, 5, 0, 0},
+                        {CT_B, 2, 0,  1, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_rgb0555le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_R, 2, 0, 11, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  6, 2, 5, 0, 0},
+                        {CT_B, 2, 0,  1, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_rgba5551be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_R, 2, 0, 11, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  6, 2, 5, 0, 0},
+                        {CT_B, 2, 0,  1, 2, 5, 0, 0},
+                        {CT_A, 2, 0,  0, 2, 1, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_rgba5551le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_R, 2, 0, 11, 2, 5, 0, 0},
+                        {CT_G, 2, 0,  6, 2, 5, 0, 0},
+                        {CT_B, 2, 0,  1, 2, 5, 0, 0},
+                        {CT_A, 2, 0,  0, 2, 1, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_rgba64be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_R, 8, 0, 0, 2, 16, 0, 0},
+                        {CT_G, 8, 2, 0, 2, 16, 0, 0},
+                        {CT_B, 8, 4, 0, 2, 16, 0, 0},
+                        {CT_A, 8, 6, 0, 2, 16, 0, 0}}, 64}
+                  }}},
+                {AkVideoCaps::Format_rgba64le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_R, 8, 0, 0, 2, 16, 0, 0},
+                        {CT_G, 8, 2, 0, 2, 16, 0, 0},
+                        {CT_B, 8, 4, 0, 2, 16, 0, 0},
+                        {CT_A, 8, 6, 0, 2, 16, 0, 0}}, 64}
+                  }}},
+                {AkVideoCaps::Format_rgbap,
+                 {VFT_RGB,
+                  Q_BYTE_ORDER, {
+                      {{{CT_R, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_G, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_B, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_A, 1, 0, 0, 1, 8, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_uyvy411,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_U, 4, 0, 0, 1, 8, 2, 0},
+                        {CT_Y, 2, 1, 0, 1, 8, 0, 0},
+                        {CT_V, 4, 2, 0, 1, 8, 2, 0}}, 12}
+                  }}},
+                {AkVideoCaps::Format_uyvy422,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_U, 4, 0, 0, 1, 8, 1, 0},
+                        {CT_Y, 2, 1, 0, 1, 8, 0, 0},
+                        {CT_V, 4, 2, 0, 1, 8, 1, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_uyvy422a,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_U, 4, 0, 0, 1, 8, 1, 0},
+                        {CT_Y, 2, 1, 0, 1, 8, 0, 0},
+                        {CT_V, 4, 2, 0, 1, 8, 1, 0}}, 16},
+                      {{{CT_A, 1, 0, 0, 1, 8, 0, 0}},  8}
+                  }}},
+                {AkVideoCaps::Format_uyva,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_U, 4, 0, 0, 1, 8, 0, 0},
+                        {CT_Y, 4, 1, 0, 1, 8, 0, 0},
+                        {CT_V, 4, 2, 0, 1, 8, 0, 0},
+                        {CT_A, 4, 3, 0, 1, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_y210be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_V, 4, 0, 6, 2, 10, 0, 0},
+                        {CT_U, 8, 2, 6, 2, 10, 1, 0},
+                        {CT_Y, 8, 6, 6, 2, 10, 1, 0}}, 24}
+                  }}},
+                {AkVideoCaps::Format_y210le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_V, 4, 0, 6, 2, 10, 0, 0},
+                        {CT_U, 8, 2, 6, 2, 10, 1, 0},
+                        {CT_Y, 8, 6, 6, 2, 10, 1, 0}}, 24}
+                  }}},
+                {AkVideoCaps::Format_vuya,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_V, 4, 0, 0, 1, 8, 0, 0},
+                        {CT_U, 4, 1, 0, 1, 8, 0, 0},
+                        {CT_Y, 4, 2, 0, 1, 8, 0, 0},
+                        {CT_A, 4, 3, 0, 1, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_vuy0,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_V, 4, 0, 0, 1, 8, 0, 0},
+                        {CT_U, 4, 1, 0, 1, 8, 0, 0},
+                        {CT_Y, 4, 2, 0, 1, 8, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_vyuy422,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_V, 4, 0, 0, 1, 8, 1, 0},
+                        {CT_Y, 2, 1, 0, 1, 8, 0, 0},
+                        {CT_U, 4, 2, 0, 1, 8, 1, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_bgr30be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_B, 4, 0, 20, 4, 10, 0, 0},
+                        {CT_G, 4, 0, 10, 4, 10, 0, 0},
+                        {CT_R, 4, 0,  0, 4, 10, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_bgr30le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_B, 4, 0, 20, 4, 10, 0, 0},
+                        {CT_G, 4, 0, 10, 4, 10, 0, 0},
+                        {CT_R, 4, 0,  0, 4, 10, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_rgb30be,
+                 {VFT_RGB,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_R, 4, 0, 20, 4, 10, 0, 0},
+                        {CT_G, 4, 0, 10, 4, 10, 0, 0},
+                        {CT_B, 4, 0,  0, 4, 10, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_rgb30le,
+                 {VFT_RGB,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_R, 4, 0, 20, 4, 10, 0, 0},
+                        {CT_G, 4, 0, 10, 4, 10, 0, 0},
+                        {CT_B, 4, 0,  0, 4, 10, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_yuv24,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 3, 0, 0, 1, 8, 0, 0},
+                        {CT_U, 3, 1, 0, 1, 8, 0, 0},
+                        {CT_V, 3, 2, 0, 1, 8, 0, 0}}, 24}
+                  }}},
+                {AkVideoCaps::Format_yuv30be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 4, 0, 20, 4, 10, 0, 0},
+                        {CT_U, 4, 0, 10, 4, 10, 0, 0},
+                        {CT_V, 4, 0,  0, 4, 10, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_yuv30le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 4, 0, 20, 4, 10, 0, 0},
+                        {CT_U, 4, 0, 10, 4, 10, 0, 0},
+                        {CT_V, 4, 0,  0, 4, 10, 0, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_yuv410p,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_U, 1, 0, 0, 1, 8, 2, 2}}, 2},
+                      {{{CT_V, 1, 0, 0, 1, 8, 2, 2}}, 2}
+                  }}},
+                {AkVideoCaps::Format_yuv411p,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_U, 1, 0, 0, 1, 8, 2, 0}}, 2},
+                      {{{CT_V, 1, 0, 0, 1, 8, 2, 0}}, 2}
+                  }}},
+                {AkVideoCaps::Format_yuv420p,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_U, 1, 0, 0, 1, 8, 1, 1}}, 4},
+                      {{{CT_V, 1, 0, 0, 1, 8, 1, 1}}, 4}
+                  }}},
+                {AkVideoCaps::Format_yuv420p10be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 10, 1, 1}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 10, 1, 1}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv420p10le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 10, 1, 1}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 10, 1, 1}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv420p12be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 12, 1, 1}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 12, 1, 1}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv420p12le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 12, 1, 1}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 12, 1, 1}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv420p14be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 14, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 14, 1, 1}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 14, 1, 1}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv420p14le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 14, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 14, 1, 1}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 14, 1, 1}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv420p16be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 16, 1, 1}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 16, 1, 1}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv420p16le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 16, 1, 1}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 16, 1, 1}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv420p9be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 9, 1, 1}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 9, 1, 1}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv420p9le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 9, 1, 1}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 9, 1, 1}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv422p,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_U, 1, 0, 0, 1, 8, 1, 0}}, 4},
+                      {{{CT_V, 1, 0, 0, 1, 8, 1, 0}}, 4}
+                  }}},
+                {AkVideoCaps::Format_yuv422p10be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 10, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 10, 1, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv422p10le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 10, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 10, 1, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv422p12be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 12, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 12, 1, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv422p12le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 12, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 12, 1, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv422p14be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 14, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 14, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 14, 1, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv422p14le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 14, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 14, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 14, 1, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv422p16be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN   , {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 16, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 16, 1, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv422p16le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 16, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 16, 1, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv422p9be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 9, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 9, 1, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv422p9le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 9, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 9, 1, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv440p,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_U, 1, 0, 0, 1, 8, 0, 1}}, 8},
+                      {{{CT_V, 1, 0, 0, 1, 8, 0, 1}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv440p10be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 10, 0, 1}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 10, 0, 1}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv440p10le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 10, 0, 1}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 10, 0, 1}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv440p12be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 12, 0, 1}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 12, 0, 1}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv440p12le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 12, 0, 1}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 12, 0, 1}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv444,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0},
+                        {CT_U, 1, 1, 0, 1, 8, 0, 0},
+                        {CT_V, 1, 2, 0, 1, 8, 0, 0}}, 24}
+                  }}},
+                {AkVideoCaps::Format_yuv444p,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_U, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_V, 1, 0, 0, 1, 8, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuv444p10be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 10, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv444p10le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 10, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv444p12be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 12, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv444p12le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 12, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv444p14be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 14, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 14, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 14, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv444p14le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 14, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 14, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 14, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv444p16be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 16, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv444p16le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 16, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv444p9be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 9, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv444p9le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 9, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv444packbe,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 8, 2, 4, 0, 0},
+                        {CT_U, 2, 0, 4, 2, 4, 0, 0},
+                        {CT_V, 2, 0, 0, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv444packle,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 8, 2, 4, 0, 0},
+                        {CT_U, 2, 0, 4, 2, 4, 0, 0},
+                        {CT_V, 2, 0, 0, 2, 4, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv555packbe,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 10, 2, 5, 0, 0},
+                        {CT_U, 2, 0,  5, 2, 5, 0, 0},
+                        {CT_V, 2, 0,  0, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv555packle,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 10, 2, 5, 0, 0},
+                        {CT_U, 2, 0,  5, 2, 5, 0, 0},
+                        {CT_V, 2, 0,  0, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv565packbe,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 11, 2, 5, 0, 0},
+                        {CT_U, 2, 0,  5, 2, 6, 0, 0},
+                        {CT_V, 2, 0,  0, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuv565packle,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 11, 2, 5, 0, 0},
+                        {CT_U, 2, 0,  5, 2, 6, 0, 0},
+                        {CT_V, 2, 0,  0, 2, 5, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva420p,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_U, 1, 0, 0, 1, 8, 1, 1}}, 4},
+                      {{{CT_V, 1, 0, 0, 1, 8, 1, 1}}, 4},
+                      {{{CT_A, 1, 0, 0, 1, 8, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuva420p10be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 10, 1, 1}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 10, 1, 1}}, 8},
+                      {{{CT_A, 2, 0, 0, 2, 10, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva420p10le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 10, 1, 1}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 10, 1, 1}}, 8},
+                      {{{CT_A, 2, 0, 0, 2, 10, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva420p16be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 16, 1, 1}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 16, 1, 1}}, 8},
+                      {{{CT_A, 2, 0, 0, 2, 16, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva420p16le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 16, 1, 1}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 16, 1, 1}}, 8},
+                      {{{CT_A, 2, 0, 0, 2, 16, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva420p9be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 9, 1, 1}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 9, 1, 1}}, 8},
+                      {{{CT_A, 2, 0, 0, 2, 9, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva420p9le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 9, 1, 1}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 9, 1, 1}}, 8},
+                      {{{CT_A, 2, 0, 0, 2, 9, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva422p,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_U, 1, 0, 0, 1, 8, 1, 0}}, 4},
+                      {{{CT_V, 1, 0, 0, 1, 8, 1, 0}}, 4},
+                      {{{CT_A, 1, 0, 0, 1, 8, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuva422p10be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 10, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 10, 1, 0}}, 8},
+                      {{{CT_A, 2, 0, 0, 2, 10, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva422p10le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 10, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 10, 1, 0}}, 8},
+                      {{{CT_A, 2, 0, 0, 2, 10, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva422p12be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 12, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 12, 1, 0}}, 8},
+                      {{{CT_A, 2, 0, 0, 2, 12, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva422p12le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 12, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 12, 1, 0}}, 8},
+                      {{{CT_A, 2, 0, 0, 2, 12, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva422p16be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 16, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 16, 1, 0}}, 8},
+                      {{{CT_A, 2, 0, 0, 2, 16, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva422p16le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 16, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 16, 1, 0}}, 8},
+                      {{{CT_A, 2, 0, 0, 2, 16, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva422p9be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 9, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 9, 1, 0}}, 8},
+                      {{{CT_A, 2, 0, 0, 2, 9, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva422p9le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 9, 1, 0}}, 8},
+                      {{{CT_V, 2, 0, 0, 2, 9, 1, 0}}, 8},
+                      {{{CT_A, 2, 0, 0, 2, 9, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva444p,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_U, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_V, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_A, 1, 0, 0, 1, 8, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuva444p10be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_A, 2, 0, 0, 2, 10, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva444p10le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 10, 0, 0}}, 16},
+                      {{{CT_A, 2, 0, 0, 2, 10, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva444p12be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_A, 2, 0, 0, 2, 12, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva444p12le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 12, 0, 0}}, 16},
+                      {{{CT_A, 2, 0, 0, 2, 12, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva444p16be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_A, 2, 0, 0, 2, 16, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva444p16le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 16, 0, 0}}, 16},
+                      {{{CT_A, 2, 0, 0, 2, 16, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva444p9be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_A, 2, 0, 0, 2, 9, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuva444p9le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_U, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_V, 2, 0, 0, 2, 9, 0, 0}}, 16},
+                      {{{CT_A, 2, 0, 0, 2, 9, 0, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuyv211,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 2, 0, 0, 1, 8, 1, 0},
+                        {CT_U, 4, 1, 0, 1, 8, 2, 0},
+                        {CT_V, 4, 3, 0, 1, 8, 2, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yuyv422,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 2, 0, 0, 1, 8, 0, 0},
+                        {CT_U, 4, 1, 0, 1, 8, 1, 0},
+                        {CT_V, 4, 3, 0, 1, 8, 1, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_yuyv422_32be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 4, 0, 0, 2, 16, 0, 0},
+                        {CT_U, 8, 2, 0, 2, 16, 1, 0},
+                        {CT_V, 8, 6, 0, 2, 16, 1, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_yuyv422_32le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 4, 0, 0, 2, 16, 0, 0},
+                        {CT_U, 8, 2, 0, 2, 16, 1, 0},
+                        {CT_V, 8, 6, 0, 2, 16, 1, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_yuyv422_32_10be,
+                 {VFT_YUV,
+                  Q_BIG_ENDIAN, {
+                      {{{CT_Y, 4, 0, 0, 2, 10, 0, 0},
+                        {CT_U, 8, 2, 0, 2, 10, 1, 0},
+                        {CT_V, 8, 6, 0, 2, 10, 1, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_yuyv422_32_10le,
+                 {VFT_YUV,
+                  Q_LITTLE_ENDIAN, {
+                      {{{CT_Y, 4, 0, 0, 2, 10, 0, 0},
+                        {CT_U, 8, 2, 0, 2, 10, 1, 0},
+                        {CT_V, 8, 6, 0, 2, 10, 1, 0}}, 32}
+                  }}},
+                {AkVideoCaps::Format_yvu410p,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_V, 1, 0, 0, 1, 8, 2, 2}}, 2},
+                      {{{CT_U, 1, 0, 0, 1, 8, 2, 2}}, 2}
+                  }}},
+                {AkVideoCaps::Format_yvu420p,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_V, 1, 0, 0, 1, 8, 1, 1}}, 4},
+                      {{{CT_U, 1, 0, 0, 1, 8, 1, 1}}, 4}
+                  }}},
+                {AkVideoCaps::Format_yvu422p,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_V, 1, 0, 0, 1, 8, 1, 0}}, 4},
+                      {{{CT_U, 1, 0, 0, 1, 8, 1, 0}}, 4}
+                  }}},
+                {AkVideoCaps::Format_yvu444p,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_V, 1, 0, 0, 1, 8, 0, 0}}, 8},
+                      {{{CT_U, 1, 0, 0, 1, 8, 0, 0}}, 8}
+                  }}},
+                {AkVideoCaps::Format_yvyu422,
+                 {VFT_YUV,
+                  Q_BYTE_ORDER, {
+                      {{{CT_Y, 2, 0, 0, 1, 8, 0, 0},
+                        {CT_V, 4, 1, 0, 1, 8, 1, 0},
+                        {CT_U, 4, 3, 0, 1, 8, 1, 0}}, 16}
+                  }}},
+                {AkVideoCaps::Format_none,
+                 {VFT_Unknown,
+                  Q_BYTE_ORDER, {
+                  }}},
+            };
+
+            return videoFormats;
+        }
+
+        static inline const VideoFormat *byFormat(AkVideoCaps::PixelFormat format)
+        {
+            auto fmt = formats();
+
+            for (; fmt->format != AkVideoCaps::Format_none; fmt++)
+                if (fmt->format == format)
+                    return fmt;
+
+            return fmt;
+        }
+};
+
+class AkVideoCapsPrivate
+{
+    public:
+        AkVideoCaps::PixelFormat m_format {AkVideoCaps::Format_none};
+        int m_width {0};
+        int m_height {0};
+        AkFrac m_fps;
+};
+
+AkVideoCaps::AkVideoCaps(QObject *parent):
+    QObject(parent)
+{
+    this->d = new AkVideoCapsPrivate();
+}
+
+AkVideoCaps::AkVideoCaps(AkVideoCaps::PixelFormat format,
+                         int width,
+                         int height,
+                         const AkFrac &fps):
+    QObject()
+{
+    this->d = new AkVideoCapsPrivate();
+    this->d->m_format = format;
+    this->d->m_width = width;
+    this->d->m_height = height;
+    this->d->m_fps = fps;
+}
+
+AkVideoCaps::AkVideoCaps(PixelFormat format,
+                         const QSize &size,
+                         const AkFrac &fps):
+    QObject()
+{
+    this->d = new AkVideoCapsPrivate();
+    this->d->m_format = format;
+    this->d->m_width = size.width();
+    this->d->m_height = size.height();
+    this->d->m_fps = fps;
+}
+
+AkVideoCaps::AkVideoCaps(const AkCaps &other):
+    QObject()
+{
+    this->d = new AkVideoCapsPrivate();
+
+    if (other.type() == AkCaps::CapsVideo) {
+        auto data = reinterpret_cast<AkVideoCaps *>(other.privateData());
+        this->d->m_format = data->d->m_format;
+        this->d->m_width = data->d->m_width;
+        this->d->m_height = data->d->m_height;
+        this->d->m_fps = data->d->m_fps;
+    }
+}
+
+AkVideoCaps::AkVideoCaps(const AkVideoCaps &other):
+    QObject()
+{
+    this->d = new AkVideoCapsPrivate();
+    this->d->m_format = other.d->m_format;
+    this->d->m_width = other.d->m_width;
+    this->d->m_height = other.d->m_height;
+    this->d->m_fps = other.d->m_fps;
+}
+
+AkVideoCaps::~AkVideoCaps()
+{
+    delete this->d;
+}
+
+AkVideoCaps &AkVideoCaps::operator =(const AkCaps &other)
+{
+    if (other.type() == AkCaps::CapsVideo) {
+        auto data = reinterpret_cast<AkVideoCaps *>(other.privateData());
+        this->d->m_format = data->d->m_format;
+        this->d->m_width = data->d->m_width;
+        this->d->m_height = data->d->m_height;
+        this->d->m_fps = data->d->m_fps;
+    } else {
+        this->d->m_format = Format_none;
+        this->d->m_width = 0;
+        this->d->m_height = 0;
+        this->d->m_fps = {};
+    }
+
+    return *this;
+}
+
+AkVideoCaps &AkVideoCaps::operator =(const AkVideoCaps &other)
+{
+    if (this != &other) {
+        this->d->m_format = other.d->m_format;
+        this->d->m_width = other.d->m_width;
+        this->d->m_height = other.d->m_height;
+        this->d->m_fps = other.d->m_fps;
+    }
+
+    return *this;
+}
+
+bool AkVideoCaps::operator ==(const AkVideoCaps &other) const
+{
+    return this->d->m_format == other.d->m_format
+            && this->d->m_width == other.d->m_width
+            && this->d->m_height == other.d->m_height
+            && this->d->m_fps == other.d->m_fps;
+}
+
+bool AkVideoCaps::operator !=(const AkVideoCaps &other) const
+{
+    return !(*this == other);
+}
+
+AkVideoCaps::operator bool() const
+{
+    return this->d->m_format != AkVideoCaps::Format_none
+           && this->d->m_width > 0
+           && this->d->m_height > 0;
+}
+
+AkVideoCaps::operator AkCaps() const
+{
+    AkCaps caps;
+    caps.setType(AkCaps::CapsVideo);
+    caps.setPrivateData(new AkVideoCaps(*this),
+                        [] (void *data) -> void * {
+                            return new AkVideoCaps(*reinterpret_cast<AkVideoCaps *>(data));
+                        },
+                        [] (void *data) {
+                            delete reinterpret_cast<AkVideoCaps *>(data);
+                        });
+
+    return caps;
+}
+
+QObject *AkVideoCaps::create()
+{
+    return new AkVideoCaps();
+}
+
+QObject *AkVideoCaps::create(const AkCaps &caps)
+{
+    return new AkVideoCaps(caps);
+}
+
+QObject *AkVideoCaps::create(const AkVideoCaps &caps)
+{
+    return new AkVideoCaps(caps);
+}
+
+QObject *AkVideoCaps::create(PixelFormat format,
+                             int width,
+                             int height,
+                             const AkFrac &fps)
+{
+    return new AkVideoCaps(format, width, height, fps);
+}
+
+QObject *AkVideoCaps::create(PixelFormat format,
+                             const QSize &size,
+                             const AkFrac &fps)
+{
+    return new AkVideoCaps(format, size, fps);
+}
+
+QVariant AkVideoCaps::toVariant() const
+{
+    return QVariant::fromValue(*this);
+}
+
+AkVideoCaps::PixelFormat AkVideoCaps::format() const
+{
+    return this->d->m_format;
+}
+
+int AkVideoCaps::bpp() const
+{
+    return VideoFormat::byFormat(this->d->m_format)->spec.bpp();
+}
+
+QSize AkVideoCaps::size() const
+{
+    return {this->d->m_width, this->d->m_height};
+}
+
+int AkVideoCaps::width() const
+{
+    return this->d->m_width;
+}
+
+int AkVideoCaps::height() const
+{
+    return this->d->m_height;
+}
+
+AkFrac AkVideoCaps::fps() const
+{
+    return this->d->m_fps;
+}
+
+AkFrac &AkVideoCaps::fps()
+{
+    return this->d->m_fps;
+}
+
+AkVideoCaps AkVideoCaps::nearest(const AkVideoCapsList &caps) const
+{
+    AkVideoCaps nearestCap;
+    auto q = std::numeric_limits<uint64_t>::max();
+    auto svf = VideoFormat::byFormat(this->d->m_format);
+
+    for (auto &cap: caps) {
+        auto vf = VideoFormat::byFormat(cap.d->m_format);
+        uint64_t diffFourcc = cap.d->m_format == this->d->m_format? 0: 1;
+        auto diffWidth = cap.d->m_width - this->d->m_width;
+        auto diffHeight = cap.d->m_height - this->d->m_height;
+        auto diffBpp = vf->spec.bpp() - svf->spec.bpp();
+        auto diffPlanes = vf->spec.planes() - svf->spec.planes();
+        int diffPlanesBits = 0;
+
+        if (vf->spec.planes() != svf->spec.planes()) {
+            for (size_t j = 0; j < vf->spec.planes(); ++j) {
+                auto &plane = vf->spec.plane(j);
+
+                for (size_t i = 0; i < plane.components(); ++i)
+                    diffPlanesBits += plane.component(i).length();
+            }
+
+            for (size_t j = 0; j < svf->spec.planes(); ++j) {
+                auto &plane = svf->spec.plane(j);
+
+                for (size_t i = 0; i < plane.components(); ++i)
+                    diffPlanesBits -= plane.component(i).length();
+            }
+        }
+
+        uint64_t k = diffFourcc
+                   + uint64_t(diffWidth * diffWidth)
+                   + uint64_t(diffHeight * diffHeight)
+                   + diffBpp * diffBpp
+                   + diffPlanes * diffPlanes
+                   + diffPlanesBits * diffPlanesBits;
+
+        if (k < q) {
+            nearestCap = cap;
+            q = k;
+        }
+    }
+
+    return nearestCap;
+}
+
+bool AkVideoCaps::isSameFormat(const AkVideoCaps &other) const
+{
+    return this->d->m_format == other.d->m_format
+            && this->d->m_width == other.d->m_width
+            && this->d->m_height == other.d->m_height;
+}
+
+int AkVideoCaps::bitsPerPixel(AkVideoCaps::PixelFormat pixelFormat)
+{
+    return VideoFormat::byFormat(pixelFormat)->spec.bpp();
+}
+
+QString AkVideoCaps::pixelFormatToString(PixelFormat pixelFormat)
+{
+    AkVideoCaps caps;
+    int formatIndex = caps.metaObject()->indexOfEnumerator("PixelFormat");
+    QMetaEnum formatEnum = caps.metaObject()->enumerator(formatIndex);
+    QString format(formatEnum.valueToKey(pixelFormat));
+    format.remove("Format_");
+
+    return format;
+}
+
+AkVideoFormatSpec AkVideoCaps::formatSpecs(PixelFormat pixelFormat)
+{
+    auto vf = VideoFormat::byFormat(pixelFormat);
+
+    if (!vf)
+        return {};
+
+    return vf->spec;
+}
+
+void AkVideoCaps::setFormat(PixelFormat format)
+{
+    if (this->d->m_format == format)
+        return;
+
+    this->d->m_format = format;
+    emit this->formatChanged(format);
+}
+
+void AkVideoCaps::setSize(const QSize &size)
+{
+    QSize curSize(this->d->m_width, this->d->m_height);
+
+    if (curSize == size)
+        return;
+
+    this->d->m_width = size.width();
+    this->d->m_height = size.height();
+    emit this->widthChanged(size.width());
+    emit this->heightChanged(size.height());
+    emit sizeChanged(size);
+}
+
+void AkVideoCaps::setWidth(int width)
+{
+    if (this->d->m_width == width)
+        return;
+
+    this->d->m_width = width;
+    emit this->widthChanged(width);
+}
+
+void AkVideoCaps::setHeight(int height)
+{
+    if (this->d->m_height == height)
+        return;
+
+    this->d->m_height = height;
+    emit this->heightChanged(height);
+}
+
+void AkVideoCaps::setFps(const AkFrac &fps)
+{
+    if (this->d->m_fps == fps)
+        return;
+
+    this->d->m_fps = fps;
+    emit this->fpsChanged(fps);
+}
+
+void AkVideoCaps::resetFormat()
+{
+    this->setFormat(AkVideoCaps::Format_none);
+}
+
+void AkVideoCaps::resetSize()
+{
+    this->setSize(QSize());
+}
+
+void AkVideoCaps::resetWidth()
+{
+    this->setWidth(0);
+}
+
+void AkVideoCaps::resetHeight()
+{
+    this->setHeight(0);
+}
+
+void AkVideoCaps::resetFps()
+{
+    this->setFps(AkFrac());
+}
+
+void AkVideoCaps::registerTypes()
+{
+    qRegisterMetaType<AkVideoCaps>("AkVideoCaps");
+    qRegisterMetaType<AkVideoCapsList>("AkVideoCapsList");
+    qRegisterMetaTypeStreamOperators<AkVideoCaps>("AkVideoCaps");
+    qRegisterMetaType<PixelFormat>("PixelFormat");
+    qRegisterMetaType<PixelFormatList>("PixelFormatList");
+    QMetaType::registerDebugStreamOperator<AkVideoCaps::PixelFormat>();
+    qmlRegisterSingletonType<AkVideoCaps>("Ak", 1, 0, "AkVideoCaps",
+                                          [] (QQmlEngine *qmlEngine,
+                                              QJSEngine *jsEngine) -> QObject * {
+        Q_UNUSED(qmlEngine)
+        Q_UNUSED(jsEngine)
+
+        return new AkVideoCaps();
+    });
+}
+
+QDebug operator <<(QDebug debug, const AkVideoCaps &caps)
+{
+    debug.nospace() << "AkVideoCaps("
+                    << "format="
+                    << caps.format()
+                    << ",width="
+                    << caps.width()
+                    << ",height="
+                    << caps.height()
+                    << ",fps="
+                    << caps.fps()
+                    << ")";
+
+    return debug.space();
+}
+
+QDebug operator <<(QDebug debug, AkVideoCaps::PixelFormat format)
+{
+    debug.nospace() << AkVideoCaps::pixelFormatToString(format).toStdString().c_str();
+
+    return debug.space();
+}
+
+QDataStream &operator >>(QDataStream &istream, AkVideoCaps &caps)
+{
+    AkVideoCaps::PixelFormat format = AkVideoCaps::Format_none;
+    istream >> format;
+    caps.setFormat(format);
+    int width = 0;
+    istream >> width;
+    caps.setWidth(width);
+    int height = 0;
+    istream >> height;
+    caps.setHeight(height);
+    AkFrac fps;
+    istream >> fps;
+    caps.setFps(fps);
+
+    return istream;
+}
+
+QDataStream &operator <<(QDataStream &ostream, const AkVideoCaps &caps)
+{
+    ostream << caps.format();
+    ostream << caps.width();
+    ostream << caps.height();
+    ostream << caps.fps();
+
+    return ostream;
+}
+
+#include "moc_akvideocaps.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akvideocaps.h
+++ webcamoid-9.0.0/libAvKys/Lib/src/akvideocaps.h
@@ -24,60 +24,31 @@
 
 #include "akcommons.h"
 
-#define AkFourCC(a, b, c, d) \
+#define AK_MAKE_FOURCC(a, b, c, d) \
     (((quint32(a) & 0xff) << 24) \
    | ((quint32(b) & 0xff) << 16) \
    | ((quint32(c) & 0xff) <<  8) \
    |  (quint32(d) & 0xff))
 
-inline quint32 AkFourCCS(const QString &fourcc)
-{
-    if (fourcc.size() != 4)
-        return 0;
-
-    return AkFourCC(fourcc[0].toLatin1(),
-                    fourcc[1].toLatin1(),
-                    fourcc[2].toLatin1(),
-                    fourcc[3].toLatin1());
-}
-
-#define AkFourCCR(a, b, c, d) \
-    (((quint32(d) & 0xff) << 24) \
-   | ((quint32(c) & 0xff) << 16) \
-   | ((quint32(b) & 0xff) <<  8) \
-   |  (quint32(a) & 0xff))
-
-inline quint32 AkFourCCRS(const QString &fourcc)
-{
-    if (fourcc.size() != 4)
-        return 0;
-
-    return AkFourCCR(fourcc[0].toLatin1(),
-                     fourcc[1].toLatin1(),
-                     fourcc[2].toLatin1(),
-                     fourcc[3].toLatin1());
-}
-
-#define AK_FOURCC_NULL AkFourCC(0, 0, 0, 0)
-
 class AkVideoCaps;
 class AkVideoCapsPrivate;
 class AkCaps;
 class AkFrac;
+class AkVideoFormatSpec;
 
 using AkVideoCapsList = QList<AkVideoCaps>;
 
 class AKCOMMONS_EXPORT AkVideoCaps: public QObject
 {
     Q_OBJECT
-    Q_ENUMS(PixelFormat)
     Q_PROPERTY(PixelFormat format
                READ format
                WRITE setFormat
                RESET resetFormat
                NOTIFY formatChanged)
     Q_PROPERTY(int bpp
-               READ bpp)
+               READ bpp
+               CONSTANT)
     Q_PROPERTY(QSize size
                READ size
                WRITE setSize
@@ -98,231 +69,469 @@ class AKCOMMONS_EXPORT AkVideoCaps: publ
                WRITE setFps
                RESET resetFps
                NOTIFY fpsChanged)
-    Q_PROPERTY(int align
-               READ align
-               WRITE setAlign
-               RESET resetAlign
-               NOTIFY alignChanged)
-    Q_PROPERTY(size_t pictureSize
-               READ pictureSize)
-    Q_PROPERTY(int planes
-               READ planes)
 
     public:
         enum PixelFormat
         {
-            Format_none = -1,
-            Format_yuv420p,
-            Format_yvu420p,
-            Format_yuyv422,
-            Format_rgb24,
-            Format_bgr24,
-            Format_yuv422p,
-            Format_yuv444p,
-            Format_yuv410p,
-            Format_yuv411p,
-            Format_gray,
-            Format_monow,
-            Format_monob,
-            Format_pal8,
-            Format_yuvj420p,
-            Format_yuvj422p,
-            Format_yuvj444p,
-            Format_uyvy422,
-            Format_vyuy422,
-            Format_uyyvyy411,
-            Format_bgr8,
-            Format_bgr4,
-            Format_bgr4_byte,
-            Format_rgb8,
-            Format_rgb4,
-            Format_rgb4_byte,
-            Format_nv12,
-            Format_nv21,
-            Format_argb,
-            Format_rgba,
-            Format_abgr,
-            Format_bgra,
-            Format_gray16be,
-            Format_gray16le,
-            Format_yuv440p,
-            Format_yuvj440p,
-            Format_yuva420p,
-            Format_rgb48be,
-            Format_rgb48le,
-            Format_rgb565be,
-            Format_rgb565le,
-            Format_rgb555be,
-            Format_rgb555le,
-            Format_argb555be,
-            Format_argb555le,
-            Format_bgr565be,
-            Format_bgr565le,
-            Format_bgr555be,
-            Format_bgr555le,
-            Format_rgb666,
-            Format_argb1665,
-            Format_argb1666,
-            Format_bgr666,
-            Format_argb6666,
-            Format_abgr6666,
-            Format_yuv420p16le,
-            Format_yuv420p16be,
-            Format_yuv422p16le,
-            Format_yuv422p16be,
-            Format_yuv444p16le,
-            Format_yuv444p16be,
-            Format_rgb444le,
-            Format_rgb444be,
-            Format_argb444be,
-            Format_argb444le,
-            Format_bgr444le,
-            Format_bgr444be,
-            Format_ya8,
-            Format_bgr48be,
-            Format_bgr48le,
-            Format_yuv420p9be,
-            Format_yuv420p9le,
-            Format_yuv420p10be,
-            Format_yuv420p10le,
-            Format_yuv422p10be,
-            Format_yuv422p10le,
-            Format_yuv444p9be,
-            Format_yuv444p9le,
-            Format_yuv444p10be,
-            Format_yuv444p10le,
-            Format_yuv422p9be,
-            Format_yuv422p9le,
-            Format_gbrp,
-            Format_gbrp9be,
-            Format_gbrp9le,
-            Format_gbrp10be,
-            Format_gbrp10le,
-            Format_gbrp16be,
-            Format_gbrp16le,
-            Format_yuva422p,
-            Format_yuva444p,
-            Format_yuva420p9be,
-            Format_yuva420p9le,
-            Format_yuva422p9be,
-            Format_yuva422p9le,
-            Format_yuva444p9be,
-            Format_yuva444p9le,
-            Format_yuva420p10be,
-            Format_yuva420p10le,
-            Format_yuva422p10be,
-            Format_yuva422p10le,
-            Format_yuva444p10be,
-            Format_yuva444p10le,
-            Format_yuva420p16be,
-            Format_yuva420p16le,
-            Format_yuva422p16be,
-            Format_yuva422p16le,
-            Format_yuva444p16be,
-            Format_yuva444p16le,
-            Format_xyz12le,
-            Format_xyz12be,
-            Format_nv16,
-            Format_nv20le,
-            Format_nv20be,
-            Format_rgba64be,
-            Format_rgba64le,
-            Format_bgra64be,
-            Format_bgra64le,
-            Format_yvyu422,
-            Format_ya16be,
-            Format_ya16le,
-            Format_gbrap,
-            Format_gbrap16be,
-            Format_gbrap16le,
-            Format_0rgb,
-            Format_rgb0,
-            Format_0bgr,
-            Format_bgr0,
-            Format_yuv420p12be,
-            Format_yuv420p12le,
-            Format_yuv420p14be,
-            Format_yuv420p14le,
-            Format_yuv422p12be,
-            Format_yuv422p12le,
-            Format_yuv422p14be,
-            Format_yuv422p14le,
-            Format_yuv444p12be,
-            Format_yuv444p12le,
-            Format_yuv444p14be,
-            Format_yuv444p14le,
-            Format_gbrp12be,
-            Format_gbrp12le,
-            Format_gbrp14be,
-            Format_gbrp14le,
-            Format_yuvj411p,
-            Format_bayer_bggr8,
-            Format_bayer_rggb8,
-            Format_bayer_gbrg8,
-            Format_bayer_grbg8,
-            Format_bayer_bggr16le,
-            Format_bayer_bggr16be,
-            Format_bayer_rggb16le,
-            Format_bayer_rggb16be,
-            Format_bayer_gbrg16le,
-            Format_bayer_gbrg16be,
-            Format_bayer_grbg16le,
-            Format_bayer_grbg16be,
-            Format_yuv440p10le,
-            Format_yuv440p10be,
-            Format_yuv440p12le,
-            Format_yuv440p12be,
-            Format_ayuv64le,
-            Format_ayuv64be,
-            Format_p010le,
-            Format_p010be,
-            Format_gbrap12be,
-            Format_gbrap12le,
-            Format_gbrap10be,
-            Format_gbrap10le,
-            Format_gray12be,
-            Format_gray12le,
-            Format_gray10be,
-            Format_gray10le,
-            Format_p016le,
-            Format_p016be,
-            Format_gray9be,
-            Format_gray9le,
-            Format_gbrpf32be,
-            Format_gbrpf32le,
-            Format_gbrapf32be,
-            Format_gbrapf32le,
-            Format_gray14be,
-            Format_gray14le,
-            Format_grayf32be,
-            Format_grayf32le,
-            Format_rgbp,
-            Format_rgbap,
-            Format_argb1887,
-            Format_bgra1888,
-            Format_yuv444,
-            Format_gray2,
-            Format_gray4,
-            Format_gray24,
-            Format_gray32,
+            Format_none            = AK_MAKE_FOURCC(0, 0, 0, 0),
+            Format_0bgr            = AK_MAKE_FOURCC(0, 'B', 'G', 'R'),
+            Format_0bgr444be       = AK_MAKE_FOURCC(44, 'G', 'B', 0),
+            Format_0bgr444le       = AK_MAKE_FOURCC(0, 'B', 'G', 44),
+            Format_0bgrpackbe      = AK_MAKE_FOURCC('Q', 'G', 'B', 0),
+            Format_0bgrpackle      = AK_MAKE_FOURCC(0, 'B', 'G', 'Q'),
+            Format_0rgb            = AK_MAKE_FOURCC(0, 'R', 'G', 'B'),
+            Format_0rgbpackbe      = AK_MAKE_FOURCC('Q', 'G', 'R', 0),
+            Format_0rgbpackle      = AK_MAKE_FOURCC(0, 'R', 'G', 'Q'),
+            Format_0yuv            = AK_MAKE_FOURCC(0, 'Y', 'U', 'V'),
+            Format_abgr            = AK_MAKE_FOURCC('A', 'B', 'G', 'R'),
+            Format_abgr1555be      = AK_MAKE_FOURCC(55, 51, 'B', 'A'),
+            Format_abgr1555le      = AK_MAKE_FOURCC('A', 'B', 15, 55),
+            Format_abgr4444be      = AK_MAKE_FOURCC(44, 44, 'B', 'A'),
+            Format_abgr4444le      = AK_MAKE_FOURCC('A', 'B', 44, 44),
+            Format_abgrpackbe      = AK_MAKE_FOURCC('Q', 'G', 'B', 'A'),
+            Format_abgrpackle      = AK_MAKE_FOURCC('A', 'B', 'G', 'Q'),
+            Format_argb            = AK_MAKE_FOURCC('A', 'R', 'G', 'B'),
+            Format_argb1555be      = AK_MAKE_FOURCC(55, 51, 'R', 'A'),
+            Format_argb1555le      = AK_MAKE_FOURCC('A', 'R', 15, 55),
+            Format_argb2101010be   = AK_MAKE_FOURCC(10, 10, 12, 'A'),
+            Format_argb2101010le   = AK_MAKE_FOURCC('A', 210, 10, 10),
+            Format_argb4444be      = AK_MAKE_FOURCC(44, 44, 'R', 'A'),
+            Format_argb4444le      = AK_MAKE_FOURCC('A', 'R', 44, 44),
+            Format_argb64be        = AK_MAKE_FOURCC(64, 'G', 'R', 'A'),
+            Format_argb64le        = AK_MAKE_FOURCC('A', 'R', 'G', 64),
+            Format_argbpackbe      = AK_MAKE_FOURCC('Q', 'G', 'R', 'A'),
+            Format_argbpackle      = AK_MAKE_FOURCC('A', 'R', 'G', 'Q'),
+            Format_ayuv            = AK_MAKE_FOURCC('A', 'Y', 'U', 'V'),
+            Format_ayuv64be        = AK_MAKE_FOURCC(64, 'U', 'Y', 'A'),
+            Format_ayuv64le        = AK_MAKE_FOURCC('A', 'Y', 'U', 64),
+            Format_ayuvpackbe      = AK_MAKE_FOURCC('Q', 'U', 'Y', 'A'),
+            Format_ayuvpackle      = AK_MAKE_FOURCC('A', 'Y', 'U', 'Q'),
+            Format_bgr0            = AK_MAKE_FOURCC('B', 'G', 'R', 0),
+            Format_bgr0444be       = AK_MAKE_FOURCC(44, 4, 0, 'B'),
+            Format_bgr0444le       = AK_MAKE_FOURCC('B', 0, 4, 44),
+            Format_bgr0555be       = AK_MAKE_FOURCC(55, 5, 0, 'B'),
+            Format_bgr0555le       = AK_MAKE_FOURCC('B', 0, 5, 55),
+            Format_bgr233          = AK_MAKE_FOURCC('B', 'G', 2, 33),
+            Format_bgr24           = AK_MAKE_FOURCC('B', 'G', 'R', 24),
+            Format_bgr30be         = AK_MAKE_FOURCC(30, 'R', 'G', 'B'),
+            Format_bgr30le         = AK_MAKE_FOURCC('B', 'G', 'R', 30),
+            Format_bgr332          = AK_MAKE_FOURCC('B', 'G', 3, 32),
+            Format_bgr444be        = AK_MAKE_FOURCC(44, 4, 'G', 'B'),
+            Format_bgr444le        = AK_MAKE_FOURCC('B', 'G', 4, 44),
+            Format_bgr48be         = AK_MAKE_FOURCC(48, 'R', 'G', 'B'),
+            Format_bgr48le         = AK_MAKE_FOURCC('B', 'G', 'R', 48),
+            Format_bgr555be        = AK_MAKE_FOURCC(55, 5, 'G', 'B'),
+            Format_bgr555le        = AK_MAKE_FOURCC('B', 'G', 5, 55),
+            Format_bgr565be        = AK_MAKE_FOURCC(56, 5, 'G', 'B'),
+            Format_bgr565le        = AK_MAKE_FOURCC('B', 'G', 5, 65),
+            Format_bgra            = AK_MAKE_FOURCC('B', 'G', 'R', 'A'),
+            Format_bgra4444be      = AK_MAKE_FOURCC(44, 44, 'A', 'B'),
+            Format_bgra4444le      = AK_MAKE_FOURCC('B', 'A', 44, 44),
+            Format_bgra5551be      = AK_MAKE_FOURCC(15, 55, 'A', 'B'),
+            Format_bgra5551le      = AK_MAKE_FOURCC('B', 'A', 55, 51),
+            Format_bgra64be        = AK_MAKE_FOURCC(64, 'A', 'G', 'B'),
+            Format_bgra64le        = AK_MAKE_FOURCC('B', 'G', 'A', 64),
+            Format_gbr24p          = AK_MAKE_FOURCC('G', 'B', 24, 'P'),
+            Format_gbrap           = AK_MAKE_FOURCC('G', 'B', 'A', 'P'),
+            Format_gbrap10be       = AK_MAKE_FOURCC('P', 10, 'A', 'G'),
+            Format_gbrap10le       = AK_MAKE_FOURCC('G', 'A', 10, 'P'),
+            Format_gbrap12be       = AK_MAKE_FOURCC('P', 12, 'A', 'G'),
+            Format_gbrap12le       = AK_MAKE_FOURCC('G', 'A', 12, 'P'),
+            Format_gbrap16be       = AK_MAKE_FOURCC('P', 16, 'A', 'G'),
+            Format_gbrap16le       = AK_MAKE_FOURCC('G', 'A', 16, 'P'),
+            Format_gbrp            = AK_MAKE_FOURCC('G', 'B', 'R', 'P'),
+            Format_gbrp10be        = AK_MAKE_FOURCC('P', 10, 'B', 'G'),
+            Format_gbrp10le        = AK_MAKE_FOURCC('G', 'B', 10, 'P'),
+            Format_gbrp12be        = AK_MAKE_FOURCC('P', 12, 'B', 'G'),
+            Format_gbrp12le        = AK_MAKE_FOURCC('G', 'B', 12, 'P'),
+            Format_gbrp14be        = AK_MAKE_FOURCC('P', 14, 'B', 'G'),
+            Format_gbrp14le        = AK_MAKE_FOURCC('G', 'B', 14, 'P'),
+            Format_gbrp16be        = AK_MAKE_FOURCC('P', 16, 'B', 'G'),
+            Format_gbrp16le        = AK_MAKE_FOURCC('G', 'B', 16, 'P'),
+            Format_gbrp9be         = AK_MAKE_FOURCC('P', 9, 'B', 'G'),
+            Format_gbrp9le         = AK_MAKE_FOURCC('G', 'B', 9, 'P'),
+            Format_gray10be        = AK_MAKE_FOURCC(0, 0, 10, 'Y'),
+            Format_gray10le        = AK_MAKE_FOURCC('Y', 10, 0, 0),
+            Format_gray12be        = AK_MAKE_FOURCC(0, 0, 12, 'Y'),
+            Format_gray12le        = AK_MAKE_FOURCC('Y', 12, 0, 0),
+            Format_gray14be        = AK_MAKE_FOURCC(0, 0, 14, 'Y'),
+            Format_gray14le        = AK_MAKE_FOURCC('Y', 14, 0, 0),
+            Format_gray16be        = AK_MAKE_FOURCC(0, 0, 16, 'Y'),
+            Format_gray16le        = AK_MAKE_FOURCC('Y', 16, 0, 0),
+            Format_gray32be        = AK_MAKE_FOURCC(0, 0, 32, 'Y'),
+            Format_gray32le        = AK_MAKE_FOURCC('Y', 32, 0, 0),
+            Format_gray4           = AK_MAKE_FOURCC('Y', 4, 0, 0),
+            Format_gray6           = AK_MAKE_FOURCC('Y', 6, 0, 0),
+            Format_gray8           = AK_MAKE_FOURCC('Y', 8, 0, 0),
+            Format_gray9be         = AK_MAKE_FOURCC(0, 0, 9, 'Y'),
+            Format_gray9le         = AK_MAKE_FOURCC('Y', 9, 0, 0),
+            Format_graya16be       = AK_MAKE_FOURCC(0, 16, 'A', 'Y'),
+            Format_graya16le       = AK_MAKE_FOURCC('Y', 'A', 16, 0),
+            Format_graya8          = AK_MAKE_FOURCC('Y', 'A', 8, 0),
+            Format_graya8packbe    = AK_MAKE_FOURCC('Q', 8, 'A', 'Y'),
+            Format_graya8packle    = AK_MAKE_FOURCC('Y', 'A', 8, 'Q'),
+            Format_nv12            = AK_MAKE_FOURCC('N', 'V', 12, 0),
+            Format_nv12a           = AK_MAKE_FOURCC('N', 'V', 12, 'A'),
+            Format_nv16            = AK_MAKE_FOURCC('N', 'V', 16, 0),
+            Format_nv20be          = AK_MAKE_FOURCC(0, 20, 'V', 'N'),
+            Format_nv20le          = AK_MAKE_FOURCC('N', 'V', 20, 0),
+            Format_nv21            = AK_MAKE_FOURCC('N', 'V', 21, 0),
+            Format_nv24            = AK_MAKE_FOURCC('N', 'V', 24, 0),
+            Format_nv42            = AK_MAKE_FOURCC('N', 'V', 42, 0),
+            Format_nv61            = AK_MAKE_FOURCC('N', 'V', 61, 0),
+            Format_p010be          = AK_MAKE_FOURCC(0, 1, 0, 'p'),
+            Format_p010le          = AK_MAKE_FOURCC('p', 0, 1, 0),
+            Format_p016be          = AK_MAKE_FOURCC(6, 1, 0, 'p'),
+            Format_p016le          = AK_MAKE_FOURCC('p', 0, 1, 6),
+            Format_p210be          = AK_MAKE_FOURCC(0, 1, 2, 'p'),
+            Format_p210le          = AK_MAKE_FOURCC('p', 2, 1, 0),
+            Format_p216be          = AK_MAKE_FOURCC(6, 1, 2, 'p'),
+            Format_p216le          = AK_MAKE_FOURCC('p', 2, 1, 6),
+            Format_p410be          = AK_MAKE_FOURCC(0, 1, 4, 'p'),
+            Format_p410le          = AK_MAKE_FOURCC('p', 4, 1, 0),
+            Format_p416be          = AK_MAKE_FOURCC(6, 1, 4, 'p'),
+            Format_p416le          = AK_MAKE_FOURCC('p', 4, 1, 6),
+            Format_rgb0            = AK_MAKE_FOURCC('R', 'G', 'B', 0),
+            Format_rgb0444be       = AK_MAKE_FOURCC(44, 4, 0, 'R'),
+            Format_rgb0444le       = AK_MAKE_FOURCC('R', 0, 4, 44),
+            Format_rgb0555be       = AK_MAKE_FOURCC(55, 5, 0, 'R'),
+            Format_rgb0555le       = AK_MAKE_FOURCC('R', 0, 5, 55),
+            Format_rgb0packbe      = AK_MAKE_FOURCC('Q', 0, 'G', 'R'),
+            Format_rgb0packle      = AK_MAKE_FOURCC('R', 'G', 0, 'Q'),
+            Format_rgb233          = AK_MAKE_FOURCC('R', 'G', 2, 33),
+            Format_rgb24           = AK_MAKE_FOURCC('R', 'G', 'B', 24),
+            Format_rgb24p          = AK_MAKE_FOURCC('R', 'G', 24, 'P'),
+            Format_rgb30be         = AK_MAKE_FOURCC(30, 'B', 'G', 'R'),
+            Format_rgb30le         = AK_MAKE_FOURCC('R', 'G', 'B', 30),
+            Format_rgb332          = AK_MAKE_FOURCC('R', 'G', 3, 32),
+            Format_rgb444be        = AK_MAKE_FOURCC(44, 4, 'G', 'R'),
+            Format_rgb444le        = AK_MAKE_FOURCC('R', 'G', 4, 44),
+            Format_rgb48be         = AK_MAKE_FOURCC(48, 'B', 'G', 'R'),
+            Format_rgb48le         = AK_MAKE_FOURCC('R', 'G', 'B', 48),
+            Format_rgb5550be       = AK_MAKE_FOURCC(5, 55, 'G', 'R'),
+            Format_rgb5550le       = AK_MAKE_FOURCC('R', 'G', 55, 50),
+            Format_rgb555be        = AK_MAKE_FOURCC(55, 5, 'G', 'R'),
+            Format_rgb555le        = AK_MAKE_FOURCC('R', 'G', 5, 55),
+            Format_rgb565be        = AK_MAKE_FOURCC(5, 65, 'G', 'R'),
+            Format_rgb565le        = AK_MAKE_FOURCC('R', 'G', 5, 65),
+            Format_rgba            = AK_MAKE_FOURCC('R', 'G', 'B', 'A'),
+            Format_rgba1010102be   = AK_MAKE_FOURCC('A', 10, 10, 12),
+            Format_rgba1010102le   = AK_MAKE_FOURCC(210, 10, 10, 'A'),
+            Format_rgba4444be      = AK_MAKE_FOURCC(44, 44, 'A', 'R'),
+            Format_rgba4444le      = AK_MAKE_FOURCC('R', 'A', 44, 44),
+            Format_rgba5551be      = AK_MAKE_FOURCC(55, 51, 'A', 'R'),
+            Format_rgba5551le      = AK_MAKE_FOURCC('R', 'A', 15, 55),
+            Format_rgba64be        = AK_MAKE_FOURCC(64, 'A', 'G', 'R'),
+            Format_rgba64le        = AK_MAKE_FOURCC('R', 'G', 'A', 64),
+            Format_rgbap           = AK_MAKE_FOURCC('R', 'G', 'A', 'P'),
+            Format_rgbapackbe      = AK_MAKE_FOURCC('Q', 'A', 'G', 'R'),
+            Format_rgbapackle      = AK_MAKE_FOURCC('R', 'G', 'A', 'Q'),
+            Format_uyva            = AK_MAKE_FOURCC('U', 'Y', 'V', 'A'),
+            Format_uyvy411         = AK_MAKE_FOURCC('U', 'Y', 4, 11),
+            Format_uyvy422         = AK_MAKE_FOURCC('U', 'Y', 'V', 'Y'),
+            Format_uyvy422a        = AK_MAKE_FOURCC('U', 'A', 4, 11),
+            Format_vuy0            = AK_MAKE_FOURCC('V', 'U', 'Y', 0),
+            Format_vuya            = AK_MAKE_FOURCC('V', 'U', 'Y', 'A'),
+            Format_vyuy422         = AK_MAKE_FOURCC('V', 'Y', 'U', 'Y'),
+            Format_y210be          = AK_MAKE_FOURCC(0, 1, 2, 'Y'),
+            Format_y210le          = AK_MAKE_FOURCC('Y', 2, 1, 0),
+            Format_yuv24           = AK_MAKE_FOURCC('Y', 'U', 'V', 24),
+            Format_yuv30be         = AK_MAKE_FOURCC(30, 'V', 'U', 'Y'),
+            Format_yuv30le         = AK_MAKE_FOURCC('Y', 'U', 'V', 30),
+            Format_yuv410p         = AK_MAKE_FOURCC('Y', 4, 1, 0),
+            Format_yuv411p         = AK_MAKE_FOURCC('Y', 4, 1, 1),
+            Format_yuv420p         = AK_MAKE_FOURCC('Y', 4, 2, 0),
+            Format_yuv420p10be     = AK_MAKE_FOURCC(10, 0, 2, 'Y'),
+            Format_yuv420p10le     = AK_MAKE_FOURCC('Y', 2, 0, 10),
+            Format_yuv420p12be     = AK_MAKE_FOURCC(12, 0, 2, 'Y'),
+            Format_yuv420p12le     = AK_MAKE_FOURCC('Y', 2, 0, 12),
+            Format_yuv420p14be     = AK_MAKE_FOURCC(14, 0, 2, 'Y'),
+            Format_yuv420p14le     = AK_MAKE_FOURCC('Y', 2, 0, 14),
+            Format_yuv420p16be     = AK_MAKE_FOURCC(16, 0, 2, 'Y'),
+            Format_yuv420p16le     = AK_MAKE_FOURCC('Y', 2, 0, 16),
+            Format_yuv420p9be      = AK_MAKE_FOURCC(9, 0, 2, 'Y'),
+            Format_yuv420p9le      = AK_MAKE_FOURCC('Y', 2, 0, 9),
+            Format_yuv422p         = AK_MAKE_FOURCC('Y', 4, 2, 2),
+            Format_yuv422p10be     = AK_MAKE_FOURCC(10, 2, 2, 'Y'),
+            Format_yuv422p10le     = AK_MAKE_FOURCC('Y', 2, 2, 10),
+            Format_yuv422p12be     = AK_MAKE_FOURCC(12, 2, 2, 'Y'),
+            Format_yuv422p12le     = AK_MAKE_FOURCC('Y', 2, 2, 12),
+            Format_yuv422p14be     = AK_MAKE_FOURCC(14, 2, 2, 'Y'),
+            Format_yuv422p14le     = AK_MAKE_FOURCC('Y', 2, 2, 14),
+            Format_yuv422p16be     = AK_MAKE_FOURCC(16, 2, 2, 'Y'),
+            Format_yuv422p16le     = AK_MAKE_FOURCC('Y', 2, 2, 16),
+            Format_yuv422p9be      = AK_MAKE_FOURCC(9, 2, 2, 'Y'),
+            Format_yuv422p9le      = AK_MAKE_FOURCC('Y', 2, 2, 9),
+            Format_yuv440p         = AK_MAKE_FOURCC('Y', 4, 4, 0),
+            Format_yuv440p10be     = AK_MAKE_FOURCC(10, 0, 4, 'Y'),
+            Format_yuv440p10le     = AK_MAKE_FOURCC('Y', 4, 0, 10),
+            Format_yuv440p12be     = AK_MAKE_FOURCC(12, 0, 4, 'Y'),
+            Format_yuv440p12le     = AK_MAKE_FOURCC('Y', 4, 0, 12),
+            Format_yuv444          = AK_MAKE_FOURCC('Y', 'U', 'V', 44),
+            Format_yuv444p         = AK_MAKE_FOURCC('Y', 4, 4, 4),
+            Format_yuv444p10be     = AK_MAKE_FOURCC(10, 4, 4, 'Y'),
+            Format_yuv444p10le     = AK_MAKE_FOURCC('Y', 4, 4, 10),
+            Format_yuv444p12be     = AK_MAKE_FOURCC(12, 4, 4, 'Y'),
+            Format_yuv444p12le     = AK_MAKE_FOURCC('Y', 4, 4, 12),
+            Format_yuv444p14be     = AK_MAKE_FOURCC(14, 4, 4, 'Y'),
+            Format_yuv444p14le     = AK_MAKE_FOURCC('Y', 4, 4, 14),
+            Format_yuv444p16be     = AK_MAKE_FOURCC(16, 4, 4, 'Y'),
+            Format_yuv444p16le     = AK_MAKE_FOURCC('Y', 4, 4, 16),
+            Format_yuv444p9be      = AK_MAKE_FOURCC(9, 4, 4, 'Y'),
+            Format_yuv444p9le      = AK_MAKE_FOURCC('Y', 4, 4, 9),
+            Format_yuv444packbe    = AK_MAKE_FOURCC(44, 4, 'U', 'Y'),
+            Format_yuv444packle    = AK_MAKE_FOURCC('Y', 'U', 4, 44),
+            Format_yuv555packbe    = AK_MAKE_FOURCC(55, 5, 'U', 'Y'),
+            Format_yuv555packle    = AK_MAKE_FOURCC('Y', 'U', 5, 55),
+            Format_yuv565packbe    = AK_MAKE_FOURCC(56, 5, 'U', 'Y'),
+            Format_yuv565packle    = AK_MAKE_FOURCC('Y', 'U', 5, 65),
+            Format_yuva420p        = AK_MAKE_FOURCC('A', 4, 2, 0),
+            Format_yuva420p10be    = AK_MAKE_FOURCC(10, 0, 2, 'A'),
+            Format_yuva420p10le    = AK_MAKE_FOURCC('A', 2, 0, 10),
+            Format_yuva420p16be    = AK_MAKE_FOURCC(16, 0, 2, 'A'),
+            Format_yuva420p16le    = AK_MAKE_FOURCC('A', 2, 0, 16),
+            Format_yuva420p9be     = AK_MAKE_FOURCC(9, 0, 2, 'A'),
+            Format_yuva420p9le     = AK_MAKE_FOURCC('A', 2, 0, 9),
+            Format_yuva422p        = AK_MAKE_FOURCC('A', 4, 2, 2),
+            Format_yuva422p10be    = AK_MAKE_FOURCC(10, 2, 2, 'A'),
+            Format_yuva422p10le    = AK_MAKE_FOURCC('A', 2, 2, 10),
+            Format_yuva422p12be    = AK_MAKE_FOURCC(12, 2, 2, 'A'),
+            Format_yuva422p12le    = AK_MAKE_FOURCC('A', 2, 2, 12),
+            Format_yuva422p16be    = AK_MAKE_FOURCC(16, 2, 2, 'A'),
+            Format_yuva422p16le    = AK_MAKE_FOURCC('A', 2, 2, 16),
+            Format_yuva422p9be     = AK_MAKE_FOURCC(9, 2, 2, 'A'),
+            Format_yuva422p9le     = AK_MAKE_FOURCC('A', 2, 2, 9),
+            Format_yuva444p        = AK_MAKE_FOURCC('A', 4, 4, 4),
+            Format_yuva444p10be    = AK_MAKE_FOURCC(10, 4, 4, 'A'),
+            Format_yuva444p10le    = AK_MAKE_FOURCC('A', 4, 4, 10),
+            Format_yuva444p12be    = AK_MAKE_FOURCC(12, 4, 4, 'A'),
+            Format_yuva444p12le    = AK_MAKE_FOURCC('A', 4, 4, 12),
+            Format_yuva444p16be    = AK_MAKE_FOURCC(16, 4, 4, 'A'),
+            Format_yuva444p16le    = AK_MAKE_FOURCC('A', 4, 4, 16),
+            Format_yuva444p9be     = AK_MAKE_FOURCC(9, 4, 4, 'A'),
+            Format_yuva444p9le     = AK_MAKE_FOURCC('A', 4, 4, 9),
+            Format_yuyv211         = AK_MAKE_FOURCC('Y', 'U', 'Y', 1),
+            Format_yuyv422         = AK_MAKE_FOURCC('Y', 'U', 'Y', 2),
+            Format_yuyv422_32_10be = AK_MAKE_FOURCC('Y', 'U', 32, 10),
+            Format_yuyv422_32_10le = AK_MAKE_FOURCC('Y', 'U', 32, 10),
+            Format_yuyv422_32be    = AK_MAKE_FOURCC('Y', 'U', 'Y', 32),
+            Format_yuyv422_32le    = AK_MAKE_FOURCC('Y', 'U', 'Y', 32),
+            Format_yvu410p         = AK_MAKE_FOURCC('Y', 'V', 10, 'P'),
+            Format_yvu420p         = AK_MAKE_FOURCC('Y', 'V', 20, 'P'),
+            Format_yvu422p         = AK_MAKE_FOURCC('Y', 'V', 22, 'P'),
+            Format_yvu444p         = AK_MAKE_FOURCC('Y', 'V', 44, 'P'),
+            Format_yvyu422         = AK_MAKE_FOURCC('Y', 'V', 4, 22),
+
+#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
+            Format_0bgr444       = Format_0bgr444le,
+            Format_0bgrpack      = Format_0bgrpackle,
+            Format_0rgbpack      = Format_0rgbpackle,
+            Format_abgr1555      = Format_abgr1555le,
+            Format_abgr4444      = Format_abgr4444le,
+            Format_abgrpack      = Format_abgrpackle,
+            Format_argb1555      = Format_argb1555le,
+            Format_argb2101010   = Format_argb2101010le,
+            Format_argb4444      = Format_argb4444le,
+            Format_argb64        = Format_argb64le,
+            Format_argbpack      = Format_argbpackle,
+            Format_ayuv64        = Format_ayuv64le,
+            Format_ayuvpack      = Format_ayuvpackle,
+            Format_bgr0444       = Format_bgr0444le,
+            Format_bgr0555       = Format_bgr0555le,
+            Format_bgr30         = Format_bgr30le,
+            Format_bgr444        = Format_bgr444le,
+            Format_bgr48         = Format_bgr48le,
+            Format_bgr555        = Format_bgr555le,
+            Format_bgr565        = Format_bgr565le,
+            Format_bgra4444      = Format_bgra4444le,
+            Format_bgra5551      = Format_bgra5551le,
+            Format_bgra64        = Format_bgra64le,
+            Format_gbrap10       = Format_gbrap10le,
+            Format_gbrap12       = Format_gbrap12le,
+            Format_gbrap16       = Format_gbrap16le,
+            Format_gbrp10        = Format_gbrp10le,
+            Format_gbrp12        = Format_gbrp12le,
+            Format_gbrp14        = Format_gbrp14le,
+            Format_gbrp16        = Format_gbrp16le,
+            Format_gbrp9         = Format_gbrp9le,
+            Format_gray10        = Format_gray10le,
+            Format_gray12        = Format_gray12le,
+            Format_gray14        = Format_gray14le,
+            Format_gray16        = Format_gray16le,
+            Format_gray32        = Format_gray32le,
+            Format_gray9         = Format_gray9le,
+            Format_graya16       = Format_graya16le,
+            Format_graya8pack    = Format_graya8packle,
+            Format_nv20          = Format_nv20le,
+            Format_p010          = Format_p010le,
+            Format_p016          = Format_p016le,
+            Format_p210          = Format_p210le,
+            Format_p216          = Format_p216le,
+            Format_p410          = Format_p410le,
+            Format_p416          = Format_p416le,
+            Format_rgb0444       = Format_rgb0444le,
+            Format_rgb0555       = Format_rgb0555le,
+            Format_rgb0pack      = Format_rgb0packle,
+            Format_rgb30         = Format_rgb30le,
+            Format_rgb444        = Format_rgb444le,
+            Format_rgb48         = Format_rgb48le,
+            Format_rgb555        = Format_rgb555le,
+            Format_rgb5550       = Format_rgb5550le,
+            Format_rgb565        = Format_rgb565le,
+            Format_rgba1010102   = Format_rgba1010102le,
+            Format_rgba4444      = Format_rgba4444le,
+            Format_rgba5551      = Format_rgba5551le,
+            Format_rgba64        = Format_rgba64le,
+            Format_rgbapack      = Format_rgbapackle,
+            Format_y210          = Format_y210le,
+            Format_yuv30         = Format_yuv30le,
+            Format_yuv420p10     = Format_yuv420p10le,
+            Format_yuv420p12     = Format_yuv420p12le,
+            Format_yuv420p14     = Format_yuv420p14le,
+            Format_yuv420p16     = Format_yuv420p16le,
+            Format_yuv420p9      = Format_yuv420p9le,
+            Format_yuv422p10     = Format_yuv422p10le,
+            Format_yuv422p12     = Format_yuv422p12le,
+            Format_yuv422p14     = Format_yuv422p14le,
+            Format_yuv422p16     = Format_yuv422p16le,
+            Format_yuv422p9      = Format_yuv422p9le,
+            Format_yuv440p10     = Format_yuv440p10le,
+            Format_yuv440p12     = Format_yuv440p12le,
+            Format_yuv444p10     = Format_yuv444p10le,
+            Format_yuv444p12     = Format_yuv444p12le,
+            Format_yuv444p14     = Format_yuv444p14le,
+            Format_yuv444p16     = Format_yuv444p16le,
+            Format_yuv444p9      = Format_yuv444p9le,
+            Format_yuv444pack    = Format_yuv444packle,
+            Format_yuv555pack    = Format_yuv555packle,
+            Format_yuv565pack    = Format_yuv565packle,
+            Format_yuva420p10    = Format_yuva420p10le,
+            Format_yuva420p16    = Format_yuva420p16le,
+            Format_yuva420p9     = Format_yuva420p9le,
+            Format_yuva422p10    = Format_yuva422p10le,
+            Format_yuva422p12    = Format_yuva422p12le,
+            Format_yuva422p16    = Format_yuva422p16le,
+            Format_yuva422p9     = Format_yuva422p9le,
+            Format_yuva444p10    = Format_yuva444p10le,
+            Format_yuva444p12    = Format_yuva444p12le,
+            Format_yuva444p16    = Format_yuva444p16le,
+            Format_yuva444p9     = Format_yuva444p9le,
+            Format_yuyv422_32    = Format_yuyv422_32le,
+            Format_yuyv422_32_10 = Format_yuyv422_32_10le,
+#else
+            Format_0bgr444       = Format_0bgr444be,
+            Format_0bgrpack      = Format_0bgrpackbe,
+            Format_0rgbpack      = Format_0rgbpackbe,
+            Format_abgr1555      = Format_abgr1555be,
+            Format_abgr4444      = Format_abgr4444be,
+            Format_abgrpack      = Format_abgrpackbe,
+            Format_argb1555      = Format_argb1555be,
+            Format_argb2101010   = Format_argb2101010be,
+            Format_argb4444      = Format_argb4444be,
+            Format_argb64        = Format_argb64be,
+            Format_argbpack      = Format_argbpackbe,
+            Format_ayuv64        = Format_ayuv64be,
+            Format_ayuvpack      = Format_ayuvpackbe,
+            Format_bgr0444       = Format_bgr0444be,
+            Format_bgr0555       = Format_bgr0555be,
+            Format_bgr30         = Format_bgr30be,
+            Format_bgr444        = Format_bgr444be,
+            Format_bgr48         = Format_bgr48be,
+            Format_bgr555        = Format_bgr555be,
+            Format_bgr565        = Format_bgr565be,
+            Format_bgra4444      = Format_bgra4444be,
+            Format_bgra5551      = Format_bgra5551be,
+            Format_bgra64        = Format_bgra64be,
+            Format_gbrap10       = Format_gbrap10be,
+            Format_gbrap12       = Format_gbrap12be,
+            Format_gbrap16       = Format_gbrap16be,
+            Format_gbrp10        = Format_gbrp10be,
+            Format_gbrp12        = Format_gbrp12be,
+            Format_gbrp14        = Format_gbrp14be,
+            Format_gbrp16        = Format_gbrp16be,
+            Format_gbrp9         = Format_gbrp9be,
+            Format_gray10        = Format_gray10be,
+            Format_gray12        = Format_gray12be,
+            Format_gray14        = Format_gray14be,
+            Format_gray16        = Format_gray16be,
+            Format_gray32        = Format_gray32be,
+            Format_gray9         = Format_gray9be,
+            Format_graya16       = Format_graya16be,
+            Format_graya8pack    = Format_graya8packbe,
+            Format_nv20          = Format_nv20be,
+            Format_p010          = Format_p010be,
+            Format_p016          = Format_p016be,
+            Format_p210          = Format_p210be,
+            Format_p216          = Format_p216be,
+            Format_p410          = Format_p410be,
+            Format_p416          = Format_p416be,
+            Format_rgb0444       = Format_rgb0444be,
+            Format_rgb0555       = Format_rgb0555be,
+            Format_rgb0pack      = Format_rgb0packbe,
+            Format_rgb30         = Format_rgb30be,
+            Format_rgb444        = Format_rgb444be,
+            Format_rgb48         = Format_rgb48be,
+            Format_rgb555        = Format_rgb555be,
+            Format_rgb5550       = Format_rgb5550be,
+            Format_rgb565        = Format_rgb565be,
+            Format_rgba1010102   = Format_rgba1010102be,
+            Format_rgba4444      = Format_rgba4444be,
+            Format_rgba5551      = Format_rgba5551be,
+            Format_rgba64        = Format_rgba64be,
+            Format_rgbapack      = Format_rgbapackbe,
+            Format_y210          = Format_y210be,
+            Format_yuv30         = Format_yuv30be,
+            Format_yuv420p10     = Format_yuv420p10be,
+            Format_yuv420p12     = Format_yuv420p12be,
+            Format_yuv420p14     = Format_yuv420p14be,
+            Format_yuv420p16     = Format_yuv420p16be,
+            Format_yuv420p9      = Format_yuv420p9be,
+            Format_yuv422p10     = Format_yuv422p10be,
+            Format_yuv422p12     = Format_yuv422p12be,
+            Format_yuv422p14     = Format_yuv422p14be,
+            Format_yuv422p16     = Format_yuv422p16be,
+            Format_yuv422p9      = Format_yuv422p9be,
+            Format_yuv440p10     = Format_yuv440p10be,
+            Format_yuv440p12     = Format_yuv440p12be,
+            Format_yuv444p10     = Format_yuv444p10be,
+            Format_yuv444p12     = Format_yuv444p12be,
+            Format_yuv444p14     = Format_yuv444p14be,
+            Format_yuv444p16     = Format_yuv444p16be,
+            Format_yuv444p9      = Format_yuv444p9be,
+            Format_yuv444pack    = Format_yuv444packbe,
+            Format_yuv555pack    = Format_yuv555packbe,
+            Format_yuv565pack    = Format_yuv565packbe,
+            Format_yuva420p10    = Format_yuva420p10be,
+            Format_yuva420p16    = Format_yuva420p16be,
+            Format_yuva420p9     = Format_yuva420p9be,
+            Format_yuva422p10    = Format_yuva422p10be,
+            Format_yuva422p12    = Format_yuva422p12be,
+            Format_yuva422p16    = Format_yuva422p16be,
+            Format_yuva422p9     = Format_yuva422p9be,
+            Format_yuva444p10    = Format_yuva444p10be,
+            Format_yuva444p12    = Format_yuva444p12be,
+            Format_yuva444p16    = Format_yuva444p16be,
+            Format_yuva444p9     = Format_yuva444p9be,
+            Format_yuyv422_32    = Format_yuyv422_32be,
+            Format_yuyv422_32_10 = Format_yuyv422_32_10be,
+#endif
         };
+        Q_ENUM(PixelFormat)
         using PixelFormatList = QList<PixelFormat>;
 
         AkVideoCaps(QObject *parent=nullptr);
         AkVideoCaps(PixelFormat format,
                     int width,
                     int height,
-                    const AkFrac &fps,
-                    int align=1);
+                    const AkFrac &fps);
         AkVideoCaps(PixelFormat format,
                     const QSize &size,
-                    const AkFrac &fps,
-                    int align=1);
-        AkVideoCaps(const AkCaps &caps);
+                    const AkFrac &fps);
+        AkVideoCaps(const AkCaps &other);
         AkVideoCaps(const AkVideoCaps &other);
         ~AkVideoCaps();
+        AkVideoCaps &operator =(const AkCaps &other);
         AkVideoCaps &operator =(const AkVideoCaps &other);
-        AkVideoCaps &operator =(const AkCaps &caps);
         bool operator ==(const AkVideoCaps &other) const;
         bool operator !=(const AkVideoCaps &other) const;
         operator bool() const;
@@ -334,76 +543,48 @@ class AKCOMMONS_EXPORT AkVideoCaps: publ
         Q_INVOKABLE static QObject *create(AkVideoCaps::PixelFormat format,
                                            int width,
                                            int height,
-                                           const AkFrac &fps,
-                                           int align=1);
-        Q_INVOKABLE static QObject *create(const QString &format,
-                                           int width,
-                                           int height,
-                                           const AkFrac &fps,
-                                           int align=1);
+                                           const AkFrac &fps);
         Q_INVOKABLE static QObject *create(AkVideoCaps::PixelFormat format,
                                            const QSize &size,
-                                           const AkFrac &fps,
-                                           int align=1);
-        Q_INVOKABLE static QObject *create(const QString &format,
-                                           const QSize &size,
-                                           const AkFrac &fps,
-                                           int align=1);
+                                           const AkFrac &fps);
         Q_INVOKABLE QVariant toVariant() const;
 
-        Q_INVOKABLE PixelFormat format() const;
-        Q_INVOKABLE quint32 fourCC() const;
+        Q_INVOKABLE AkVideoCaps::PixelFormat format() const;
         Q_INVOKABLE int bpp() const;
         Q_INVOKABLE QSize size() const;
         Q_INVOKABLE int width() const;
         Q_INVOKABLE int height() const;
         Q_INVOKABLE AkFrac fps() const;
         Q_INVOKABLE AkFrac &fps();
-        Q_INVOKABLE int align() const;
-        Q_INVOKABLE size_t pictureSize() const;
 
-        Q_INVOKABLE static AkVideoCaps fromMap(const QVariantMap &caps);
-        Q_INVOKABLE QVariantMap toMap() const;
-        Q_INVOKABLE AkVideoCaps &update(const AkCaps &caps);
-        Q_INVOKABLE size_t planeOffset(int plane) const;
-        Q_INVOKABLE size_t lineOffset(int plane, int y) const;
-        Q_INVOKABLE size_t bytesPerLine(int plane) const;
-        Q_INVOKABLE int planes() const;
-        Q_INVOKABLE size_t planeSize(int plane) const;
         Q_INVOKABLE AkVideoCaps nearest(const AkVideoCapsList &caps) const;
+        Q_INVOKABLE bool isSameFormat(const AkVideoCaps &other) const;
 
-        Q_INVOKABLE static int bitsPerPixel(PixelFormat pixelFormat);
-        Q_INVOKABLE static int bitsPerPixel(const QString &pixelFormat);
-        Q_INVOKABLE static QString pixelFormatToString(PixelFormat pixelFormat);
-        Q_INVOKABLE static PixelFormat pixelFormatFromString(const QString &pixelFormat);
-        Q_INVOKABLE static quint32 fourCC(PixelFormat pixelFormat);
-        Q_INVOKABLE static quint32 fourCC(const QString &pixelFormat);
+        Q_INVOKABLE static int bitsPerPixel(AkVideoCaps::PixelFormat pixelFormat);
+        Q_INVOKABLE static QString pixelFormatToString(AkVideoCaps::PixelFormat pixelFormat);
+        Q_INVOKABLE static AkVideoFormatSpec formatSpecs(AkVideoCaps::PixelFormat pixelFormat);
 
     private:
         AkVideoCapsPrivate *d;
 
     Q_SIGNALS:
-        void formatChanged(PixelFormat format);
+        void formatChanged(AkVideoCaps::PixelFormat format);
         void sizeChanged(const QSize &size);
         void widthChanged(int width);
         void heightChanged(int height);
         void fpsChanged(const AkFrac &fps);
-        void alignChanged(int height);
 
     public Q_SLOTS:
-        void setFormat(PixelFormat format);
+        void setFormat(AkVideoCaps::PixelFormat format);
         void setSize(const QSize &size);
         void setWidth(int width);
         void setHeight(int height);
         void setFps(const AkFrac &fps);
-        void setAlign(int align);
         void resetFormat();
         void resetSize();
         void resetWidth();
         void resetHeight();
         void resetFps();
-        void resetAlign();
-        void clear();
         static void registerTypes();
 };
 
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/akvideoconverter.cpp
@@ -0,0 +1,7051 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QDebug>
+#include <QGenericMatrix>
+#include <QMutex>
+#include <QQmlEngine>
+#include <QRect>
+#include <QtEndian>
+#include <QtMath>
+
+#include "akvideoconverter.h"
+#include "akvideocaps.h"
+#include "akvideopacket.h"
+#include "akvideoformatspec.h"
+#include "akfrac.h"
+
+#define SCALE_EMULT 8
+
+/*
+ * NOTE: Using integer numbers is much faster but can overflow with high
+ * resolution and depth frames.
+ */
+
+#if 0
+using DlSumType = quint64;
+#else
+using DlSumType = qreal;
+#endif
+
+enum ColorMatrix
+{
+    ColorMatrix_ABC2XYZ,
+    ColorMatrix_RGB2YUV,
+    ColorMatrix_YUV2RGB,
+    ColorMatrix_RGB2GRAY,
+    ColorMatrix_GRAY2RGB,
+    ColorMatrix_YUV2GRAY,
+    ColorMatrix_GRAY2YUV,
+};
+
+class ColorConvert
+{
+    public:
+        ColorConvert();
+        ColorConvert(AkVideoConverter::YuvColorSpace yuvColorSpace,
+                     AkVideoConverter::YuvColorSpaceType yuvColorSpaceType=AkVideoConverter::YuvColorSpaceType_StudioSwing);
+        ColorConvert(AkVideoConverter::YuvColorSpaceType yuvColorSpaceType);
+        void setYuvColorSpace(AkVideoConverter::YuvColorSpace yuvColorSpace);
+        void setYuvColorSpaceType(AkVideoConverter::YuvColorSpaceType yuvColorSpaceType);
+        inline void applyMatrix(qint64 a, qint64 b, qint64 c,
+                                qint64 *x, qint64 *y, qint64 *z) const;
+        inline void applyVector(qint64 a, qint64 b, qint64 c,
+                                qint64 *x, qint64 *y, qint64 *z) const;
+        inline void applyPoint(qint64 p,
+                               qint64 *x, qint64 *y, qint64 *z) const;
+        inline void applyPoint(qint64 a, qint64 b, qint64 c,
+                               qint64 *p) const;
+        inline void applyPoint(qint64 p, qint64 *q) const;
+        inline void applyAlpha(qint64 x, qint64 y, qint64 z, qint64 a,
+                               qint64 *xa, qint64 *ya, qint64 *za) const;
+        inline void applyAlpha(qint64 a,
+                               qint64 *x, qint64 *y, qint64 *z) const;
+        inline void applyAlpha(qint64 p, qint64 a, qint64 *pa) const;
+        inline void applyAlpha(qint64 a, qint64 *p) const;
+        void setAlphaBits(int abits);
+        void loadMatrix(ColorMatrix colorMatrix,
+                        int ibitsa,
+                        int ibitsb,
+                        int ibitsc,
+                        int obitsx,
+                        int obitsy,
+                        int obitsz);
+        void loadMatrix(const AkVideoFormatSpec &from,
+                        const AkVideoFormatSpec &to);
+        void loadMatrix(const AkVideoCaps::PixelFormat &from,
+                        const AkVideoCaps::PixelFormat &to);
+
+    private:
+        AkVideoConverter::YuvColorSpace yuvColorSpace {AkVideoConverter::YuvColorSpace_ITUR_BT601};
+        AkVideoConverter::YuvColorSpaceType yuvColorSpaceType {AkVideoConverter::YuvColorSpaceType_StudioSwing};
+        qint64 m00 {0}, m01 {0}, m02 {0}, m03 {0};
+        qint64 m10 {0}, m11 {0}, m12 {0}, m13 {0};
+        qint64 m20 {0}, m21 {0}, m22 {0}, m23 {0};
+        qint64 xmin {0}, xmax {0};
+        qint64 ymin {0}, ymax {0};
+        qint64 zmin {0}, zmax {0};
+        qint64 amax {0};
+        qint64 shift {0};
+
+        void rbConstants(AkVideoConverter::YuvColorSpace colorSpace,
+                         qint64 &kr,
+                         qint64 &kb,
+                         qint64 &div) const;
+        qint64 roundedDiv(qint64 num, qint64 den) const;
+        qint64 nearestPowOf2(qint64 value) const;
+        void limitsY(int bits,
+                     AkVideoConverter::YuvColorSpaceType type,
+                     qint64 &minY,
+                     qint64 &maxY) const;
+        void limitsUV(int bits,
+                      AkVideoConverter::YuvColorSpaceType type,
+                      qint64 &minUV,
+                      qint64 &maxUV) const;
+        void loadAbc2xyzMatrix(int abits,
+                               int bbits,
+                               int cbits,
+                               int xbits,
+                               int ybits,
+                               int zbits);
+        void loadRgb2yuvMatrix(AkVideoConverter::YuvColorSpace colorSpace,
+                               AkVideoConverter::YuvColorSpaceType type,
+                               int rbits,
+                               int gbits,
+                               int bbits,
+                               int ybits,
+                               int ubits,
+                               int vbits);
+        void loadYuv2rgbMatrix(AkVideoConverter::YuvColorSpace colorSpace,
+                               AkVideoConverter::YuvColorSpaceType type,
+                               int ybits,
+                               int ubits,
+                               int vbits,
+                               int rbits,
+                               int gbits,
+                               int bbits);
+        void loadRgb2grayMatrix(AkVideoConverter::YuvColorSpace colorSpace,
+                                int rbits,
+                                int gbits,
+                                int bbits,
+                                int graybits);
+        void loadGray2rgbMatrix(int graybits,
+                                int rbits,
+                                int gbits,
+                                int bbits);
+        void loadYuv2grayMatrix(AkVideoConverter::YuvColorSpaceType type,
+                                int ybits,
+                                int ubits,
+                                int vbits,
+                                int graybits);
+        void loadGray2yuvMatrix(AkVideoConverter::YuvColorSpaceType type,
+                                int graybits,
+                                int ybits,
+                                int ubits,
+                                int vbits);
+};
+
+enum ConvertType
+{
+    ConvertType_Vector,
+    ConvertType_1to1,
+    ConvertType_1to3,
+    ConvertType_3to1,
+    ConvertType_3to3,
+};
+
+enum ConvertDataTypes
+{
+    ConvertDataTypes_8_8,
+    ConvertDataTypes_8_16,
+    ConvertDataTypes_8_32,
+    ConvertDataTypes_16_8,
+    ConvertDataTypes_16_16,
+    ConvertDataTypes_16_32,
+    ConvertDataTypes_32_8,
+    ConvertDataTypes_32_16,
+    ConvertDataTypes_32_32,
+};
+
+enum AlphaMode
+{
+    AlphaMode_AI_AO,
+    AlphaMode_AI_O,
+    AlphaMode_I_AO,
+    AlphaMode_I_O,
+};
+
+enum ResizeMode
+{
+    ResizeMode_Keep,
+    ResizeMode_Up,
+    ResizeMode_Down,
+};
+
+class FrameConvertParameters
+{
+    public:
+        ColorConvert colorConvert;
+
+        AkVideoCaps inputCaps;
+        AkVideoCaps outputCaps;
+        AkVideoCaps outputConvertCaps;
+        AkVideoPacket outputFrame;
+        AkVideoConverter::YuvColorSpace yuvColorSpace {AkVideoConverter::YuvColorSpace_ITUR_BT601};
+        AkVideoConverter::YuvColorSpaceType yuvColorSpaceType {AkVideoConverter::YuvColorSpaceType_StudioSwing};
+        AkVideoConverter::ScalingMode scalingMode {AkVideoConverter::ScalingMode_Fast};
+        AkVideoConverter::AspectRatioMode aspectRatioMode {AkVideoConverter::AspectRatioMode_Ignore};
+        ConvertType convertType {ConvertType_Vector};
+        ConvertDataTypes convertDataTypes {ConvertDataTypes_8_8};
+        AlphaMode alphaMode {AlphaMode_AI_AO};
+        ResizeMode resizeMode {ResizeMode_Keep};
+
+        int fromEndian {Q_BYTE_ORDER};
+        int toEndian {Q_BYTE_ORDER};
+
+        int inputWidth {0};
+        int inputWidth_1 {0};
+        int inputHeight {0};
+        int outputWidth {0};
+        int outputHeight {0};
+
+        int *srcWidth {nullptr};
+        int *srcWidth_1 {nullptr};
+        int *srcWidthOffsetX {nullptr};
+        int *srcWidthOffsetY {nullptr};
+        int *srcWidthOffsetZ {nullptr};
+        int *srcWidthOffsetA {nullptr};
+        int *srcHeight {nullptr};
+
+        int *dlSrcWidthOffsetX {nullptr};
+        int *dlSrcWidthOffsetY {nullptr};
+        int *dlSrcWidthOffsetZ {nullptr};
+        int *dlSrcWidthOffsetA {nullptr};
+
+        int *srcWidthOffsetX_1 {nullptr};
+        int *srcWidthOffsetY_1 {nullptr};
+        int *srcWidthOffsetZ_1 {nullptr};
+        int *srcWidthOffsetA_1 {nullptr};
+        int *srcHeight_1 {nullptr};
+
+        int *dstWidthOffsetX {nullptr};
+        int *dstWidthOffsetY {nullptr};
+        int *dstWidthOffsetZ {nullptr};
+        int *dstWidthOffsetA {nullptr};
+
+        size_t *srcHeightDlOffset {nullptr};
+        size_t *srcHeightDlOffset_1 {nullptr};
+
+        DlSumType *integralImageDataX {nullptr};
+        DlSumType *integralImageDataY {nullptr};
+        DlSumType *integralImageDataZ {nullptr};
+        DlSumType *integralImageDataA {nullptr};
+
+        qint64 *kx {nullptr};
+        qint64 *ky {nullptr};
+        DlSumType *kdl {nullptr};
+
+        int planeXi {0};
+        int planeYi {0};
+        int planeZi {0};
+        int planeAi {0};
+
+        AkColorComponent compXi;
+        AkColorComponent compYi;
+        AkColorComponent compZi;
+        AkColorComponent compAi;
+
+        int planeXo {0};
+        int planeYo {0};
+        int planeZo {0};
+        int planeAo {0};
+
+        AkColorComponent compXo;
+        AkColorComponent compYo;
+        AkColorComponent compZo;
+        AkColorComponent compAo;
+
+        size_t xiOffset {0};
+        size_t yiOffset {0};
+        size_t ziOffset {0};
+        size_t aiOffset {0};
+
+        size_t xoOffset {0};
+        size_t yoOffset {0};
+        size_t zoOffset {0};
+        size_t aoOffset {0};
+
+        size_t xiShift {0};
+        size_t yiShift {0};
+        size_t ziShift {0};
+        size_t aiShift {0};
+
+        size_t xoShift {0};
+        size_t yoShift {0};
+        size_t zoShift {0};
+        size_t aoShift {0};
+
+        quint64 maxXi {0};
+        quint64 maxYi {0};
+        quint64 maxZi {0};
+        quint64 maxAi {0};
+
+        quint64 maskXo {0};
+        quint64 maskYo {0};
+        quint64 maskZo {0};
+        quint64 maskAo {0};
+
+        quint64 alphaMask {0};
+
+        FrameConvertParameters();
+        FrameConvertParameters(const FrameConvertParameters &other);
+        ~FrameConvertParameters();
+        FrameConvertParameters &operator =(const FrameConvertParameters &other);
+        inline void clearBuffers();
+        inline void clearDlBuffers();
+        inline void allocateBuffers(const AkVideoCaps &ocaps);
+        inline void allocateDlBuffers(const AkVideoCaps &icaps,
+                                      const AkVideoCaps &ocaps);
+        void setOutputConvertCaps(const AkVideoCaps &icaps,
+                                  const AkVideoCaps &ocaps,
+                                  AkVideoConverter::AspectRatioMode aspectRatioMode);
+        void configure(const AkVideoCaps &icaps,
+                       const AkVideoCaps &ocaps,
+                       ColorConvert &colorConvert,
+                       AkVideoConverter::YuvColorSpace yuvColorSpace,
+                       AkVideoConverter::YuvColorSpaceType yuvColorSpaceType);
+        void configureScaling(const AkVideoCaps &icaps,
+                              const AkVideoCaps &ocaps,
+                              AkVideoConverter::AspectRatioMode aspectRatioMode);
+        void reset();
+};
+
+class AkVideoConverterPrivate
+{
+    public:
+        QMutex m_mutex;
+        AkVideoCaps m_outputCaps;
+        FrameConvertParameters *m_fc {nullptr};
+        size_t m_fcSize {0};
+        int m_cacheIndex {0};
+        AkVideoConverter::YuvColorSpace m_yuvColorSpace {AkVideoConverter::YuvColorSpace_ITUR_BT601};
+        AkVideoConverter::YuvColorSpaceType m_yuvColorSpaceType {AkVideoConverter::YuvColorSpaceType_StudioSwing};
+        AkVideoConverter::ScalingMode m_scalingMode {AkVideoConverter::ScalingMode_Fast};
+        AkVideoConverter::AspectRatioMode m_aspectRatioMode {AkVideoConverter::AspectRatioMode_Ignore};
+
+        /* Color blendig functions
+         *
+         * kx and ky must be in the range of [0, 2^N]
+         */
+
+        template <int N>
+        inline void blend(qint64 a,
+                          qint64 bx, qint64 by,
+                          qint64 kx, qint64 ky,
+                          qint64 *c) const
+        {
+            *c = (kx * (bx - a) + ky * (by - a) + (a << (N + 1))) >> (N + 1);
+        }
+
+        template <int N>
+        inline void blend2(const qint64 *ax,
+                           const qint64 *bx, const qint64 *by,
+                           qint64 kx, qint64 ky,
+                           qint64 *c) const
+        {
+            this->blend<N>(ax[0],
+                           bx[0], by[0],
+                           kx, ky,
+                           c);
+            this->blend<N>(ax[1],
+                           bx[1], by[1],
+                           kx, ky,
+                           c + 1);
+        }
+
+        template <int N>
+        inline void blend3(const qint64 *ax,
+                           const qint64 *bx, const qint64 *by,
+                           qint64 kx, qint64 ky,
+                           qint64 *c) const
+        {
+            this->blend<N>(ax[0],
+                           bx[0], by[0],
+                           kx, ky,
+                           c);
+            this->blend<N>(ax[1],
+                           bx[1], by[1],
+                           kx, ky,
+                           c + 1);
+            this->blend<N>(ax[2],
+                           bx[2], by[2],
+                           kx, ky,
+                           c + 2);
+        }
+
+        template <int N>
+        inline void blend4(const qint64 *ax,
+                           const qint64 *bx, const qint64 *by,
+                           qint64 kx, qint64 ky,
+                           qint64 *c) const
+        {
+            this->blend<N>(ax[0],
+                           bx[0], by[0],
+                           kx, ky,
+                           c);
+            this->blend<N>(ax[1],
+                           bx[1], by[1],
+                           kx, ky,
+                           c + 1);
+            this->blend<N>(ax[2],
+                           bx[2], by[2],
+                           kx, ky,
+                           c + 2);
+            this->blend<N>(ax[3],
+                           bx[3], by[3],
+                           kx, ky,
+                           c + 3);
+        }
+
+        // Endianness conversion functions for color components
+
+        inline quint8 swapBytes(quint8 &&value, int endianness) const
+        {
+            Q_UNUSED(endianness)
+
+            return value;
+        }
+
+        inline quint16 swapBytes(quint16 &&value, int endianness) const
+        {
+            if (endianness == Q_BYTE_ORDER)
+                return value;
+
+            quint16 result;
+            auto pv = reinterpret_cast<quint8 *>(&value);
+            auto pr = reinterpret_cast<quint8 *>(&result);
+            pr[0] = pv[1];
+            pr[1] = pv[0];
+
+            return result;
+        }
+
+        inline quint32 swapBytes(quint32 &&value, int endianness) const
+        {
+            if (endianness == Q_BYTE_ORDER)
+                return value;
+
+            quint32 result;
+            auto pv = reinterpret_cast<quint8 *>(&value);
+            auto pr = reinterpret_cast<quint8 *>(&result);
+            pr[0] = pv[3];
+            pr[1] = pv[2];
+            pr[2] = pv[1];
+            pr[3] = pv[0];
+
+            return result;
+        }
+
+        inline quint64 swapBytes(quint64 &&value, int endianness) const
+        {
+            if (endianness == Q_BYTE_ORDER)
+                return value;
+
+            quint64 result;
+            auto pv = reinterpret_cast<quint8 *>(&value);
+            auto pr = reinterpret_cast<quint8 *>(&result);
+            pr[0] = pv[7];
+            pr[1] = pv[6];
+            pr[2] = pv[5];
+            pr[3] = pv[4];
+            pr[4] = pv[3];
+            pr[5] = pv[2];
+            pr[6] = pv[1];
+            pr[7] = pv[0];
+
+            return result;
+        }
+
+        /* Integral image functions */
+
+        template <typename InputType>
+        inline void integralImage1(const FrameConvertParameters &fc,
+                                   const AkVideoPacket &src) const
+        {
+            auto dst_line_x = fc.integralImageDataX;
+            auto dst_line_x_1 = dst_line_x + fc.inputWidth_1;
+
+            for (int y = 0; y < fc.inputHeight; ++y) {
+                auto src_line_x = src.constLine(fc.planeXi, y) + fc.xiOffset;
+
+                // Reset current line summation.
+
+                DlSumType sumX = 0;
+
+                for (int x = 0; x < fc.inputWidth; ++x) {
+                    int &xs_x = fc.dlSrcWidthOffsetX[x];
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+
+                    // Accumulate pixels in current line.
+
+                    sumX += (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+
+                    // Accumulate current line and previous line.
+
+                    int x_1 = x + 1;
+                    dst_line_x_1[x_1] = sumX + dst_line_x[x_1];
+                }
+
+                dst_line_x += fc.inputWidth_1;
+                dst_line_x_1 += fc.inputWidth_1;
+            }
+        }
+
+        template <typename InputType>
+        inline void integralImage1A(const FrameConvertParameters &fc,
+                                    const AkVideoPacket &src) const
+        {
+            auto dst_line_x = fc.integralImageDataX;
+            auto dst_line_a = fc.integralImageDataA;
+            auto dst_line_x_1 = dst_line_x + fc.inputWidth_1;
+            auto dst_line_a_1 = dst_line_a + fc.inputWidth_1;
+
+            for (int y = 0; y < fc.inputHeight; ++y) {
+                auto src_line_x = src.constLine(fc.planeXi, y) + fc.xiOffset;
+                auto src_line_a = src.constLine(fc.planeAi, y) + fc.aiOffset;
+
+                // Reset current line summation.
+
+                DlSumType sumX = 0;
+                DlSumType sumA = 0;
+
+                for (int x = 0; x < fc.inputWidth; ++x) {
+                    int &xs_x = fc.dlSrcWidthOffsetX[x];
+                    int &xs_a = fc.dlSrcWidthOffsetA[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto ai = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+
+                    // Accumulate pixels in current line.
+
+                    sumX += (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    sumA += (this->swapBytes(InputType(ai), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    // Accumulate current line and previous line.
+
+                    int x_1 = x + 1;
+                    dst_line_x_1[x_1] = sumX + dst_line_x[x_1];
+                    dst_line_a_1[x_1] = sumA + dst_line_a[x_1];
+                }
+
+                dst_line_x += fc.inputWidth_1;
+                dst_line_a += fc.inputWidth_1;
+                dst_line_x_1 += fc.inputWidth_1;
+                dst_line_a_1 += fc.inputWidth_1;
+            }
+        }
+
+        template <typename InputType>
+        inline void integralImage3(const FrameConvertParameters &fc,
+                                   const AkVideoPacket &src) const
+        {
+            auto dst_line_x = fc.integralImageDataX;
+            auto dst_line_y = fc.integralImageDataY;
+            auto dst_line_z = fc.integralImageDataZ;
+            auto dst_line_x_1 = dst_line_x + fc.inputWidth_1;
+            auto dst_line_y_1 = dst_line_y + fc.inputWidth_1;
+            auto dst_line_z_1 = dst_line_z + fc.inputWidth_1;
+
+            for (int y = 0; y < fc.inputHeight; ++y) {
+                auto src_line_x = src.constLine(fc.planeXi, y) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, y) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, y) + fc.ziOffset;
+
+                // Reset current line summation.
+
+                DlSumType sumX = 0;
+                DlSumType sumY = 0;
+                DlSumType sumZ = 0;
+
+                for (int x = 0; x < fc.inputWidth; ++x) {
+                    int &xs_x = fc.dlSrcWidthOffsetX[x];
+                    int &xs_y = fc.dlSrcWidthOffsetY[x];
+                    int &xs_z = fc.dlSrcWidthOffsetZ[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+
+                    // Accumulate pixels in current line.
+
+                    sumX += (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    sumY += (this->swapBytes(InputType(yi), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    sumZ += (this->swapBytes(InputType(zi), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+
+                    // Accumulate current line and previous line.
+
+                    int x_1 = x + 1;
+                    dst_line_x_1[x_1] = sumX + dst_line_x[x_1];
+                    dst_line_y_1[x_1] = sumY + dst_line_y[x_1];
+                    dst_line_z_1[x_1] = sumZ + dst_line_z[x_1];
+                }
+
+                dst_line_x += fc.inputWidth_1;
+                dst_line_y += fc.inputWidth_1;
+                dst_line_z += fc.inputWidth_1;
+                dst_line_x_1 += fc.inputWidth_1;
+                dst_line_y_1 += fc.inputWidth_1;
+                dst_line_z_1 += fc.inputWidth_1;
+            }
+        }
+
+        template <typename InputType>
+        inline void integralImage3A(const FrameConvertParameters &fc,
+                                    const AkVideoPacket &src) const
+        {
+            auto dst_line_x = fc.integralImageDataX;
+            auto dst_line_y = fc.integralImageDataY;
+            auto dst_line_z = fc.integralImageDataZ;
+            auto dst_line_a = fc.integralImageDataA;
+            auto dst_line_x_1 = dst_line_x + fc.inputWidth_1;
+            auto dst_line_y_1 = dst_line_y + fc.inputWidth_1;
+            auto dst_line_z_1 = dst_line_z + fc.inputWidth_1;
+            auto dst_line_a_1 = dst_line_a + fc.inputWidth_1;
+
+            for (int y = 0; y < fc.inputHeight; ++y) {
+                auto src_line_x = src.constLine(fc.planeXi, y) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, y) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, y) + fc.ziOffset;
+                auto src_line_a = src.constLine(fc.planeAi, y) + fc.aiOffset;
+
+                // Reset current line summation.
+
+                DlSumType sumX = 0;
+                DlSumType sumY = 0;
+                DlSumType sumZ = 0;
+                DlSumType sumA = 0;
+
+                for (int x = 0; x < fc.inputWidth; ++x) {
+                    int &xs_x = fc.dlSrcWidthOffsetX[x];
+                    int &xs_y = fc.dlSrcWidthOffsetY[x];
+                    int &xs_z = fc.dlSrcWidthOffsetZ[x];
+                    int &xs_a = fc.dlSrcWidthOffsetA[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    auto ai = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+
+                    // Accumulate pixels in current line.
+
+                    sumX += (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    sumY += (this->swapBytes(InputType(yi), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    sumZ += (this->swapBytes(InputType(zi), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    sumA += (this->swapBytes(InputType(ai), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    // Accumulate current line and previous line.
+
+                    int x_1 = x + 1;
+                    dst_line_x_1[x_1] = sumX + dst_line_x[x_1];
+                    dst_line_y_1[x_1] = sumY + dst_line_y[x_1];
+                    dst_line_z_1[x_1] = sumZ + dst_line_z[x_1];
+                    dst_line_a_1[x_1] = sumA + dst_line_a[x_1];
+                }
+
+                dst_line_x += fc.inputWidth_1;
+                dst_line_y += fc.inputWidth_1;
+                dst_line_z += fc.inputWidth_1;
+                dst_line_a += fc.inputWidth_1;
+                dst_line_x_1 += fc.inputWidth_1;
+                dst_line_y_1 += fc.inputWidth_1;
+                dst_line_z_1 += fc.inputWidth_1;
+                dst_line_a_1 += fc.inputWidth_1;
+            }
+        }
+
+        /* Fast conversion functions */
+
+        // Conversion functions for 3 components to 3 components formats
+
+        template <typename InputType, typename OutputType>
+        void convert3to3(const FrameConvertParameters &fc,
+                         const AkVideoPacket &src,
+                         AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    yi = (this->swapBytes(InputType(yi), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    zi = (this->swapBytes(InputType(zi), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyMatrix(xi, yi, zi, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convert3to3A(const FrameConvertParameters &fc,
+                          const AkVideoPacket &src,
+                          AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    yi = (this->swapBytes(InputType(yi), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    zi = (this->swapBytes(InputType(zi), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyMatrix(xi, yi, zi, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = *ao | OutputType(fc.alphaMask);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convert3Ato3(const FrameConvertParameters &fc,
+                          const AkVideoPacket &src,
+                          AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    auto ai = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    yi = (this->swapBytes(InputType(yi), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    zi = (this->swapBytes(InputType(zi), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    ai = (this->swapBytes(InputType(ai), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyMatrix(xi, yi, zi, &xo_, &yo_, &zo_);
+                    fc.colorConvert.applyAlpha(ai, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convert3Ato3A(const FrameConvertParameters &fc,
+                           const AkVideoPacket &src,
+                           AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    auto ai = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    yi = (this->swapBytes(InputType(yi), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    zi = (this->swapBytes(InputType(zi), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    ai = (this->swapBytes(InputType(ai), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyMatrix(xi, yi, zi, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = (*ao & OutputType(fc.maskAo)) | (OutputType(ai) << fc.aoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        // Conversion functions for 3 components to 3 components formats
+        // (same color space)
+
+        template <typename InputType, typename OutputType>
+        void convertV3to3(const FrameConvertParameters &fc,
+                          const AkVideoPacket &src,
+                          AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    yi = (this->swapBytes(InputType(yi), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    zi = (this->swapBytes(InputType(zi), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyVector(xi, yi, zi, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertV3to3A(const FrameConvertParameters &fc,
+                           const AkVideoPacket &src,
+                           AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    yi = (this->swapBytes(InputType(yi), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    zi = (this->swapBytes(InputType(zi), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyVector(xi, yi, zi, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = *ao | OutputType(fc.alphaMask);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertV3Ato3(const FrameConvertParameters &fc,
+                           const AkVideoPacket &src,
+                           AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    auto ai = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    yi = (this->swapBytes(InputType(yi), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    zi = (this->swapBytes(InputType(zi), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    ai = (this->swapBytes(InputType(ai), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyVector(xi, yi, zi, &xo_, &yo_, &zo_);
+                    fc.colorConvert.applyAlpha(ai, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertV3Ato3A(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    auto ai = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    yi = (this->swapBytes(InputType(yi), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    zi = (this->swapBytes(InputType(zi), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    ai = (this->swapBytes(InputType(ai), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyVector(xi, yi, zi, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = (*ao & OutputType(fc.maskAo)) | (OutputType(ai) << fc.aoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        // Conversion functions for 3 components to 1 components formats
+
+        template <typename InputType, typename OutputType>
+        void convert3to1(const FrameConvertParameters &fc,
+                         const AkVideoPacket &src,
+                         AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.zoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    yi = (this->swapBytes(InputType(yi), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    zi = (this->swapBytes(InputType(zi), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xi, yi, zi, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *xo = this->swapBytes(OutputType(*xo), fc.toEndian);
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convert3to1A(const FrameConvertParameters &fc,
+                          const AkVideoPacket &src,
+                          AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    yi = (this->swapBytes(InputType(yi), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    zi = (this->swapBytes(InputType(zi), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xi, yi, zi, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *ao = *ao | OutputType(fc.alphaMask);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convert3Ato1(const FrameConvertParameters &fc,
+                          const AkVideoPacket &src,
+                          AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    auto ai = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    yi = (this->swapBytes(InputType(yi), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    zi = (this->swapBytes(InputType(zi), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    ai = (this->swapBytes(InputType(ai), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xi, yi, zi, &xo_);
+                    fc.colorConvert.applyAlpha(ai, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *xo = this->swapBytes(OutputType(*xo), fc.toEndian);
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convert3Ato1A(const FrameConvertParameters &fc,
+                           const AkVideoPacket &src,
+                           AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    auto ai = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    yi = (this->swapBytes(InputType(yi), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    zi = (this->swapBytes(InputType(zi), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    ai = (this->swapBytes(InputType(ai), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xi, yi, zi, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *ao = (*ao & OutputType(fc.maskAo)) | (OutputType(ai) << fc.aoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        // Conversion functions for 1 components to 3 components formats
+
+        template <typename InputType, typename OutputType>
+        void convert1to3(const FrameConvertParameters &fc,
+                         const AkVideoPacket &src, AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyPoint(xi, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convert1to3A(const FrameConvertParameters &fc,
+                          const AkVideoPacket &src,
+                          AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyPoint(xi, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = *ao | OutputType(fc.alphaMask);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convert1Ato3(const FrameConvertParameters &fc,
+                          const AkVideoPacket &src,
+                          AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto ai = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    ai = (this->swapBytes(InputType(ai), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyPoint(xi, &xo_, &yo_, &zo_);
+                    fc.colorConvert.applyAlpha(ai, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convert1Ato3A(const FrameConvertParameters &fc,
+                           const AkVideoPacket &src,
+                           AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto ai = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    ai = (this->swapBytes(InputType(ai), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyPoint(xi, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = (*ao & OutputType(fc.maskAo)) | (OutputType(ai) << fc.aoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        // Conversion functions for 1 components to 1 components formats
+
+        template <typename InputType, typename OutputType>
+        void convert1to1(const FrameConvertParameters &fc,
+                         const AkVideoPacket &src,
+                         AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xi, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *xo = this->swapBytes(OutputType(*xo), fc.toEndian);
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convert1to1A(const FrameConvertParameters &fc,
+                          const AkVideoPacket &src,
+                          AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xi, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *ao = *ao | OutputType(fc.alphaMask);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convert1Ato1(const FrameConvertParameters &fc,
+                          const AkVideoPacket &src,
+                          AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto ai = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    ai = (this->swapBytes(InputType(ai), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xi, &xo_);
+                    fc.colorConvert.applyAlpha(ai, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *xo = this->swapBytes(OutputType(*xo), fc.toEndian);
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convert1Ato1A(const FrameConvertParameters &fc,
+                           const AkVideoPacket &src,
+                           AkVideoPacket &dst) const
+        {
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto ai = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    ai = (this->swapBytes(InputType(ai), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xi, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *ao = (*ao & OutputType(fc.maskAo)) | (OutputType(ai) << fc.aoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        /* Linear downscaling conversion funtions */
+
+        // Conversion functions for 3 components to 3 components formats
+
+        template <typename InputType, typename OutputType>
+        void convertDL3to3(const FrameConvertParameters &fc,
+                           const AkVideoPacket &src,
+                           AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_y = fc.integralImageDataY + yOffset;
+                auto src_line_z = fc.integralImageDataZ + yOffset;
+
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+                auto src_line_y_1 = fc.integralImageDataY + y1Offset;
+                auto src_line_z_1 = fc.integralImageDataZ + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+                    auto yi = (src_line_y[xs] + src_line_y_1[xs_1] - src_line_y[xs_1] - src_line_y_1[xs]) / k;
+                    auto zi = (src_line_z[xs] + src_line_z_1[xs_1] - src_line_z[xs_1] - src_line_z_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyMatrix(xi,
+                                                yi,
+                                                zi,
+                                                &xo_,
+                                                &yo_,
+                                                &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertDL3to3A(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_y = fc.integralImageDataY + yOffset;
+                auto src_line_z = fc.integralImageDataZ + yOffset;
+
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+                auto src_line_y_1 = fc.integralImageDataY + y1Offset;
+                auto src_line_z_1 = fc.integralImageDataZ + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+                    auto yi = (src_line_y[xs] + src_line_y_1[xs_1] - src_line_y[xs_1] - src_line_y_1[xs]) / k;
+                    auto zi = (src_line_z[xs] + src_line_z_1[xs_1] - src_line_z[xs_1] - src_line_z_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyMatrix(xi,
+                                                yi,
+                                                zi,
+                                                &xo_,
+                                                &yo_,
+                                                &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = *ao | OutputType(fc.alphaMask);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertDL3Ato3(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_y = fc.integralImageDataY + yOffset;
+                auto src_line_z = fc.integralImageDataZ + yOffset;
+                auto src_line_a = fc.integralImageDataA + yOffset;
+
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+                auto src_line_y_1 = fc.integralImageDataY + y1Offset;
+                auto src_line_z_1 = fc.integralImageDataZ + y1Offset;
+                auto src_line_a_1 = fc.integralImageDataA + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+                    auto yi = (src_line_y[xs] + src_line_y_1[xs_1] - src_line_y[xs_1] - src_line_y_1[xs]) / k;
+                    auto zi = (src_line_z[xs] + src_line_z_1[xs_1] - src_line_z[xs_1] - src_line_z_1[xs]) / k;
+                    auto ai = (src_line_a[xs] + src_line_a_1[xs_1] - src_line_a[xs_1] - src_line_a_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyMatrix(xi,
+                                                yi,
+                                                zi,
+                                                &xo_,
+                                                &yo_,
+                                                &zo_);
+                    fc.colorConvert.applyAlpha(ai,
+                                               &xo_,
+                                               &yo_,
+                                               &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertDL3Ato3A(const FrameConvertParameters &fc,
+                             const AkVideoPacket &src,
+                             AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_y = fc.integralImageDataY + yOffset;
+                auto src_line_z = fc.integralImageDataZ + yOffset;
+                auto src_line_a = fc.integralImageDataA + yOffset;
+
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+                auto src_line_y_1 = fc.integralImageDataY + y1Offset;
+                auto src_line_z_1 = fc.integralImageDataZ + y1Offset;
+                auto src_line_a_1 = fc.integralImageDataA + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+                    auto yi = (src_line_y[xs] + src_line_y_1[xs_1] - src_line_y[xs_1] - src_line_y_1[xs]) / k;
+                    auto zi = (src_line_z[xs] + src_line_z_1[xs_1] - src_line_z[xs_1] - src_line_z_1[xs]) / k;
+                    auto ai = (src_line_a[xs] + src_line_a_1[xs_1] - src_line_a[xs_1] - src_line_a_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyMatrix(xi,
+                                                yi,
+                                                zi,
+                                                &xo_,
+                                                &yo_,
+                                                &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = (*ao & OutputType(fc.maskAo)) | (OutputType(ai) << fc.aoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        // Conversion functions for 3 components to 3 components formats
+        // (same color space)
+
+        template <typename InputType, typename OutputType>
+        void convertDLV3to3(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_y = fc.integralImageDataY + yOffset;
+                auto src_line_z = fc.integralImageDataZ + yOffset;
+
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+                auto src_line_y_1 = fc.integralImageDataY + y1Offset;
+                auto src_line_z_1 = fc.integralImageDataZ + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+                    auto yi = (src_line_y[xs] + src_line_y_1[xs_1] - src_line_y[xs_1] - src_line_y_1[xs]) / k;
+                    auto zi = (src_line_z[xs] + src_line_z_1[xs_1] - src_line_z[xs_1] - src_line_z_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyVector(xi,
+                                                yi,
+                                                zi,
+                                                &xo_,
+                                                &yo_,
+                                                &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertDLV3to3A(const FrameConvertParameters &fc,
+                             const AkVideoPacket &src,
+                             AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_y = fc.integralImageDataY + yOffset;
+                auto src_line_z = fc.integralImageDataZ + yOffset;
+
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+                auto src_line_y_1 = fc.integralImageDataY + y1Offset;
+                auto src_line_z_1 = fc.integralImageDataZ + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+                    auto yi = (src_line_y[xs] + src_line_y_1[xs_1] - src_line_y[xs_1] - src_line_y_1[xs]) / k;
+                    auto zi = (src_line_z[xs] + src_line_z_1[xs_1] - src_line_z[xs_1] - src_line_z_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyVector(xi,
+                                                yi,
+                                                zi,
+                                                &xo_,
+                                                &yo_,
+                                                &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = *ao | OutputType(fc.alphaMask);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertDLV3Ato3(const FrameConvertParameters &fc,
+                             const AkVideoPacket &src,
+                             AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_y = fc.integralImageDataY + yOffset;
+                auto src_line_z = fc.integralImageDataZ + yOffset;
+                auto src_line_a = fc.integralImageDataA + yOffset;
+
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+                auto src_line_y_1 = fc.integralImageDataY + y1Offset;
+                auto src_line_z_1 = fc.integralImageDataZ + y1Offset;
+                auto src_line_a_1 = fc.integralImageDataA + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+                    auto yi = (src_line_y[xs] + src_line_y_1[xs_1] - src_line_y[xs_1] - src_line_y_1[xs]) / k;
+                    auto zi = (src_line_z[xs] + src_line_z_1[xs_1] - src_line_z[xs_1] - src_line_z_1[xs]) / k;
+                    auto ai = (src_line_a[xs] + src_line_a_1[xs_1] - src_line_a[xs_1] - src_line_a_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyVector(xi,
+                                                yi,
+                                                zi,
+                                                &xo_,
+                                                &yo_,
+                                                &zo_);
+                    fc.colorConvert.applyAlpha(ai,
+                                               &xo_,
+                                               &yo_,
+                                               &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertDLV3Ato3A(const FrameConvertParameters &fc,
+                              const AkVideoPacket &src,
+                              AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_y = fc.integralImageDataY + yOffset;
+                auto src_line_z = fc.integralImageDataZ + yOffset;
+                auto src_line_a = fc.integralImageDataA + yOffset;
+
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+                auto src_line_y_1 = fc.integralImageDataY + y1Offset;
+                auto src_line_z_1 = fc.integralImageDataZ + y1Offset;
+                auto src_line_a_1 = fc.integralImageDataA + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+                    auto yi = (src_line_y[xs] + src_line_y_1[xs_1] - src_line_y[xs_1] - src_line_y_1[xs]) / k;
+                    auto zi = (src_line_z[xs] + src_line_z_1[xs_1] - src_line_z[xs_1] - src_line_z_1[xs]) / k;
+                    auto ai = (src_line_a[xs] + src_line_a_1[xs_1] - src_line_a[xs_1] - src_line_a_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyVector(xi,
+                                                yi,
+                                                zi,
+                                                &xo_,
+                                                &yo_,
+                                                &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = (*ao & OutputType(fc.maskAo)) | (OutputType(ai) << fc.aoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        // Conversion functions for 3 components to 1 components formats
+
+        template <typename InputType, typename OutputType>
+        void convertDL3to1(const FrameConvertParameters &fc,
+                           const AkVideoPacket &src,
+                           AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_y = fc.integralImageDataY + yOffset;
+                auto src_line_z = fc.integralImageDataZ + yOffset;
+
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+                auto src_line_y_1 = fc.integralImageDataY + y1Offset;
+                auto src_line_z_1 = fc.integralImageDataZ + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y);
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+                    auto yi = (src_line_y[xs] + src_line_y_1[xs_1] - src_line_y[xs_1] - src_line_y_1[xs]) / k;
+                    auto zi = (src_line_z[xs] + src_line_z_1[xs_1] - src_line_z[xs_1] - src_line_z_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xi, yi, zi, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *xo = this->swapBytes(OutputType(*xo), fc.toEndian);
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertDL3to1A(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_y = fc.integralImageDataY + yOffset;
+                auto src_line_z = fc.integralImageDataZ + yOffset;
+
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+                auto src_line_y_1 = fc.integralImageDataY + y1Offset;
+                auto src_line_z_1 = fc.integralImageDataZ + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+                    auto yi = (src_line_y[xs] + src_line_y_1[xs_1] - src_line_y[xs_1] - src_line_y_1[xs]) / k;
+                    auto zi = (src_line_z[xs] + src_line_z_1[xs_1] - src_line_z[xs_1] - src_line_z_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xi, yi, zi, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *ao = *ao | OutputType(fc.alphaMask);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *ao = aot;
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertDL3Ato1(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_y = fc.integralImageDataY + yOffset;
+                auto src_line_z = fc.integralImageDataZ + yOffset;
+                auto src_line_a = fc.integralImageDataA + yOffset;
+
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+                auto src_line_y_1 = fc.integralImageDataY + y1Offset;
+                auto src_line_z_1 = fc.integralImageDataZ + y1Offset;
+                auto src_line_a_1 = fc.integralImageDataA + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y);
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+                    auto yi = (src_line_y[xs] + src_line_y_1[xs_1] - src_line_y[xs_1] - src_line_y_1[xs]) / k;
+                    auto zi = (src_line_z[xs] + src_line_z_1[xs_1] - src_line_z[xs_1] - src_line_z_1[xs]) / k;
+                    auto ai = (src_line_a[xs] + src_line_a_1[xs_1] - src_line_a[xs_1] - src_line_a_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xi, yi, zi, &xo_);
+                    fc.colorConvert.applyAlpha(ai, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *xo = this->swapBytes(OutputType(*xo), fc.toEndian);
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertDL3Ato1A(const FrameConvertParameters &fc,
+                             const AkVideoPacket &src,
+                             AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_y = fc.integralImageDataY + yOffset;
+                auto src_line_z = fc.integralImageDataZ + yOffset;
+                auto src_line_a = fc.integralImageDataA + yOffset;
+
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+                auto src_line_y_1 = fc.integralImageDataY + y1Offset;
+                auto src_line_z_1 = fc.integralImageDataZ + y1Offset;
+                auto src_line_a_1 = fc.integralImageDataA + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+                    auto yi = (src_line_y[xs] + src_line_y_1[xs_1] - src_line_y[xs_1] - src_line_y_1[xs]) / k;
+                    auto zi = (src_line_z[xs] + src_line_z_1[xs_1] - src_line_z[xs_1] - src_line_z_1[xs]) / k;
+                    auto ai = (src_line_a[xs] + src_line_a_1[xs_1] - src_line_a[xs_1] - src_line_a_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xi, yi, zi, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *ao = (*ao & OutputType(fc.maskAo)) | (OutputType(ai) << fc.aoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *ao = aot;
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        // Conversion functions for 1 components to 3 components formats
+
+        template <typename InputType, typename OutputType>
+        void convertDL1to3(const FrameConvertParameters &fc,
+                           const AkVideoPacket &src,
+                           AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyPoint(xi, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertDL1to3A(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyPoint(xi, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = *ao | OutputType(fc.alphaMask);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertDL1Ato3(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_a = fc.integralImageDataA + yOffset;
+
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+                auto src_line_a_1 = fc.integralImageDataA + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+                    auto ai = (src_line_a[xs] + src_line_a_1[xs_1] - src_line_a[xs_1] - src_line_a_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyPoint(xi, &xo_, &yo_, &zo_);
+                    fc.colorConvert.applyAlpha(ai, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertDL1Ato3A(const FrameConvertParameters &fc,
+                             const AkVideoPacket &src,
+                             AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_a = fc.integralImageDataA + yOffset;
+
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+                auto src_line_a_1 = fc.integralImageDataA + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+                    auto ai = (src_line_a[xs] + src_line_a_1[xs_1] - src_line_a[xs_1] - src_line_a_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyPoint(xi, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = (*ao & OutputType(fc.maskAo)) | (OutputType(ai) << fc.aoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        // Conversion functions for 1 components to 1 components formats
+
+        template <typename InputType, typename OutputType>
+        void convertDL1to1(const FrameConvertParameters &fc,
+                           const AkVideoPacket &src,
+                           AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xi, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *xo = this->swapBytes(OutputType(*xo), fc.toEndian);
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertDL1to1A(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xi, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *ao = *ao | OutputType(fc.alphaMask);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *ao = aot;
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertDL1Ato1(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_a = fc.integralImageDataA + yOffset;
+
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+                auto src_line_a_1 = fc.integralImageDataA + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+                    auto ai = (src_line_a[xs] + src_line_a_1[xs_1] - src_line_a[xs_1] - src_line_a_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xi, &xo_);
+                    fc.colorConvert.applyAlpha(ai, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *xo = this->swapBytes(OutputType(*xo), fc.toEndian);
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertDL1Ato1A(const FrameConvertParameters &fc,
+                             const AkVideoPacket &src,
+                             AkVideoPacket &dst) const
+        {
+            auto kdl = fc.kdl;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &yOffset = fc.srcHeightDlOffset[y];
+                auto &y1Offset = fc.srcHeightDlOffset_1[y];
+
+                auto src_line_x = fc.integralImageDataX + yOffset;
+                auto src_line_a = fc.integralImageDataA + yOffset;
+
+                auto src_line_x_1 = fc.integralImageDataX + y1Offset;
+                auto src_line_a_1 = fc.integralImageDataA + y1Offset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    auto &xs = fc.srcWidth[x];
+                    auto &xs_1 = fc.srcWidth_1[x];
+                    auto &k = kdl[x];
+
+                    auto xi = (src_line_x[xs] + src_line_x_1[xs_1] - src_line_x[xs_1] - src_line_x_1[xs]) / k;
+                    auto ai = (src_line_a[xs] + src_line_a_1[xs_1] - src_line_a[xs_1] - src_line_a_1[xs]) / k;
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xi, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *ao = (*ao & OutputType(fc.maskAo)) | (OutputType(ai) << fc.aoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *ao = aot;
+                }
+
+                kdl += fc.inputWidth;
+            }
+        }
+
+        /* Linear upscaling conversion funtions */
+
+        // Conversion functions for 3 components to 3 components formats
+
+        template <typename InputType, typename OutputType>
+        void convertUL3to3(const FrameConvertParameters &fc,
+                           const AkVideoPacket &src,
+                           AkVideoPacket &dst) const
+        {
+            qint64 xyzi[3];
+            qint64 xyzi_x[3];
+            qint64 xyzi_y[3];
+            qint64 xyzib[3];
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+                auto src_line_y_1 = src.constLine(fc.planeYi, ys_1) + fc.yiOffset;
+                auto src_line_z_1 = src.constLine(fc.planeZi, ys_1) + fc.ziOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+                    int &xs_y_1 = fc.srcWidthOffsetY_1[x];
+                    int &xs_z_1 = fc.srcWidthOffsetZ_1[x];
+
+                    xyzi[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xyzi[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    xyzi[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    xyzi_x[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    xyzi_x[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y_1);
+                    xyzi_x[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z_1);
+                    xyzi_y[0] = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+                    xyzi_y[1] = *reinterpret_cast<const InputType *>(src_line_y_1 + xs_y);
+                    xyzi_y[2] = *reinterpret_cast<const InputType *>(src_line_z_1 + xs_z);
+
+                    xyzi[0] = (this->swapBytes(InputType(xyzi[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi[1] = (this->swapBytes(InputType(xyzi[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi[2] = (this->swapBytes(InputType(xyzi[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzi_x[0] = (this->swapBytes(InputType(xyzi_x[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi_x[1] = (this->swapBytes(InputType(xyzi_x[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi_x[2] = (this->swapBytes(InputType(xyzi_x[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzi_y[0] = (this->swapBytes(InputType(xyzi_y[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi_y[1] = (this->swapBytes(InputType(xyzi_y[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi_y[2] = (this->swapBytes(InputType(xyzi_y[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+
+                    this->blend3<SCALE_EMULT>(xyzi,
+                                              xyzi_x, xyzi_y,
+                                              fc.kx[x], ky,
+                                              xyzib);
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyMatrix(xyzib[0],
+                                                xyzib[1],
+                                                xyzib[2],
+                                                &xo_,
+                                                &yo_,
+                                                &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertUL3to3A(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            qint64 xyzi[3];
+            qint64 xyzi_x[3];
+            qint64 xyzi_y[3];
+            qint64 xyzib[3];
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+                auto src_line_y_1 = src.constLine(fc.planeYi, ys_1) + fc.yiOffset;
+                auto src_line_z_1 = src.constLine(fc.planeZi, ys_1) + fc.ziOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+                    int &xs_y_1 = fc.srcWidthOffsetY_1[x];
+                    int &xs_z_1 = fc.srcWidthOffsetZ_1[x];
+
+                    xyzi[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xyzi[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    xyzi[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    xyzi_x[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    xyzi_x[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y_1);
+                    xyzi_x[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z_1);
+                    xyzi_y[0] = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+                    xyzi_y[1] = *reinterpret_cast<const InputType *>(src_line_y_1 + xs_y);
+                    xyzi_y[2] = *reinterpret_cast<const InputType *>(src_line_z_1 + xs_z);
+
+                    xyzi[0] = (this->swapBytes(InputType(xyzi[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi[1] = (this->swapBytes(InputType(xyzi[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi[2] = (this->swapBytes(InputType(xyzi[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzi_x[0] = (this->swapBytes(InputType(xyzi_x[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi_x[1] = (this->swapBytes(InputType(xyzi_x[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi_x[2] = (this->swapBytes(InputType(xyzi_x[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzi_y[0] = (this->swapBytes(InputType(xyzi_y[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi_y[1] = (this->swapBytes(InputType(xyzi_y[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi_y[2] = (this->swapBytes(InputType(xyzi_y[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+
+                    this->blend3<SCALE_EMULT>(xyzi,
+                                              xyzi_x, xyzi_y,
+                                              fc.kx[x], ky,
+                                              xyzib);
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyMatrix(xyzib[0],
+                                                xyzib[1],
+                                                xyzib[2],
+                                                &xo_,
+                                                &yo_,
+                                                &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = *ao | OutputType(fc.alphaMask);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertUL3Ato3(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            qint64 xyzai[4];
+            qint64 xyzai_x[4];
+            qint64 xyzai_y[4];
+            qint64 xyzaib[4];
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+                auto src_line_y_1 = src.constLine(fc.planeYi, ys_1) + fc.yiOffset;
+                auto src_line_z_1 = src.constLine(fc.planeZi, ys_1) + fc.ziOffset;
+                auto src_line_a_1 = src.constLine(fc.planeAi, ys_1) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+                    int &xs_y_1 = fc.srcWidthOffsetY_1[x];
+                    int &xs_z_1 = fc.srcWidthOffsetZ_1[x];
+                    int &xs_a_1 = fc.srcWidthOffsetA_1[x];
+
+                    xyzai[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xyzai[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    xyzai[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    xyzai[3] = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+                    xyzai_x[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    xyzai_x[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y_1);
+                    xyzai_x[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z_1);
+                    xyzai_x[3] = *reinterpret_cast<const InputType *>(src_line_a + xs_a_1);
+                    xyzai_y[0] = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+                    xyzai_y[1] = *reinterpret_cast<const InputType *>(src_line_y_1 + xs_y);
+                    xyzai_y[2] = *reinterpret_cast<const InputType *>(src_line_z_1 + xs_z);
+                    xyzai_y[3] = *reinterpret_cast<const InputType *>(src_line_a_1 + xs_a);
+
+                    xyzai[0] = (this->swapBytes(InputType(xyzai[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai[1] = (this->swapBytes(InputType(xyzai[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai[2] = (this->swapBytes(InputType(xyzai[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai[3] = (this->swapBytes(InputType(xyzai[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xyzai_x[0] = (this->swapBytes(InputType(xyzai_x[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai_x[1] = (this->swapBytes(InputType(xyzai_x[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai_x[2] = (this->swapBytes(InputType(xyzai_x[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai_x[3] = (this->swapBytes(InputType(xyzai_x[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xyzai_y[0] = (this->swapBytes(InputType(xyzai_y[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai_y[1] = (this->swapBytes(InputType(xyzai_y[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai_y[2] = (this->swapBytes(InputType(xyzai_y[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai_y[3] = (this->swapBytes(InputType(xyzai_y[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    this->blend4<SCALE_EMULT>(xyzai,
+                                              xyzai_x, xyzai_y,
+                                              fc.kx[x], ky,
+                                              xyzaib);
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyMatrix(xyzaib[0],
+                                                xyzaib[1],
+                                                xyzaib[2],
+                                                &xo_,
+                                                &yo_,
+                                                &zo_);
+                    fc.colorConvert.applyAlpha(xyzaib[3],
+                                               &xo_,
+                                               &yo_,
+                                               &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertUL3Ato3A(const FrameConvertParameters &fc,
+                             const AkVideoPacket &src,
+                             AkVideoPacket &dst) const
+        {
+            qint64 xyzai[4];
+            qint64 xyzai_x[4];
+            qint64 xyzai_y[4];
+            qint64 xyzaib[4];
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+                auto src_line_y_1 = src.constLine(fc.planeYi, ys_1) + fc.yiOffset;
+                auto src_line_z_1 = src.constLine(fc.planeZi, ys_1) + fc.ziOffset;
+                auto src_line_a_1 = src.constLine(fc.planeAi, ys_1) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+                    int &xs_y_1 = fc.srcWidthOffsetY_1[x];
+                    int &xs_z_1 = fc.srcWidthOffsetZ_1[x];
+                    int &xs_a_1 = fc.srcWidthOffsetA_1[x];
+
+                    xyzai[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xyzai[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    xyzai[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    xyzai[3] = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+                    xyzai_x[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    xyzai_x[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y_1);
+                    xyzai_x[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z_1);
+                    xyzai_x[3] = *reinterpret_cast<const InputType *>(src_line_a + xs_a_1);
+                    xyzai_y[0] = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+                    xyzai_y[1] = *reinterpret_cast<const InputType *>(src_line_y_1 + xs_y);
+                    xyzai_y[2] = *reinterpret_cast<const InputType *>(src_line_z_1 + xs_z);
+                    xyzai_y[3] = *reinterpret_cast<const InputType *>(src_line_a_1 + xs_a);
+
+                    xyzai[0] = (this->swapBytes(InputType(xyzai[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai[1] = (this->swapBytes(InputType(xyzai[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai[2] = (this->swapBytes(InputType(xyzai[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai[3] = (this->swapBytes(InputType(xyzai[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xyzai_x[0] = (this->swapBytes(InputType(xyzai_x[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai_x[1] = (this->swapBytes(InputType(xyzai_x[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai_x[2] = (this->swapBytes(InputType(xyzai_x[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai_x[3] = (this->swapBytes(InputType(xyzai_x[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xyzai_y[0] = (this->swapBytes(InputType(xyzai_y[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai_y[1] = (this->swapBytes(InputType(xyzai_y[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai_y[2] = (this->swapBytes(InputType(xyzai_y[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai_y[3] = (this->swapBytes(InputType(xyzai_y[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    this->blend4<SCALE_EMULT>(xyzai,
+                                              xyzai_x, xyzai_y,
+                                              fc.kx[x], ky,
+                                              xyzaib);
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyMatrix(xyzaib[0],
+                                                xyzaib[1],
+                                                xyzaib[2],
+                                                &xo_,
+                                                &yo_,
+                                                &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = (*ao & OutputType(fc.maskAo)) | (OutputType(xyzaib[3]) << fc.aoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        // Conversion functions for 3 components to 3 components formats
+        // (same color space)
+
+        template <typename InputType, typename OutputType>
+        void convertULV3to3(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            qint64 xyzi[3];
+            qint64 xyzi_x[3];
+            qint64 xyzi_y[3];
+            qint64 xyzib[3];
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+                auto src_line_y_1 = src.constLine(fc.planeYi, ys_1) + fc.yiOffset;
+                auto src_line_z_1 = src.constLine(fc.planeZi, ys_1) + fc.ziOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+                    int &xs_y_1 = fc.srcWidthOffsetY_1[x];
+                    int &xs_z_1 = fc.srcWidthOffsetZ_1[x];
+
+                    xyzi[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xyzi[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    xyzi[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    xyzi_x[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    xyzi_x[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y_1);
+                    xyzi_x[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z_1);
+                    xyzi_y[0] = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+                    xyzi_y[1] = *reinterpret_cast<const InputType *>(src_line_y_1 + xs_y);
+                    xyzi_y[2] = *reinterpret_cast<const InputType *>(src_line_z_1 + xs_z);
+
+                    xyzi[0] = (this->swapBytes(InputType(xyzi[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi[1] = (this->swapBytes(InputType(xyzi[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi[2] = (this->swapBytes(InputType(xyzi[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzi_x[0] = (this->swapBytes(InputType(xyzi_x[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi_x[1] = (this->swapBytes(InputType(xyzi_x[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi_x[2] = (this->swapBytes(InputType(xyzi_x[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzi_y[0] = (this->swapBytes(InputType(xyzi_y[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi_y[1] = (this->swapBytes(InputType(xyzi_y[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi_y[2] = (this->swapBytes(InputType(xyzi_y[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+
+                    this->blend3<SCALE_EMULT>(xyzi,
+                                              xyzi_x, xyzi_y,
+                                              fc.kx[x], ky,
+                                              xyzib);
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyVector(xyzib[0],
+                                                xyzib[1],
+                                                xyzib[2],
+                                                &xo_,
+                                                &yo_,
+                                                &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertULV3to3A(const FrameConvertParameters &fc,
+                             const AkVideoPacket &src,
+                             AkVideoPacket &dst) const
+        {
+            qint64 xyzi[3];
+            qint64 xyzi_x[3];
+            qint64 xyzi_y[3];
+            qint64 xyzib[3];
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+                auto src_line_y_1 = src.constLine(fc.planeYi, ys_1) + fc.yiOffset;
+                auto src_line_z_1 = src.constLine(fc.planeZi, ys_1) + fc.ziOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+                    int &xs_y_1 = fc.srcWidthOffsetY_1[x];
+                    int &xs_z_1 = fc.srcWidthOffsetZ_1[x];
+
+                    xyzi[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xyzi[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    xyzi[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    xyzi_x[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    xyzi_x[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y_1);
+                    xyzi_x[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z_1);
+                    xyzi_y[0] = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+                    xyzi_y[1] = *reinterpret_cast<const InputType *>(src_line_y_1 + xs_y);
+                    xyzi_y[2] = *reinterpret_cast<const InputType *>(src_line_z_1 + xs_z);
+
+                    xyzi[0] = (this->swapBytes(InputType(xyzi[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi[1] = (this->swapBytes(InputType(xyzi[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi[2] = (this->swapBytes(InputType(xyzi[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzi_x[0] = (this->swapBytes(InputType(xyzi_x[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi_x[1] = (this->swapBytes(InputType(xyzi_x[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi_x[2] = (this->swapBytes(InputType(xyzi_x[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzi_y[0] = (this->swapBytes(InputType(xyzi_y[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi_y[1] = (this->swapBytes(InputType(xyzi_y[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi_y[2] = (this->swapBytes(InputType(xyzi_y[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+
+                    this->blend3<SCALE_EMULT>(xyzi,
+                                              xyzi_x, xyzi_y,
+                                              fc.kx[x], ky,
+                                              xyzib);
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyVector(xyzib[0],
+                                                xyzib[1],
+                                                xyzib[2],
+                                                &xo_,
+                                                &yo_,
+                                                &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = *ao | OutputType(fc.alphaMask);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertULV3Ato3(const FrameConvertParameters &fc,
+                             const AkVideoPacket &src,
+                             AkVideoPacket &dst) const
+        {
+            qint64 xyzai[4];
+            qint64 xyzai_x[4];
+            qint64 xyzai_y[4];
+            qint64 xyzaib[4];
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+                auto src_line_y_1 = src.constLine(fc.planeYi, ys_1) + fc.yiOffset;
+                auto src_line_z_1 = src.constLine(fc.planeZi, ys_1) + fc.ziOffset;
+                auto src_line_a_1 = src.constLine(fc.planeAi, ys_1) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+                    int &xs_y_1 = fc.srcWidthOffsetY_1[x];
+                    int &xs_z_1 = fc.srcWidthOffsetZ_1[x];
+                    int &xs_a_1 = fc.srcWidthOffsetA_1[x];
+
+                    xyzai[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xyzai[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    xyzai[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    xyzai[3] = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+                    xyzai_x[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    xyzai_x[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y_1);
+                    xyzai_x[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z_1);
+                    xyzai_x[3] = *reinterpret_cast<const InputType *>(src_line_a + xs_a_1);
+                    xyzai_y[0] = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+                    xyzai_y[1] = *reinterpret_cast<const InputType *>(src_line_y_1 + xs_y);
+                    xyzai_y[2] = *reinterpret_cast<const InputType *>(src_line_z_1 + xs_z);
+                    xyzai_y[3] = *reinterpret_cast<const InputType *>(src_line_a_1 + xs_a);
+
+                    xyzai[0] = (this->swapBytes(InputType(xyzai[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai[1] = (this->swapBytes(InputType(xyzai[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai[2] = (this->swapBytes(InputType(xyzai[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai[3] = (this->swapBytes(InputType(xyzai[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xyzai_x[0] = (this->swapBytes(InputType(xyzai_x[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai_x[1] = (this->swapBytes(InputType(xyzai_x[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai_x[2] = (this->swapBytes(InputType(xyzai_x[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai_x[3] = (this->swapBytes(InputType(xyzai_x[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xyzai_y[0] = (this->swapBytes(InputType(xyzai_y[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai_y[1] = (this->swapBytes(InputType(xyzai_y[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai_y[2] = (this->swapBytes(InputType(xyzai_y[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai_y[3] = (this->swapBytes(InputType(xyzai_y[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    this->blend4<SCALE_EMULT>(xyzai,
+                                              xyzai_x, xyzai_y,
+                                              fc.kx[x], ky,
+                                              xyzaib);
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyVector(xyzaib[0],
+                                                xyzaib[1],
+                                                xyzaib[2],
+                                                &xo_,
+                                                &yo_,
+                                                &zo_);
+                    fc.colorConvert.applyAlpha(xyzaib[3],
+                                               &xo_,
+                                               &yo_,
+                                               &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertULV3Ato3A(const FrameConvertParameters &fc,
+                              const AkVideoPacket &src,
+                              AkVideoPacket &dst) const
+        {
+            qint64 xyzai[4];
+            qint64 xyzai_x[4];
+            qint64 xyzai_y[4];
+            qint64 xyzaib[4];
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+                auto src_line_y_1 = src.constLine(fc.planeYi, ys_1) + fc.yiOffset;
+                auto src_line_z_1 = src.constLine(fc.planeZi, ys_1) + fc.ziOffset;
+                auto src_line_a_1 = src.constLine(fc.planeAi, ys_1) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+                    int &xs_y_1 = fc.srcWidthOffsetY_1[x];
+                    int &xs_z_1 = fc.srcWidthOffsetZ_1[x];
+                    int &xs_a_1 = fc.srcWidthOffsetA_1[x];
+
+                    xyzai[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xyzai[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    xyzai[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    xyzai[3] = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+                    xyzai_x[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    xyzai_x[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y_1);
+                    xyzai_x[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z_1);
+                    xyzai_x[3] = *reinterpret_cast<const InputType *>(src_line_a + xs_a_1);
+                    xyzai_y[0] = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+                    xyzai_y[1] = *reinterpret_cast<const InputType *>(src_line_y_1 + xs_y);
+                    xyzai_y[2] = *reinterpret_cast<const InputType *>(src_line_z_1 + xs_z);
+                    xyzai_y[3] = *reinterpret_cast<const InputType *>(src_line_a_1 + xs_a);
+
+                    xyzai[0] = (this->swapBytes(InputType(xyzai[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai[1] = (this->swapBytes(InputType(xyzai[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai[2] = (this->swapBytes(InputType(xyzai[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai[3] = (this->swapBytes(InputType(xyzai[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xyzai_x[0] = (this->swapBytes(InputType(xyzai_x[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai_x[1] = (this->swapBytes(InputType(xyzai_x[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai_x[2] = (this->swapBytes(InputType(xyzai_x[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai_x[3] = (this->swapBytes(InputType(xyzai_x[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xyzai_y[0] = (this->swapBytes(InputType(xyzai_y[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai_y[1] = (this->swapBytes(InputType(xyzai_y[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai_y[2] = (this->swapBytes(InputType(xyzai_y[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai_y[3] = (this->swapBytes(InputType(xyzai_y[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    this->blend4<SCALE_EMULT>(xyzai,
+                                              xyzai_x, xyzai_y,
+                                              fc.kx[x], ky,
+                                              xyzaib);
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyVector(xyzaib[0],
+                                                xyzaib[1],
+                                                xyzaib[2],
+                                                &xo_,
+                                                &yo_,
+                                                &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = (*ao & OutputType(fc.maskAo)) | (OutputType(xyzaib[3]) << fc.aoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        // Conversion functions for 3 components to 1 components formats
+
+        template <typename InputType, typename OutputType>
+        void convertUL3to1(const FrameConvertParameters &fc,
+                           const AkVideoPacket &src,
+                           AkVideoPacket &dst) const
+        {
+            qint64 xyzi[3];
+            qint64 xyzi_x[3];
+            qint64 xyzi_y[3];
+            qint64 xyzib[3];
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+                auto src_line_y_1 = src.constLine(fc.planeYi, ys_1) + fc.yiOffset;
+                auto src_line_z_1 = src.constLine(fc.planeZi, ys_1) + fc.ziOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y);
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+                    int &xs_y_1 = fc.srcWidthOffsetY_1[x];
+                    int &xs_z_1 = fc.srcWidthOffsetZ_1[x];
+
+                    xyzi[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xyzi[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    xyzi[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    xyzi_x[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    xyzi_x[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y_1);
+                    xyzi_x[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z_1);
+                    xyzi_y[0] = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+                    xyzi_y[1] = *reinterpret_cast<const InputType *>(src_line_y_1 + xs_y);
+                    xyzi_y[2] = *reinterpret_cast<const InputType *>(src_line_z_1 + xs_z);
+
+                    xyzi[0] = (this->swapBytes(InputType(xyzi[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi[1] = (this->swapBytes(InputType(xyzi[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi[2] = (this->swapBytes(InputType(xyzi[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzi_x[0] = (this->swapBytes(InputType(xyzi_x[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi_x[1] = (this->swapBytes(InputType(xyzi_x[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi_x[2] = (this->swapBytes(InputType(xyzi_x[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzi_y[0] = (this->swapBytes(InputType(xyzi_y[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi_y[1] = (this->swapBytes(InputType(xyzi_y[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi_y[2] = (this->swapBytes(InputType(xyzi_y[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+
+                    this->blend3<SCALE_EMULT>(xyzi,
+                                              xyzi_x, xyzi_y,
+                                              fc.kx[x], ky,
+                                              xyzib);
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xyzib[0],
+                                               xyzib[1],
+                                               xyzib[2],
+                                               &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *xo = this->swapBytes(OutputType(*xo), fc.toEndian);
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertUL3to1A(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            qint64 xyzi[3];
+            qint64 xyzi_x[3];
+            qint64 xyzi_y[3];
+            qint64 xyzib[3];
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+                auto src_line_y_1 = src.constLine(fc.planeYi, ys_1) + fc.yiOffset;
+                auto src_line_z_1 = src.constLine(fc.planeZi, ys_1) + fc.ziOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+                    int &xs_y_1 = fc.srcWidthOffsetY_1[x];
+                    int &xs_z_1 = fc.srcWidthOffsetZ_1[x];
+
+                    xyzi[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xyzi[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    xyzi[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    xyzi_x[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    xyzi_x[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y_1);
+                    xyzi_x[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z_1);
+                    xyzi_y[0] = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+                    xyzi_y[1] = *reinterpret_cast<const InputType *>(src_line_y_1 + xs_y);
+                    xyzi_y[2] = *reinterpret_cast<const InputType *>(src_line_z_1 + xs_z);
+
+                    xyzi[0] = (this->swapBytes(InputType(xyzi[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi[1] = (this->swapBytes(InputType(xyzi[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi[2] = (this->swapBytes(InputType(xyzi[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzi_x[0] = (this->swapBytes(InputType(xyzi_x[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi_x[1] = (this->swapBytes(InputType(xyzi_x[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi_x[2] = (this->swapBytes(InputType(xyzi_x[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzi_y[0] = (this->swapBytes(InputType(xyzi_y[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzi_y[1] = (this->swapBytes(InputType(xyzi_y[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzi_y[2] = (this->swapBytes(InputType(xyzi_y[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+
+                    this->blend3<SCALE_EMULT>(xyzi,
+                                              xyzi_x, xyzi_y,
+                                              fc.kx[x], ky,
+                                              xyzib);
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xyzib[0],
+                                               xyzib[1],
+                                               xyzib[2],
+                                               &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *ao = *ao | OutputType(fc.alphaMask);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertUL3Ato1(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            qint64 xyzai[4];
+            qint64 xyzai_x[4];
+            qint64 xyzai_y[4];
+            qint64 xyzaib[4];
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+                auto src_line_y_1 = src.constLine(fc.planeYi, ys_1) + fc.yiOffset;
+                auto src_line_z_1 = src.constLine(fc.planeZi, ys_1) + fc.ziOffset;
+                auto src_line_a_1 = src.constLine(fc.planeAi, ys_1) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y);
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+                    int &xs_y_1 = fc.srcWidthOffsetY_1[x];
+                    int &xs_z_1 = fc.srcWidthOffsetZ_1[x];
+                    int &xs_a_1 = fc.srcWidthOffsetA_1[x];
+
+                    xyzai[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xyzai[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    xyzai[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    xyzai[3] = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+                    xyzai_x[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    xyzai_x[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y_1);
+                    xyzai_x[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z_1);
+                    xyzai_x[3] = *reinterpret_cast<const InputType *>(src_line_a + xs_a_1);
+                    xyzai_y[0] = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+                    xyzai_y[1] = *reinterpret_cast<const InputType *>(src_line_y_1 + xs_y);
+                    xyzai_y[2] = *reinterpret_cast<const InputType *>(src_line_z_1 + xs_z);
+                    xyzai_y[3] = *reinterpret_cast<const InputType *>(src_line_a_1 + xs_a);
+
+                    xyzai[0] = (this->swapBytes(InputType(xyzai[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai[1] = (this->swapBytes(InputType(xyzai[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai[2] = (this->swapBytes(InputType(xyzai[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai[3] = (this->swapBytes(InputType(xyzai[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xyzai_x[0] = (this->swapBytes(InputType(xyzai_x[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai_x[1] = (this->swapBytes(InputType(xyzai_x[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai_x[2] = (this->swapBytes(InputType(xyzai_x[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai_x[3] = (this->swapBytes(InputType(xyzai_x[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xyzai_y[0] = (this->swapBytes(InputType(xyzai_y[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai_y[1] = (this->swapBytes(InputType(xyzai_y[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai_y[2] = (this->swapBytes(InputType(xyzai_y[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai_y[3] = (this->swapBytes(InputType(xyzai_y[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    this->blend4<SCALE_EMULT>(xyzai,
+                                              xyzai_x, xyzai_y,
+                                              fc.kx[x], ky,
+                                              xyzaib);
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xyzaib[0],
+                                               xyzaib[1],
+                                               xyzaib[2],
+                                               &xo_);
+                    fc.colorConvert.applyAlpha(xyzaib[3], &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *xo = this->swapBytes(OutputType(*xo), fc.toEndian);
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertUL3Ato1A(const FrameConvertParameters &fc,
+                             const AkVideoPacket &src,
+                             AkVideoPacket &dst) const
+        {
+            qint64 xyzai[4];
+            qint64 xyzai_x[4];
+            qint64 xyzai_y[4];
+            qint64 xyzaib[4];
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_y = src.constLine(fc.planeYi, ys) + fc.yiOffset;
+                auto src_line_z = src.constLine(fc.planeZi, ys) + fc.ziOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+                auto src_line_y_1 = src.constLine(fc.planeYi, ys_1) + fc.yiOffset;
+                auto src_line_z_1 = src.constLine(fc.planeZi, ys_1) + fc.ziOffset;
+                auto src_line_a_1 = src.constLine(fc.planeAi, ys_1) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_y = fc.srcWidthOffsetY[x];
+                    int &xs_z = fc.srcWidthOffsetZ[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+                    int &xs_y_1 = fc.srcWidthOffsetY_1[x];
+                    int &xs_z_1 = fc.srcWidthOffsetZ_1[x];
+                    int &xs_a_1 = fc.srcWidthOffsetA_1[x];
+
+                    xyzai[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xyzai[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y);
+                    xyzai[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z);
+                    xyzai[3] = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+                    xyzai_x[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    xyzai_x[1] = *reinterpret_cast<const InputType *>(src_line_y + xs_y_1);
+                    xyzai_x[2] = *reinterpret_cast<const InputType *>(src_line_z + xs_z_1);
+                    xyzai_x[3] = *reinterpret_cast<const InputType *>(src_line_a + xs_a_1);
+                    xyzai_y[0] = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+                    xyzai_y[1] = *reinterpret_cast<const InputType *>(src_line_y_1 + xs_y);
+                    xyzai_y[2] = *reinterpret_cast<const InputType *>(src_line_z_1 + xs_z);
+                    xyzai_y[3] = *reinterpret_cast<const InputType *>(src_line_a_1 + xs_a);
+
+                    xyzai[0] = (this->swapBytes(InputType(xyzai[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai[1] = (this->swapBytes(InputType(xyzai[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai[2] = (this->swapBytes(InputType(xyzai[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai[3] = (this->swapBytes(InputType(xyzai[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xyzai_x[0] = (this->swapBytes(InputType(xyzai_x[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai_x[1] = (this->swapBytes(InputType(xyzai_x[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai_x[2] = (this->swapBytes(InputType(xyzai_x[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai_x[3] = (this->swapBytes(InputType(xyzai_x[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xyzai_y[0] = (this->swapBytes(InputType(xyzai_y[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xyzai_y[1] = (this->swapBytes(InputType(xyzai_y[1]), fc.fromEndian) >> fc.yiShift) & fc.maxYi;
+                    xyzai_y[2] = (this->swapBytes(InputType(xyzai_y[2]), fc.fromEndian) >> fc.ziShift) & fc.maxZi;
+                    xyzai_y[3] = (this->swapBytes(InputType(xyzai_y[3]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    this->blend4<SCALE_EMULT>(xyzai,
+                                              xyzai_x, xyzai_y,
+                                              fc.kx[x], ky,
+                                              xyzaib);
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xyzaib[0],
+                                               xyzaib[1],
+                                               xyzaib[2],
+                                               &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *ao = (*ao & OutputType(fc.maskAo)) | (OutputType(xyzaib[3]) << fc.aoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        // Conversion functions for 1 components to 3 components formats
+
+        template <typename InputType, typename OutputType>
+        void convertUL1to3(const FrameConvertParameters &fc,
+                           const AkVideoPacket &src,
+                           AkVideoPacket &dst) const
+        {
+            qint64 xib = 0;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto xi_x = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    auto xi_y = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xi_x = (this->swapBytes(InputType(xi_x), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xi_y = (this->swapBytes(InputType(xi_y), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+
+                    this->blend<SCALE_EMULT>(xi,
+                                             xi_x, xi_y,
+                                             fc.kx[x], ky,
+                                             &xib);
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyPoint(xib, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertUL1to3A(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            qint64 xib = 0;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto xi_x = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    auto xi_y = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xi_x = (this->swapBytes(InputType(xi_x), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xi_y = (this->swapBytes(InputType(xi_y), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+
+                    this->blend<SCALE_EMULT>(xi,
+                                             xi_x, xi_y,
+                                             fc.kx[x], ky,
+                                             &xib);
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyPoint(xib, &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = *ao | OutputType(fc.alphaMask);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertUL1Ato3(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            qint64 xai[2];
+            qint64 xai_x[2];
+            qint64 xai_y[2];
+            qint64 xaib[2];
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+                auto src_line_a_1 = src.constLine(fc.planeAi, ys_1) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+                    int &xs_a_1 = fc.srcWidthOffsetA_1[x];
+
+                    xai[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xai[1] = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+                    xai_x[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    xai_x[1] = *reinterpret_cast<const InputType *>(src_line_a + xs_a_1);
+                    xai_y[0] = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+                    xai_y[1] = *reinterpret_cast<const InputType *>(src_line_a_1 + xs_a);
+
+                    xai[0] = (this->swapBytes(InputType(xai[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xai[1] = (this->swapBytes(InputType(xai[1]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xai_x[0] = (this->swapBytes(InputType(xai_x[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xai_x[1] = (this->swapBytes(InputType(xai_x[1]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xai_y[0] = (this->swapBytes(InputType(xai_y[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xai_y[1] = (this->swapBytes(InputType(xai_y[1]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    this->blend2<SCALE_EMULT>(xai,
+                                              xai_x, xai_y,
+                                              fc.kx[x], ky,
+                                              xaib);
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyPoint(xaib[0], &xo_, &yo_, &zo_);
+                    fc.colorConvert.applyAlpha(xaib[1], &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertUL1Ato3A(const FrameConvertParameters &fc,
+                             const AkVideoPacket &src,
+                             AkVideoPacket &dst) const
+        {
+            qint64 xai[2];
+            qint64 xai_x[2];
+            qint64 xai_y[2];
+            qint64 xaib[2];
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+                auto src_line_a_1 = src.constLine(fc.planeAi, ys_1) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_y = dst.line(fc.planeYo, y) + fc.yoOffset;
+                auto dst_line_z = dst.line(fc.planeZo, y) + fc.zoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+                    int &xs_a_1 = fc.srcWidthOffsetA_1[x];
+
+                    xai[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xai[1] = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+                    xai_x[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    xai_x[1] = *reinterpret_cast<const InputType *>(src_line_a + xs_a_1);
+                    xai_y[0] = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+                    xai_y[1] = *reinterpret_cast<const InputType *>(src_line_a_1 + xs_a);
+
+                    xai[0] = (this->swapBytes(InputType(xai[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xai[1] = (this->swapBytes(InputType(xai[1]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xai_x[0] = (this->swapBytes(InputType(xai_x[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xai_x[1] = (this->swapBytes(InputType(xai_x[1]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xai_y[0] = (this->swapBytes(InputType(xai_y[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xai_y[1] = (this->swapBytes(InputType(xai_y[1]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    this->blend2<SCALE_EMULT>(xai,
+                                              xai_x, xai_y,
+                                              fc.kx[x], ky,
+                                              xaib);
+
+                    qint64 xo_ = 0;
+                    qint64 yo_ = 0;
+                    qint64 zo_ = 0;
+                    fc.colorConvert.applyPoint(xaib[0], &xo_, &yo_, &zo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_y = fc.dstWidthOffsetY[x];
+                    int &xd_z = fc.dstWidthOffsetZ[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<OutputType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<OutputType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *yo = (*yo & OutputType(fc.maskYo)) | (OutputType(yo_) << fc.yoShift);
+                    *zo = (*zo & OutputType(fc.maskZo)) | (OutputType(zo_) << fc.zoShift);
+                    *ao = (*ao & OutputType(fc.maskAo)) | (OutputType(xaib[1]) << fc.aoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto yot = this->swapBytes(OutputType(*yo), fc.toEndian);
+                    auto zot = this->swapBytes(OutputType(*zo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        // Conversion functions for 1 components to 1 components formats
+
+        template <typename InputType, typename OutputType>
+        void convertUL1to1(const FrameConvertParameters &fc,
+                           const AkVideoPacket &src,
+                           AkVideoPacket &dst) const
+        {
+            qint64 xib = 0;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto xi_x = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    auto xi_y = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xi_x = (this->swapBytes(InputType(xi_x), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xi_y = (this->swapBytes(InputType(xi_y), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+
+                    this->blend<SCALE_EMULT>(xi,
+                                             xi_x, xi_y,
+                                             fc.kx[x], ky,
+                                             &xib);
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xib, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *xo = this->swapBytes(OutputType(*xo), fc.toEndian);
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertUL1to1A(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            qint64 xib = 0;
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+
+                    auto xi = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    auto xi_x = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    auto xi_y = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+
+                    xi = (this->swapBytes(InputType(xi), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xi_x = (this->swapBytes(InputType(xi_x), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xi_y = (this->swapBytes(InputType(xi_y), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+
+                    this->blend<SCALE_EMULT>(xi,
+                                             xi_x, xi_y,
+                                             fc.kx[x], ky,
+                                             &xib);
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xib, &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *ao = *ao | OutputType(fc.alphaMask);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertUL1Ato1(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst) const
+        {
+            qint64 xai[2];
+            qint64 xai_x[2];
+            qint64 xai_y[2];
+            qint64 xaib[2];
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+                auto src_line_a_1 = src.constLine(fc.planeAi, ys_1) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+                    int &xs_a_1 = fc.srcWidthOffsetA_1[x];
+
+                    xai[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xai[1] = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+                    xai_x[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    xai_x[1] = *reinterpret_cast<const InputType *>(src_line_a + xs_a_1);
+                    xai_y[0] = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+                    xai_y[1] = *reinterpret_cast<const InputType *>(src_line_a_1 + xs_a);
+
+                    xai[0] = (this->swapBytes(InputType(xai[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xai[1] = (this->swapBytes(InputType(xai[1]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xai_x[0] = (this->swapBytes(InputType(xai_x[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xai_x[1] = (this->swapBytes(InputType(xai_x[1]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xai_y[0] = (this->swapBytes(InputType(xai_y[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xai_y[1] = (this->swapBytes(InputType(xai_y[1]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    this->blend2<SCALE_EMULT>(xai,
+                                              xai_x, xai_y,
+                                              fc.kx[x], ky,
+                                              xaib);
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xaib[0], &xo_);
+                    fc.colorConvert.applyAlpha(xaib[1], &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *xo = this->swapBytes(OutputType(*xo), fc.toEndian);
+                }
+            }
+        }
+
+        template <typename InputType, typename OutputType>
+        void convertUL1Ato1A(const FrameConvertParameters &fc,
+                             const AkVideoPacket &src,
+                             AkVideoPacket &dst) const
+        {
+            qint64 xai[2];
+            qint64 xai_x[2];
+            qint64 xai_y[2];
+            qint64 xaib[2];
+
+            for (int y = 0; y < fc.outputHeight; ++y) {
+                auto &ys = fc.srcHeight[y];
+                auto &ys_1 = fc.srcHeight_1[y];
+
+                auto src_line_x = src.constLine(fc.planeXi, ys) + fc.xiOffset;
+                auto src_line_a = src.constLine(fc.planeAi, ys) + fc.aiOffset;
+                auto src_line_x_1 = src.constLine(fc.planeXi, ys_1) + fc.xiOffset;
+                auto src_line_a_1 = src.constLine(fc.planeAi, ys_1) + fc.aiOffset;
+
+                auto dst_line_x = dst.line(fc.planeXo, y) + fc.xoOffset;
+                auto dst_line_a = dst.line(fc.planeAo, y) + fc.aoOffset;
+
+                auto &ky = fc.ky[y];
+
+                for (int x = 0; x < fc.outputWidth; ++x) {
+                    int &xs_x = fc.srcWidthOffsetX[x];
+                    int &xs_a = fc.srcWidthOffsetA[x];
+
+                    int &xs_x_1 = fc.srcWidthOffsetX_1[x];
+                    int &xs_a_1 = fc.srcWidthOffsetA_1[x];
+
+                    xai[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x);
+                    xai[1] = *reinterpret_cast<const InputType *>(src_line_a + xs_a);
+                    xai_x[0] = *reinterpret_cast<const InputType *>(src_line_x + xs_x_1);
+                    xai_x[1] = *reinterpret_cast<const InputType *>(src_line_a + xs_a_1);
+                    xai_y[0] = *reinterpret_cast<const InputType *>(src_line_x_1 + xs_x);
+                    xai_y[1] = *reinterpret_cast<const InputType *>(src_line_a_1 + xs_a);
+
+                    xai[0] = (this->swapBytes(InputType(xai[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xai[1] = (this->swapBytes(InputType(xai[1]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xai_x[0] = (this->swapBytes(InputType(xai_x[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xai_x[1] = (this->swapBytes(InputType(xai_x[1]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+                    xai_y[0] = (this->swapBytes(InputType(xai_y[0]), fc.fromEndian) >> fc.xiShift) & fc.maxXi;
+                    xai_y[1] = (this->swapBytes(InputType(xai_y[1]), fc.fromEndian) >> fc.aiShift) & fc.maxAi;
+
+                    this->blend2<SCALE_EMULT>(xai,
+                                              xai_x, xai_y,
+                                              fc.kx[x], ky,
+                                              xaib);
+
+                    qint64 xo_ = 0;
+                    fc.colorConvert.applyPoint(xaib[0], &xo_);
+
+                    int &xd_x = fc.dstWidthOffsetX[x];
+                    int &xd_a = fc.dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<OutputType *>(dst_line_x + xd_x);
+                    auto ao = reinterpret_cast<OutputType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & OutputType(fc.maskXo)) | (OutputType(xo_) << fc.xoShift);
+                    *ao = (*ao & OutputType(fc.maskAo)) | (OutputType(xaib[1]) << fc.aoShift);
+
+                    auto xot = this->swapBytes(OutputType(*xo), fc.toEndian);
+                    auto aot = this->swapBytes(OutputType(*ao), fc.toEndian);
+
+                    *xo = xot;
+                    *ao = aot;
+                }
+            }
+        }
+
+#define CONVERT_FUNC(icomponents, ocomponents) \
+        template <typename InputType, typename OutputType> \
+        inline void convertFormat##icomponents##to##ocomponents(const FrameConvertParameters &fc, \
+                                                                const AkVideoPacket &src, \
+                                                                AkVideoPacket &dst) const \
+        { \
+            switch (fc.alphaMode) { \
+            case AlphaMode_AI_AO: \
+                this->convert##icomponents##Ato##ocomponents##A<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_AI_O: \
+                this->convert##icomponents##Ato##ocomponents<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_I_AO: \
+                this->convert##icomponents##to##ocomponents##A<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_I_O: \
+                this->convert##icomponents##to##ocomponents<InputType, OutputType>(fc, src, dst); \
+                break; \
+            }; \
+        }
+
+#define CONVERTV_FUNC(icomponents, ocomponents) \
+        template <typename InputType, typename OutputType> \
+        inline void convertVFormat##icomponents##to##ocomponents(const FrameConvertParameters &fc, \
+                                                                 const AkVideoPacket &src, \
+                                                                 AkVideoPacket &dst) const \
+        { \
+            switch (fc.alphaMode) { \
+            case AlphaMode_AI_AO: \
+                this->convertV##icomponents##Ato##ocomponents##A<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_AI_O: \
+                this->convertV##icomponents##Ato##ocomponents<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_I_AO: \
+                this->convertV##icomponents##to##ocomponents##A<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_I_O: \
+                this->convertV##icomponents##to##ocomponents<InputType, OutputType>(fc, src, dst); \
+                break; \
+            }; \
+        }
+
+#define CONVERTDL_FUNC(icomponents, ocomponents) \
+        template <typename InputType, typename OutputType> \
+        inline void convertDLFormat##icomponents##to##ocomponents(const FrameConvertParameters &fc, \
+                                                                  const AkVideoPacket &src, \
+                                                                  AkVideoPacket &dst) const \
+        { \
+            switch (fc.alphaMode) { \
+            case AlphaMode_AI_AO: \
+            case AlphaMode_AI_O: \
+                this->integralImage##icomponents##A<InputType>(fc, src); \
+                break; \
+            default: \
+                this->integralImage##icomponents<InputType>(fc, src); \
+                break; \
+            } \
+            \
+            switch (fc.alphaMode) { \
+            case AlphaMode_AI_AO: \
+                this->convertDL##icomponents##Ato##ocomponents##A<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_AI_O: \
+                this->convertDL##icomponents##Ato##ocomponents<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_I_AO: \
+                this->convertDL##icomponents##to##ocomponents##A<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_I_O: \
+                this->convertDL##icomponents##to##ocomponents<InputType, OutputType>(fc, src, dst); \
+                break; \
+            }; \
+        }
+
+#define CONVERTDLV_FUNC(icomponents, ocomponents) \
+        template <typename InputType, typename OutputType> \
+        inline void convertDLVFormat##icomponents##to##ocomponents(const FrameConvertParameters &fc, \
+                                                                   const AkVideoPacket &src, \
+                                                                   AkVideoPacket &dst) const \
+        { \
+            switch (fc.alphaMode) { \
+            case AlphaMode_AI_AO: \
+            case AlphaMode_AI_O: \
+                this->integralImage##icomponents##A<InputType>(fc, src); \
+                break; \
+            default: \
+                this->integralImage##icomponents<InputType>(fc, src); \
+                break; \
+            } \
+            \
+            switch (fc.alphaMode) { \
+            case AlphaMode_AI_AO: \
+                this->convertDLV##icomponents##Ato##ocomponents##A<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_AI_O: \
+                this->convertDLV##icomponents##Ato##ocomponents<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_I_AO: \
+                this->convertDLV##icomponents##to##ocomponents##A<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_I_O: \
+                this->convertDLV##icomponents##to##ocomponents<InputType, OutputType>(fc, src, dst); \
+                break; \
+            }; \
+        }
+
+#define CONVERTUL_FUNC(icomponents, ocomponents) \
+        template <typename InputType, typename OutputType> \
+        inline void convertULFormat##icomponents##to##ocomponents(const FrameConvertParameters &fc, \
+                                                                  const AkVideoPacket &src, \
+                                                                  AkVideoPacket &dst) const \
+        { \
+            switch (fc.alphaMode) { \
+            case AlphaMode_AI_AO: \
+                this->convertUL##icomponents##Ato##ocomponents##A<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_AI_O: \
+                this->convertUL##icomponents##Ato##ocomponents<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_I_AO: \
+                this->convertUL##icomponents##to##ocomponents##A<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_I_O: \
+                this->convertUL##icomponents##to##ocomponents<InputType, OutputType>(fc, src, dst); \
+                break; \
+            }; \
+        }
+
+#define CONVERTULV_FUNC(icomponents, ocomponents) \
+        template <typename InputType, typename OutputType> \
+        inline void convertULVFormat##icomponents##to##ocomponents(const FrameConvertParameters &fc, \
+                                                                   const AkVideoPacket &src, \
+                                                                   AkVideoPacket &dst) const \
+        { \
+            switch (fc.alphaMode) { \
+            case AlphaMode_AI_AO: \
+                this->convertULV##icomponents##Ato##ocomponents##A<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_AI_O: \
+                this->convertULV##icomponents##Ato##ocomponents<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_I_AO: \
+                this->convertULV##icomponents##to##ocomponents##A<InputType, OutputType>(fc, src, dst); \
+                break; \
+            case AlphaMode_I_O: \
+                this->convertULV##icomponents##to##ocomponents<InputType, OutputType>(fc, src, dst); \
+                break; \
+            }; \
+        }
+
+        CONVERT_FUNC(3, 3)
+        CONVERT_FUNC(3, 1)
+        CONVERT_FUNC(1, 3)
+        CONVERT_FUNC(1, 1)
+        CONVERTV_FUNC(3, 3)
+        CONVERTDL_FUNC(3, 3)
+        CONVERTDL_FUNC(3, 1)
+        CONVERTDL_FUNC(1, 3)
+        CONVERTDL_FUNC(1, 1)
+        CONVERTDLV_FUNC(3, 3)
+        CONVERTUL_FUNC(3, 3)
+        CONVERTUL_FUNC(3, 1)
+        CONVERTUL_FUNC(1, 3)
+        CONVERTUL_FUNC(1, 1)
+        CONVERTULV_FUNC(3, 3)
+
+        template <typename InputType, typename OutputType>
+        inline void convert(const FrameConvertParameters &fc,
+                            const AkVideoPacket &src,
+                            AkVideoPacket &dst)
+        {
+            if (this->m_scalingMode == AkVideoConverter::ScalingMode_Linear
+                && fc.resizeMode == ResizeMode_Up) {
+                switch (fc.convertType) {
+                case ConvertType_Vector:
+                    this->convertULVFormat3to3<InputType, OutputType>(fc, src, dst);
+                    break;
+                case ConvertType_3to3:
+                    this->convertULFormat3to3<InputType, OutputType>(fc, src, dst);
+                    break;
+                case ConvertType_3to1:
+                    this->convertULFormat3to1<InputType, OutputType>(fc, src, dst);
+                    break;
+                case ConvertType_1to3:
+                    this->convertULFormat1to3<InputType, OutputType>(fc, src, dst);
+                    break;
+                case ConvertType_1to1:
+                    this->convertULFormat1to1<InputType, OutputType>(fc, src, dst);
+                    break;
+                }
+            } else if (this->m_scalingMode == AkVideoConverter::ScalingMode_Linear
+                       && fc.resizeMode == ResizeMode_Down) {
+                switch (fc.convertType) {
+                case ConvertType_Vector:
+                    this->convertDLVFormat3to3<InputType, OutputType>(fc, src, dst);
+                    break;
+                case ConvertType_3to3:
+                    this->convertDLFormat3to3<InputType, OutputType>(fc, src, dst);
+                    break;
+                case ConvertType_3to1:
+                    this->convertDLFormat3to1<InputType, OutputType>(fc, src, dst);
+                    break;
+                case ConvertType_1to3:
+                    this->convertDLFormat1to3<InputType, OutputType>(fc, src, dst);
+                    break;
+                case ConvertType_1to1:
+                    this->convertDLFormat1to1<InputType, OutputType>(fc, src, dst);
+                    break;
+                }
+            } else {
+                switch (fc.convertType) {
+                case ConvertType_Vector:
+                    this->convertVFormat3to3<InputType, OutputType>(fc, src, dst);
+                    break;
+                case ConvertType_3to3:
+                    this->convertFormat3to3<InputType, OutputType>(fc, src, dst);
+                    break;
+                case ConvertType_3to1:
+                    this->convertFormat3to1<InputType, OutputType>(fc, src, dst);
+                    break;
+                case ConvertType_1to3:
+                    this->convertFormat1to3<InputType, OutputType>(fc, src, dst);
+                    break;
+                case ConvertType_1to1:
+                    this->convertFormat1to1<InputType, OutputType>(fc, src, dst);
+                    break;
+                }
+            }
+        }
+
+    inline AkVideoPacket convert(const AkVideoPacket &packet,
+                                 const AkVideoCaps &ocaps);
+};
+
+AkVideoConverter::AkVideoConverter(QObject *parent):
+    QObject(parent)
+{
+    this->d = new AkVideoConverterPrivate();
+}
+
+AkVideoConverter::AkVideoConverter(const AkVideoCaps &outputCaps,
+                                   QObject *parent):
+    QObject(parent)
+{
+    this->d = new AkVideoConverterPrivate();
+    this->d->m_outputCaps = outputCaps;
+}
+
+AkVideoConverter::AkVideoConverter(const AkVideoConverter &other):
+    QObject()
+{
+    this->d = new AkVideoConverterPrivate();
+    this->d->m_outputCaps = other.d->m_outputCaps;
+    this->d->m_yuvColorSpace = other.d->m_yuvColorSpace;
+    this->d->m_yuvColorSpaceType = other.d->m_yuvColorSpaceType;
+    this->d->m_scalingMode = other.d->m_scalingMode;
+    this->d->m_aspectRatioMode = other.d->m_aspectRatioMode;
+}
+
+AkVideoConverter::~AkVideoConverter()
+{
+    if (this->d->m_fc) {
+        delete [] this->d->m_fc;
+        this->d->m_fc = nullptr;
+    }
+
+    delete this->d;
+}
+
+AkVideoConverter &AkVideoConverter::operator =(const AkVideoConverter &other)
+{
+    if (this != &other) {
+        this->d->m_yuvColorSpace = other.d->m_yuvColorSpace;
+        this->d->m_yuvColorSpaceType = other.d->m_yuvColorSpaceType;
+        this->d->m_outputCaps = other.d->m_outputCaps;
+        this->d->m_scalingMode = other.d->m_scalingMode;
+        this->d->m_aspectRatioMode = other.d->m_aspectRatioMode;
+    }
+
+    return *this;
+}
+
+QObject *AkVideoConverter::create()
+{
+    return new AkVideoConverter();
+}
+
+AkVideoCaps AkVideoConverter::outputCaps() const
+{
+    return this->d->m_outputCaps;
+}
+
+AkVideoConverter::YuvColorSpace AkVideoConverter::yuvColorSpace() const
+{
+    return this->d->m_yuvColorSpace;
+}
+
+AkVideoConverter::YuvColorSpaceType AkVideoConverter::yuvColorSpaceType() const
+{
+    return this->d->m_yuvColorSpaceType;
+}
+
+AkVideoConverter::ScalingMode AkVideoConverter::scalingMode() const
+{
+    return this->d->m_scalingMode;
+}
+
+AkVideoConverter::AspectRatioMode AkVideoConverter::aspectRatioMode() const
+{
+    return this->d->m_aspectRatioMode;
+}
+
+bool AkVideoConverter::begin()
+{
+    this->d->m_cacheIndex = 0;
+
+    return true;
+}
+
+void AkVideoConverter::end()
+{
+    this->d->m_cacheIndex = 0;
+}
+
+AkVideoPacket AkVideoConverter::convert(const AkVideoPacket &packet)
+{
+    if (!packet)
+        return {};
+
+    auto &caps = packet.caps();
+
+    if (caps.format() == this->d->m_outputCaps.format()
+        && caps.width() == this->d->m_outputCaps.width()
+        && caps.height() == this->d->m_outputCaps.height())
+        return packet;
+
+    return this->d->convert(packet, this->d->m_outputCaps);
+}
+
+void AkVideoConverter::setCacheIndex(int index)
+{
+    this->d->m_cacheIndex = index;
+}
+
+void AkVideoConverter::setOutputCaps(const AkVideoCaps &outputCaps)
+{
+    if (this->d->m_outputCaps == outputCaps)
+        return;
+
+    this->d->m_mutex.lock();
+    this->d->m_outputCaps = outputCaps;
+    this->d->m_mutex.unlock();
+    emit this->outputCapsChanged(outputCaps);
+}
+
+void AkVideoConverter::setYuvColorSpace(YuvColorSpace yuvColorSpace)
+{
+    if (this->d->m_yuvColorSpace == yuvColorSpace)
+        return;
+
+    this->d->m_yuvColorSpace = yuvColorSpace;
+    emit this->yuvColorSpaceChanged(yuvColorSpace);
+}
+
+void AkVideoConverter::setYuvColorSpaceType(YuvColorSpaceType yuvColorSpaceType)
+{
+    if (this->d->m_yuvColorSpaceType == yuvColorSpaceType)
+        return;
+
+    this->d->m_yuvColorSpaceType = yuvColorSpaceType;
+    emit this->yuvColorSpaceTypeChanged(yuvColorSpaceType);
+}
+
+void AkVideoConverter::setScalingMode(AkVideoConverter::ScalingMode scalingMode)
+{
+    if (this->d->m_scalingMode == scalingMode)
+        return;
+
+    this->d->m_scalingMode = scalingMode;
+    emit this->scalingModeChanged(scalingMode);
+}
+
+void AkVideoConverter::setAspectRatioMode(AkVideoConverter::AspectRatioMode aspectRatioMode)
+{
+    if (this->d->m_aspectRatioMode == aspectRatioMode)
+        return;
+
+    this->d->m_aspectRatioMode = aspectRatioMode;
+    emit this->aspectRatioModeChanged(aspectRatioMode);
+}
+
+void AkVideoConverter::resetOutputCaps()
+{
+    this->setOutputCaps({});
+}
+
+void AkVideoConverter::resetYuvColorSpace()
+{
+    this->setYuvColorSpace(YuvColorSpace_ITUR_BT601);
+}
+
+void AkVideoConverter::resetYuvColorSpaceType()
+{
+    this->setYuvColorSpaceType(YuvColorSpaceType_StudioSwing);
+}
+
+void AkVideoConverter::resetScalingMode()
+{
+    this->setScalingMode(ScalingMode_Fast);
+}
+
+void AkVideoConverter::resetAspectRatioMode()
+{
+    this->setAspectRatioMode(AspectRatioMode_Ignore);
+}
+
+void AkVideoConverter::reset()
+{
+    if (this->d->m_fc) {
+        delete [] this->d->m_fc;
+        this->d->m_fc = nullptr;
+    }
+
+    this->d->m_fcSize = 0;
+}
+
+void AkVideoConverter::registerTypes()
+{
+    qRegisterMetaType<AkVideoConverter>("AkVideoConverter");
+    qRegisterMetaType<YuvColorSpace>("YuvColorSpace");
+    QMetaType::registerDebugStreamOperator<AkVideoConverter::YuvColorSpace>();
+    qRegisterMetaType<YuvColorSpaceType>("YuvColorSpaceType");
+    QMetaType::registerDebugStreamOperator<AkVideoConverter::YuvColorSpaceType>();
+    qRegisterMetaType<ScalingMode>("ScalingMode");
+    QMetaType::registerDebugStreamOperator<AkVideoConverter::ScalingMode>();
+    qRegisterMetaType<AspectRatioMode>("AspectRatioMode");
+    QMetaType::registerDebugStreamOperator<AkVideoConverter::AspectRatioMode>();
+    qmlRegisterSingletonType<AkVideoConverter>("Ak", 1, 0, "AkVideoConverter",
+                                               [] (QQmlEngine *qmlEngine,
+                                                   QJSEngine *jsEngine) -> QObject * {
+        Q_UNUSED(qmlEngine)
+        Q_UNUSED(jsEngine)
+
+        return new AkVideoConverter();
+    });
+}
+
+QDebug operator <<(QDebug debug, AkVideoConverter::YuvColorSpace yuvColorSpace)
+{
+    AkVideoConverter converter;
+    int yuvColorSpaceIndex = converter.metaObject()->indexOfEnumerator("YuvColorSpace");
+    QMetaEnum yuvColorSpaceEnum = converter.metaObject()->enumerator(yuvColorSpaceIndex);
+    QString yuvColorSpaceStr(yuvColorSpaceEnum.valueToKey(yuvColorSpace));
+    yuvColorSpaceStr.remove("YuvColorSpace_");
+    QDebugStateSaver saver(debug);
+    debug.nospace() << yuvColorSpaceStr.toStdString().c_str();
+
+    return debug;
+}
+
+QDebug operator <<(QDebug debug, AkVideoConverter::YuvColorSpaceType yuvColorSpaceType)
+{
+    AkVideoConverter converter;
+    int yuvColorSpaceTypeIndex = converter.metaObject()->indexOfEnumerator("YuvColorSpaceType");
+    QMetaEnum yuvColorSpaceTypeEnum = converter.metaObject()->enumerator(yuvColorSpaceTypeIndex);
+    QString yuvColorSpaceTypeStr(yuvColorSpaceTypeEnum.valueToKey(yuvColorSpaceType));
+    yuvColorSpaceTypeStr.remove("YuvColorSpaceType_");
+    QDebugStateSaver saver(debug);
+    debug.nospace() << yuvColorSpaceTypeStr.toStdString().c_str();
+
+    return debug;
+}
+
+QDebug operator <<(QDebug debug, AkVideoConverter::ScalingMode mode)
+{
+    AkVideoConverter converter;
+    int scalingModeIndex = converter.metaObject()->indexOfEnumerator("ScalingMode");
+    QMetaEnum scalingModeEnum = converter.metaObject()->enumerator(scalingModeIndex);
+    QString scalingModeStr(scalingModeEnum.valueToKey(mode));
+    scalingModeStr.remove("ScalingMode_");
+    QDebugStateSaver saver(debug);
+    debug.nospace() << scalingModeStr.toStdString().c_str();
+
+    return debug;
+}
+
+QDebug operator <<(QDebug debug, AkVideoConverter::AspectRatioMode mode)
+{
+    AkVideoConverter converter;
+    int aspectRatioModeIndex = converter.metaObject()->indexOfEnumerator("AspectRatioMode");
+    QMetaEnum aspectRatioModeEnum = converter.metaObject()->enumerator(aspectRatioModeIndex);
+    QString aspectRatioModeStr(aspectRatioModeEnum.valueToKey(mode));
+    aspectRatioModeStr.remove("AspectRatioMode_");
+    QDebugStateSaver saver(debug);
+    debug.nospace() << aspectRatioModeStr.toStdString().c_str();
+
+    return debug;
+}
+
+#define DEFINE_CONVERT_FUNC(isize, osize) \
+    case ConvertDataTypes_##isize##_##osize: \
+        this->convert<quint##isize, quint##osize>(fc, \
+                                                  packet, \
+                                                  fc.outputFrame); \
+        break;
+
+AkVideoPacket AkVideoConverterPrivate::convert(const AkVideoPacket &packet,
+                                               const AkVideoCaps &ocaps)
+{
+    if (this->m_cacheIndex >= this->m_fcSize) {
+        static const int cacheBlockSize = 8;
+        auto newSize = (this->m_cacheIndex + cacheBlockSize) & ~(cacheBlockSize - 1);
+        auto fc = new FrameConvertParameters[newSize];
+
+        if (this->m_fc) {
+            for (int i = 0; i < this->m_fcSize; ++i)
+                fc[i] = this->m_fc[i];
+
+            delete [] this->m_fc;
+        }
+
+        this->m_fc = fc;
+        this->m_fcSize = newSize;
+    }
+
+    auto &fc = this->m_fc[this->m_cacheIndex];
+
+    if (packet.caps() != fc.inputCaps
+        || ocaps != fc.outputCaps
+        || this->m_yuvColorSpace != fc.yuvColorSpace
+        || this->m_yuvColorSpaceType != fc.yuvColorSpaceType
+        || this->m_scalingMode != fc.scalingMode
+        || this->m_aspectRatioMode != fc.aspectRatioMode) {
+        fc.setOutputConvertCaps(packet.caps(),
+                                ocaps,
+                                this->m_aspectRatioMode);
+        fc.configure(packet.caps(),
+                     fc.outputConvertCaps,
+                     fc.colorConvert,
+                     this->m_yuvColorSpace,
+                     this->m_yuvColorSpaceType);
+        fc.configureScaling(packet.caps(),
+                            fc.outputConvertCaps,
+                            this->m_aspectRatioMode);
+        fc.inputCaps = packet.caps();
+        fc.outputCaps = ocaps;
+        fc.yuvColorSpace = this->m_yuvColorSpace;
+        fc.yuvColorSpaceType = this->m_yuvColorSpaceType;
+        fc.scalingMode = this->m_scalingMode;
+        fc.aspectRatioMode = this->m_aspectRatioMode;
+    }
+
+    if (fc.outputConvertCaps.isSameFormat(packet.caps())) {
+        this->m_cacheIndex++;
+
+        return packet;
+    }
+
+    switch (fc.convertDataTypes) {
+    DEFINE_CONVERT_FUNC(8 , 8 )
+    DEFINE_CONVERT_FUNC(8 , 16)
+    DEFINE_CONVERT_FUNC(8 , 32)
+    DEFINE_CONVERT_FUNC(16, 8 )
+    DEFINE_CONVERT_FUNC(16, 16)
+    DEFINE_CONVERT_FUNC(16, 32)
+    DEFINE_CONVERT_FUNC(32, 8 )
+    DEFINE_CONVERT_FUNC(32, 16)
+    DEFINE_CONVERT_FUNC(32, 32)
+    }
+
+    fc.outputFrame.copyMetadata(packet);
+    this->m_cacheIndex++;
+
+    return fc.outputFrame;
+}
+
+ColorConvert::ColorConvert()
+{
+}
+
+ColorConvert::ColorConvert(AkVideoConverter::YuvColorSpace yuvColorSpace,
+                           AkVideoConverter::YuvColorSpaceType yuvColorSpaceType):
+    yuvColorSpace(yuvColorSpace),
+    yuvColorSpaceType(yuvColorSpaceType)
+{
+}
+
+ColorConvert::ColorConvert(AkVideoConverter::YuvColorSpaceType yuvColorSpaceType):
+    yuvColorSpaceType(yuvColorSpaceType)
+{
+}
+
+void ColorConvert::setYuvColorSpace(AkVideoConverter::YuvColorSpace yuvColorSpace)
+{
+    this->yuvColorSpace = yuvColorSpace;
+}
+
+void ColorConvert::setYuvColorSpaceType(AkVideoConverter::YuvColorSpaceType yuvColorSpaceType)
+{
+    this->yuvColorSpaceType = yuvColorSpaceType;
+}
+
+void ColorConvert::applyMatrix(qint64 a, qint64 b, qint64 c,
+                               qint64 *x, qint64 *y, qint64 *z) const
+{
+    *x = qBound(this->xmin, (a * this->m00 + b * this->m01 + c * this->m02 + this->m03) >> this->shift, this->xmax);
+    *y = qBound(this->ymin, (a * this->m10 + b * this->m11 + c * this->m12 + this->m13) >> this->shift, this->ymax);
+    *z = qBound(this->zmin, (a * this->m20 + b * this->m21 + c * this->m22 + this->m23) >> this->shift, this->zmax);
+}
+
+void ColorConvert::applyVector(qint64 a, qint64 b, qint64 c,
+                               qint64 *x, qint64 *y, qint64 *z) const
+{
+    *x = (a * this->m00 + this->m03) >> this->shift;
+    *y = (b * this->m11 + this->m13) >> this->shift;
+    *z = (c * this->m22 + this->m23) >> this->shift;
+}
+
+void ColorConvert::applyPoint(qint64 p,
+                              qint64 *x, qint64 *y, qint64 *z) const
+{
+    *x = (p * this->m00 + this->m03) >> this->shift;
+    *y = (p * this->m10 + this->m13) >> this->shift;
+    *z = (p * this->m20 + this->m23) >> this->shift;
+}
+
+void ColorConvert::applyPoint(qint64 a, qint64 b, qint64 c,
+                              qint64 *p) const
+{
+    *p = qBound(this->xmin, (a * this->m00 + b * this->m01 + c * this->m02 + this->m03) >> this->shift, this->xmax);
+}
+
+void ColorConvert::applyPoint(qint64 p, qint64 *q) const
+{
+    *q = (p * this->m00 + this->m03) >> this->shift;
+}
+
+void ColorConvert::applyAlpha(qint64 x, qint64 y, qint64 z, qint64 a,
+                              qint64 *xa, qint64 *ya, qint64 *za) const
+{
+    qint64 diffA = this->amax - a;
+    *xa = (x * a + this->xmin * diffA) / this->amax;
+    *ya = (y * a + this->ymin * diffA) / this->amax;
+    *za = (z * a + this->zmin * diffA) / this->amax;
+}
+
+void ColorConvert::applyAlpha(qint64 a,
+                              qint64 *x, qint64 *y, qint64 *z) const
+{
+    this->applyAlpha(*x, *y, *z, a, x, y, z);
+}
+
+void ColorConvert::applyAlpha(qint64 p, qint64 a, qint64 *pa) const
+{
+    *pa = (p * a + this->xmin * (this->amax - a)) / this->amax;
+}
+
+void ColorConvert::applyAlpha(qint64 a, qint64 *p) const
+{
+    this->applyAlpha(*p, a, p);
+}
+
+void ColorConvert::setAlphaBits(int abits)
+{
+    this->amax = (1L << abits) - 1;
+}
+
+void ColorConvert::loadMatrix(ColorMatrix colorMatrix,
+                              int ibitsa,
+                              int ibitsb,
+                              int ibitsc,
+                              int obitsx,
+                              int obitsy,
+                              int obitsz)
+{
+    switch (colorMatrix) {
+    case ColorMatrix_ABC2XYZ:
+        this->loadAbc2xyzMatrix(ibitsa,
+                                ibitsb,
+                                ibitsc,
+                                obitsx,
+                                obitsy,
+                                obitsz);
+
+        break;
+
+    case ColorMatrix_RGB2YUV:
+        this->loadRgb2yuvMatrix(this->yuvColorSpace,
+                                this->yuvColorSpaceType,
+                                ibitsa,
+                                ibitsb,
+                                ibitsc,
+                                obitsx,
+                                obitsy,
+                                obitsz);
+
+        break;
+
+    case ColorMatrix_YUV2RGB:
+        this->loadYuv2rgbMatrix(this->yuvColorSpace,
+                                this->yuvColorSpaceType,
+                                ibitsa,
+                                ibitsb,
+                                ibitsc,
+                                obitsx,
+                                obitsy,
+                                obitsz);
+
+        break;
+
+    case ColorMatrix_RGB2GRAY:
+        this->loadRgb2grayMatrix(this->yuvColorSpace,
+                                 ibitsa,
+                                 ibitsb,
+                                 ibitsc,
+                                 obitsx);
+
+        break;
+
+    case ColorMatrix_GRAY2RGB:
+        this->loadGray2rgbMatrix(ibitsa,
+                                 obitsx,
+                                 obitsy,
+                                 obitsz);
+
+        break;
+
+    case ColorMatrix_YUV2GRAY:
+        this->loadYuv2grayMatrix(this->yuvColorSpaceType,
+                                 ibitsa,
+                                 ibitsb,
+                                 ibitsc,
+                                 obitsx);
+
+        break;
+
+    case ColorMatrix_GRAY2YUV:
+        this->loadGray2yuvMatrix(this->yuvColorSpaceType,
+                                 ibitsa,
+                                 obitsx,
+                                 obitsy,
+                                 obitsz);
+
+
+    default:
+        break;
+    }
+}
+
+void ColorConvert::loadMatrix(const AkVideoFormatSpec &from,
+                              const AkVideoFormatSpec &to)
+{
+    ColorMatrix colorMatrix = ColorMatrix_ABC2XYZ;
+    int ibitsa = 0;
+    int ibitsb = 0;
+    int ibitsc = 0;
+    int obitsx = 0;
+    int obitsy = 0;
+    int obitsz = 0;
+
+    if (from.type() == AkVideoFormatSpec::VFT_RGB
+        && to.type() == AkVideoFormatSpec::VFT_RGB) {
+        colorMatrix = ColorMatrix_ABC2XYZ;
+        ibitsa = from.component(AkColorComponent::CT_R).length();
+        ibitsb = from.component(AkColorComponent::CT_G).length();
+        ibitsc = from.component(AkColorComponent::CT_B).length();
+        obitsx = to.component(AkColorComponent::CT_R).length();
+        obitsy = to.component(AkColorComponent::CT_G).length();
+        obitsz = to.component(AkColorComponent::CT_B).length();
+    } else if (from.type() == AkVideoFormatSpec::VFT_RGB
+               && to.type() == AkVideoFormatSpec::VFT_YUV) {
+        colorMatrix = ColorMatrix_RGB2YUV;
+        ibitsa = from.component(AkColorComponent::CT_R).length();
+        ibitsb = from.component(AkColorComponent::CT_G).length();
+        ibitsc = from.component(AkColorComponent::CT_B).length();
+        obitsx = to.component(AkColorComponent::CT_Y).length();
+        obitsy = to.component(AkColorComponent::CT_U).length();
+        obitsz = to.component(AkColorComponent::CT_V).length();
+    } else if (from.type() == AkVideoFormatSpec::VFT_RGB
+               && to.type() == AkVideoFormatSpec::VFT_Gray) {
+        colorMatrix = ColorMatrix_RGB2GRAY;
+        ibitsa = from.component(AkColorComponent::CT_R).length();
+        ibitsb = from.component(AkColorComponent::CT_G).length();
+        ibitsc = from.component(AkColorComponent::CT_B).length();
+        obitsx = to.component(AkColorComponent::CT_Y).length();
+        obitsy = obitsx;
+        obitsz = obitsx;
+    } else if (from.type() == AkVideoFormatSpec::VFT_YUV
+               && to.type() == AkVideoFormatSpec::VFT_RGB) {
+        colorMatrix = ColorMatrix_YUV2RGB;
+        ibitsa = from.component(AkColorComponent::CT_Y).length();
+        ibitsb = from.component(AkColorComponent::CT_U).length();
+        ibitsc = from.component(AkColorComponent::CT_V).length();
+        obitsx = to.component(AkColorComponent::CT_R).length();
+        obitsy = to.component(AkColorComponent::CT_G).length();
+        obitsz = to.component(AkColorComponent::CT_B).length();
+    } else if (from.type() == AkVideoFormatSpec::VFT_YUV
+               && to.type() == AkVideoFormatSpec::VFT_YUV) {
+        colorMatrix = ColorMatrix_ABC2XYZ;
+        ibitsa = from.component(AkColorComponent::CT_Y).length();
+        ibitsb = from.component(AkColorComponent::CT_U).length();
+        ibitsc = from.component(AkColorComponent::CT_V).length();
+        obitsx = to.component(AkColorComponent::CT_Y).length();
+        obitsy = to.component(AkColorComponent::CT_U).length();
+        obitsz = to.component(AkColorComponent::CT_V).length();
+    } else if (from.type() == AkVideoFormatSpec::VFT_YUV
+               && to.type() == AkVideoFormatSpec::VFT_Gray) {
+        colorMatrix = ColorMatrix_YUV2GRAY;
+        ibitsa = from.component(AkColorComponent::CT_Y).length();
+        ibitsb = from.component(AkColorComponent::CT_U).length();
+        ibitsc = from.component(AkColorComponent::CT_V).length();
+        obitsx = to.component(AkColorComponent::CT_Y).length();
+        obitsy = obitsx;
+        obitsz = obitsx;
+    } else if (from.type() == AkVideoFormatSpec::VFT_Gray
+               && to.type() == AkVideoFormatSpec::VFT_RGB) {
+        colorMatrix = ColorMatrix_GRAY2RGB;
+        ibitsa = from.component(AkColorComponent::CT_Y).length();
+        ibitsb = ibitsa;
+        ibitsc = ibitsa;
+        obitsx = to.component(AkColorComponent::CT_R).length();
+        obitsy = to.component(AkColorComponent::CT_G).length();
+        obitsz = to.component(AkColorComponent::CT_B).length();
+    } else if (from.type() == AkVideoFormatSpec::VFT_Gray
+               && to.type() == AkVideoFormatSpec::VFT_YUV) {
+        colorMatrix = ColorMatrix_GRAY2YUV;
+        ibitsa = from.component(AkColorComponent::CT_Y).length();
+        ibitsb = ibitsa;
+        ibitsc = ibitsa;
+        obitsx = to.component(AkColorComponent::CT_Y).length();
+        obitsy = to.component(AkColorComponent::CT_U).length();
+        obitsz = to.component(AkColorComponent::CT_V).length();
+    } else if (from.type() == AkVideoFormatSpec::VFT_Gray
+               && to.type() == AkVideoFormatSpec::VFT_Gray) {
+        colorMatrix = ColorMatrix_ABC2XYZ;
+        ibitsa = from.component(AkColorComponent::CT_Y).length();
+        ibitsb = ibitsa;
+        ibitsc = ibitsa;
+        obitsx = to.component(AkColorComponent::CT_Y).length();
+        obitsy = obitsx;
+        obitsz = obitsx;
+    }
+
+    if (from.contains(AkColorComponent::CT_A))
+        this->setAlphaBits(from.component(AkColorComponent::CT_A).length());
+
+    this->loadMatrix(colorMatrix,
+                     ibitsa,
+                     ibitsb,
+                     ibitsc,
+                     obitsx,
+                     obitsy,
+                     obitsz);
+}
+
+void ColorConvert::loadMatrix(const AkVideoCaps::PixelFormat &from,
+                              const AkVideoCaps::PixelFormat &to)
+{
+    this->loadMatrix(AkVideoCaps::formatSpecs(from),
+                     AkVideoCaps::formatSpecs(to));
+}
+
+void ColorConvert::rbConstants(AkVideoConverter::YuvColorSpace colorSpace,
+                               qint64 &kr, qint64 &kb, qint64 &div) const
+{
+    kr = 0;
+    kb = 0;
+    div = 10000;
+
+    // Coefficients taken from https://en.wikipedia.org/wiki/YUV
+    switch (colorSpace) {
+    // Same weight for all components
+    case AkVideoConverter::YuvColorSpace_AVG:
+        kr = 3333;
+        kb = 3333;
+
+        break;
+
+    // https://www.itu.int/rec/R-REC-BT.601/en
+    case AkVideoConverter::YuvColorSpace_ITUR_BT601:
+        kr = 2990;
+        kb = 1140;
+
+        break;
+
+    // https://www.itu.int/rec/R-REC-BT.709/en
+    case AkVideoConverter::YuvColorSpace_ITUR_BT709:
+        kr = 2126;
+        kb = 722;
+
+        break;
+
+    // https://www.itu.int/rec/R-REC-BT.2020/en
+    case AkVideoConverter::YuvColorSpace_ITUR_BT2020:
+        kr = 2627;
+        kb = 593;
+
+        break;
+
+    // http://car.france3.mars.free.fr/HD/INA-%2026%20jan%2006/SMPTE%20normes%20et%20confs/s240m.pdf
+    case AkVideoConverter::YuvColorSpace_SMPTE_240M:
+        kr = 2120;
+        kb = 870;
+
+        break;
+
+    default:
+        break;
+    }
+}
+
+qint64 ColorConvert::roundedDiv(qint64 num, qint64 den) const
+{
+    if ((num < 0 && den > 0) || (num > 0 && den < 0))
+        return (2 * num - den) / (2 * den);
+
+    return (2 * num + den) / (2 * den);
+}
+
+qint64 ColorConvert::nearestPowOf2(qint64 value) const
+{
+    qint64 val = value;
+    qint64 res = 0;
+
+    while (val >>= 1)
+        res++;
+
+    if (abs((1 << (res + 1)) - value) <= abs((1 << res) - value))
+        return 1 << (res + 1);
+
+    return 1 << res;
+}
+
+void ColorConvert::limitsY(int bits,
+                           AkVideoConverter::YuvColorSpaceType type,
+                           qint64 &minY,
+                           qint64 &maxY) const
+{
+    if (type == AkVideoConverter::YuvColorSpaceType_FullSwing) {
+        minY = 0;
+        maxY = (1 << bits) - 1;
+
+        return;
+    }
+
+    /* g = 9% is the theoretical maximal overshoot (Gibbs phenomenon)
+     *
+     * https://en.wikipedia.org/wiki/YUV#Numerical_approximations
+     * https://en.wikipedia.org/wiki/Gibbs_phenomenon
+     * https://math.stackexchange.com/a/259089
+     * https://www.youtube.com/watch?v=Ol0uTeXoKaU
+     */
+    static const qint64 g = 9;
+
+    qint64 maxValue = (1 << bits) - 1;
+    minY = this->nearestPowOf2(roundedDiv(maxValue * g, 2 * g + 100));
+    maxY = maxValue * (g + 100) / (2 * g + 100);
+}
+
+void ColorConvert::limitsUV(int bits,
+                            AkVideoConverter::YuvColorSpaceType type,
+                            qint64 &minUV,
+                            qint64 &maxUV) const
+{
+    if (type == AkVideoConverter::YuvColorSpaceType_FullSwing) {
+        minUV = 0;
+        maxUV = (1 << bits) - 1;
+
+        return;
+    }
+
+    static const qint64 g = 9;
+    qint64 maxValue = (1 << bits) - 1;
+    minUV = this->nearestPowOf2(roundedDiv(maxValue * g, 2 * g + 100));
+    maxUV = (1L << bits) - minUV;
+}
+
+void ColorConvert::loadAbc2xyzMatrix(int abits,
+                                     int bbits,
+                                     int cbits,
+                                     int xbits,
+                                     int ybits,
+                                     int zbits)
+{
+    int shift = std::max(abits, std::max(bbits, cbits));
+    qint64 shiftDiv = 1L << shift;
+    qint64 rounding = 1L << qAbs(shift - 1);
+
+    qint64 amax = (1L << abits) - 1;
+    qint64 bmax = (1L << bbits) - 1;
+    qint64 cmax = (1L << cbits) - 1;
+
+    qint64 xmax = (1L << xbits) - 1;
+    qint64 ymax = (1L << ybits) - 1;
+    qint64 zmax = (1L << zbits) - 1;
+
+    qint64 kx = this->roundedDiv(shiftDiv * xmax, amax);
+    qint64 ky = this->roundedDiv(shiftDiv * ymax, bmax);
+    qint64 kz = this->roundedDiv(shiftDiv * zmax, cmax);
+
+    this->m00 = kx; this->m01 = 0 ; this->m02 = 0 ; this->m03 = rounding;
+    this->m10 = 0 ; this->m11 = ky; this->m12 = 0 ; this->m13 = rounding;
+    this->m20 = 0 ; this->m21 = 0 ; this->m22 = kz; this->m23 = rounding;
+
+    this->xmin = 0; this->xmax = xmax;
+    this->ymin = 0; this->ymax = ymax;
+    this->zmin = 0; this->zmax = zmax;
+
+    this->shift = shift;
+}
+
+void ColorConvert::loadRgb2yuvMatrix(AkVideoConverter::YuvColorSpace yuvColorSpace,
+                                     AkVideoConverter::YuvColorSpaceType yuvColorSpaceType,
+                                     int rbits,
+                                     int gbits,
+                                     int bbits,
+                                     int ybits,
+                                     int ubits,
+                                     int vbits)
+{
+    qint64 kyr = 0;
+    qint64 kyb = 0;
+    qint64 div = 0;
+    this->rbConstants(yuvColorSpace, kyr, kyb, div);
+    qint64 kyg = div - kyr - kyb;
+
+    qint64 kur = -kyr;
+    qint64 kug = -kyg;
+    qint64 kub = div - kyb;
+
+    qint64 kvr = div - kyr;
+    qint64 kvg = -kyg;
+    qint64 kvb = -kyb;
+
+    int shift = std::max(rbits, std::max(gbits, bbits));
+    qint64 shiftDiv = 1L << shift;
+    qint64 rounding = 1L << (shift - 1);
+
+    qint64 rmax = (1L << rbits) - 1;
+    qint64 gmax = (1L << gbits) - 1;
+    qint64 bmax = (1L << bbits) - 1;
+
+    qint64 minY = 0;
+    qint64 maxY = 0;
+    this->limitsY(ybits, yuvColorSpaceType, minY, maxY);
+    auto diffY = maxY - minY;
+
+    qint64 kiyr = this->roundedDiv(shiftDiv * diffY * kyr, div * rmax);
+    qint64 kiyg = this->roundedDiv(shiftDiv * diffY * kyg, div * gmax);
+    qint64 kiyb = this->roundedDiv(shiftDiv * diffY * kyb, div * bmax);
+
+    qint64 minU = 0;
+    qint64 maxU = 0;
+    this->limitsUV(ubits, yuvColorSpaceType, minU, maxU);
+    auto diffU = maxU - minU;
+
+    qint64 kiur = this->roundedDiv(shiftDiv * diffU * kur, 2 * rmax * kub);
+    qint64 kiug = this->roundedDiv(shiftDiv * diffU * kug, 2 * gmax * kub);
+    qint64 kiub = this->roundedDiv(shiftDiv * diffU      , 2 * bmax);
+
+    qint64 minV = 0;
+    qint64 maxV = 0;
+    this->limitsUV(vbits, yuvColorSpaceType, minV, maxV);
+    auto diffV = maxV - minV;
+
+    qint64 kivr = this->roundedDiv(shiftDiv * diffV      , 2 * rmax);
+    qint64 kivg = this->roundedDiv(shiftDiv * diffV * kvg, 2 * gmax * kvr);
+    qint64 kivb = this->roundedDiv(shiftDiv * diffV * kvb, 2 * bmax * kvr);
+
+    qint64 ciy = rounding + shiftDiv * minY;
+    qint64 ciu = rounding + shiftDiv * (minU + maxU) / 2;
+    qint64 civ = rounding + shiftDiv * (minV + maxV) / 2;
+
+    this->m00 = kiyr; this->m01 = kiyg; this->m02 = kiyb; this->m03 = ciy;
+    this->m10 = kiur; this->m11 = kiug; this->m12 = kiub; this->m13 = ciu;
+    this->m20 = kivr; this->m21 = kivg; this->m22 = kivb; this->m23 = civ;
+
+    this->xmin = minY; this->xmax = maxY;
+    this->ymin = minU; this->ymax = maxU;
+    this->zmin = minV; this->zmax = maxV;
+
+    this->shift = shift;
+}
+
+void ColorConvert::loadYuv2rgbMatrix(AkVideoConverter::YuvColorSpace yuvColorSpace,
+                                     AkVideoConverter::YuvColorSpaceType yuvColorSpaceType,
+                                     int ybits,
+                                     int ubits,
+                                     int vbits,
+                                     int rbits,
+                                     int gbits,
+                                     int bbits)
+{
+    qint64 kyr = 0;
+    qint64 kyb = 0;
+    qint64 div = 0;
+    this->rbConstants(yuvColorSpace, kyr, kyb, div);
+    qint64 kyg = div - kyr - kyb;
+
+    qint64 minY = 0;
+    qint64 maxY = 0;
+    this->limitsY(ybits, yuvColorSpaceType, minY, maxY);
+    auto diffY = maxY - minY;
+
+    qint64 minU = 0;
+    qint64 maxU = 0;
+    this->limitsUV(ubits, yuvColorSpaceType, minU, maxU);
+    auto diffU = maxU - minU;
+
+    qint64 minV = 0;
+    qint64 maxV = 0;
+    this->limitsUV(vbits, yuvColorSpaceType, minV, maxV);
+    auto diffV = maxV - minV;
+
+    int shift = std::max(ybits, std::max(ubits, vbits));
+    qint64 shiftDiv = 1L << shift;
+    qint64 rounding = 1L << (shift - 1);
+
+    qint64 rmax = (1L << rbits) - 1;
+    qint64 gmax = (1L << gbits) - 1;
+    qint64 bmax = (1L << bbits) - 1;
+
+    qint64 kry = this->roundedDiv(shiftDiv * rmax, diffY);
+    qint64 krv = this->roundedDiv(2 * shiftDiv * rmax * (div - kyr), div * diffV);
+
+    qint64 kgy = this->roundedDiv(shiftDiv * gmax, diffY);
+    qint64 kgu = this->roundedDiv(2 * shiftDiv * gmax * kyb * (kyb - div), div * kyg * diffU);
+    qint64 kgv = this->roundedDiv(2 * shiftDiv * gmax * kyr * (kyr - div), div * kyg * diffV);
+
+    qint64 kby = this->roundedDiv(shiftDiv * bmax, diffY);
+    qint64 kbu = this->roundedDiv(2 * shiftDiv * bmax * (div - kyb), div * diffU);
+
+    qint64 cir = rounding - kry * minY - krv * (minV + maxV) / 2;
+    qint64 cig = rounding - kgy * minY - (kgu * (minU + maxU) + kgv * (minV + maxV)) / 2;
+    qint64 cib = rounding - kby * minY - kbu * (minU + maxU) / 2;
+
+    this->m00 = kry; this->m01 = 0  ; this->m02 = krv; this->m03 = cir;
+    this->m10 = kgy; this->m11 = kgu; this->m12 = kgv; this->m13 = cig;
+    this->m20 = kby; this->m21 = kbu; this->m22 = 0  ; this->m23 = cib;
+
+    this->xmin = 0; this->xmax = rmax;
+    this->ymin = 0; this->ymax = gmax;
+    this->zmin = 0; this->zmax = bmax;
+
+    this->shift = shift;
+}
+
+void ColorConvert::loadRgb2grayMatrix(AkVideoConverter::YuvColorSpace yuvColorSpace,
+                                      int rbits,
+                                      int gbits,
+                                      int bbits,
+                                      int graybits)
+{
+    AkVideoConverter::YuvColorSpaceType type = AkVideoConverter::YuvColorSpaceType_FullSwing;
+
+    qint64 kyr = 0;
+    qint64 kyb = 0;
+    qint64 div = 0;
+    this->rbConstants(yuvColorSpace, kyr, kyb, div);
+    qint64 kyg = div - kyr - kyb;
+
+    int shift = std::max(rbits, std::max(gbits, bbits));
+    qint64 shiftDiv = 1L << shift;
+    qint64 rounding = 1L << (shift - 1);
+
+    qint64 rmax = (1L << rbits) - 1;
+    qint64 gmax = (1L << gbits) - 1;
+    qint64 bmax = (1L << bbits) - 1;
+
+    qint64 minY = 0;
+    qint64 maxY = 0;
+    this->limitsY(graybits, type, minY, maxY);
+    auto diffY = maxY - minY;
+
+    qint64 kiyr = this->roundedDiv(shiftDiv * diffY * kyr, div * rmax);
+    qint64 kiyg = this->roundedDiv(shiftDiv * diffY * kyg, div * gmax);
+    qint64 kiyb = this->roundedDiv(shiftDiv * diffY * kyb, div * bmax);
+
+    qint64 minU = 0;
+    qint64 maxU = 0;
+    this->limitsUV(graybits, type, minU, maxU);
+
+    qint64 minV = 0;
+    qint64 maxV = 0;
+    this->limitsUV(graybits, type, minV, maxV);
+
+    qint64 ciy = rounding + shiftDiv * minY;
+    qint64 ciu = rounding + shiftDiv * (minU + maxU) / 2;
+    qint64 civ = rounding + shiftDiv * (minV + maxV) / 2;
+
+    this->m00 = kiyr; this->m01 = kiyg; this->m02 = kiyb; this->m03 = ciy;
+    this->m10 = 0   ; this->m11 = 0   ; this->m12 = 0   ; this->m13 = ciu;
+    this->m20 = 0   ; this->m21 = 0   ; this->m22 = 0   ; this->m23 = civ;
+
+    this->xmin = minY; this->xmax = maxY;
+    this->ymin = minU; this->ymax = maxU;
+    this->zmin = minV; this->zmax = maxV;
+
+    this->shift = shift;
+}
+
+void ColorConvert::loadGray2rgbMatrix(int graybits,
+                                      int rbits,
+                                      int gbits,
+                                      int bbits)
+{
+    int shift = graybits;
+    qint64 shiftDiv = 1L << shift;
+    qint64 rounding = 1L << (shift - 1);
+
+    qint64 graymax = (1L << graybits) - 1;
+
+    qint64 rmax = (1L << rbits) - 1;
+    qint64 gmax = (1L << gbits) - 1;
+    qint64 bmax = (1L << bbits) - 1;
+
+    qint64 kr = this->roundedDiv(shiftDiv * rmax, graymax);
+    qint64 kg = this->roundedDiv(shiftDiv * gmax, graymax);
+    qint64 kb = this->roundedDiv(shiftDiv * bmax, graymax);
+
+    this->m00 = kr; this->m01 = 0; this->m02 = 0; this->m03 = rounding;
+    this->m10 = kg; this->m11 = 0; this->m12 = 0; this->m13 = rounding;
+    this->m20 = kb; this->m21 = 0; this->m22 = 0; this->m23 = rounding;
+
+    this->xmin = 0; this->xmax = rmax;
+    this->ymin = 0; this->ymax = gmax;
+    this->zmin = 0; this->zmax = bmax;
+
+    this->shift = shift;
+}
+
+void ColorConvert::loadYuv2grayMatrix(AkVideoConverter::YuvColorSpaceType yuvColorSpaceType,
+                                      int ybits,
+                                      int ubits,
+                                      int vbits,
+                                      int graybits)
+{
+    AkVideoConverter::YuvColorSpaceType otype = AkVideoConverter::YuvColorSpaceType_FullSwing;
+
+    int shift = ybits;
+    qint64 shiftDiv = 1L << shift;
+    qint64 rounding = 1L << (shift - 1);
+
+    qint64 graymax = (1L << graybits) - 1;
+
+    qint64 minY = 0;
+    qint64 maxY = 0;
+    this->limitsY(ybits, yuvColorSpaceType, minY, maxY);
+    auto diffY = maxY - minY;
+
+    qint64 ky = this->roundedDiv(shiftDiv * graymax, diffY);
+
+    qint64 minU = 0;
+    qint64 maxU = 0;
+    this->limitsUV(graybits, otype, minU, maxU);
+
+    qint64 minV = 0;
+    qint64 maxV = 0;
+    this->limitsUV(graybits, otype, minV, maxV);
+
+    qint64 ciy = rounding - this->roundedDiv(shiftDiv * minY * graymax, diffY);
+    qint64 ciu = rounding + shiftDiv * (minU + maxU) / 2;
+    qint64 civ = rounding + shiftDiv * (minV + maxV) / 2;
+
+    this->m00 = ky; this->m01 = 0; this->m02 = 0; this->m03 = ciy;
+    this->m10 = 0 ; this->m11 = 0; this->m12 = 0; this->m13 = ciu;
+    this->m20 = 0 ; this->m21 = 0; this->m22 = 0; this->m23 = civ;
+
+    this->xmin = 0; this->xmax = graymax;
+    this->ymin = 0; this->ymax = graymax;
+    this->zmin = 0; this->zmax = graymax;
+
+    this->shift = shift;
+}
+
+void ColorConvert::loadGray2yuvMatrix(AkVideoConverter::YuvColorSpaceType yuvColorSpaceType,
+                                      int graybits,
+                                      int ybits,
+                                      int ubits,
+                                      int vbits)
+{
+    int shift = graybits;
+    qint64 shiftDiv = 1L << shift;
+    qint64 rounding = 1L << (shift - 1);
+
+    qint64 graymax = (1L << graybits) - 1;
+
+    qint64 minY = 0;
+    qint64 maxY = 0;
+    this->limitsY(ybits, yuvColorSpaceType, minY, maxY);
+    auto diffY = maxY - minY;
+
+    qint64 ky = this->roundedDiv(shiftDiv * diffY, graymax);
+
+    qint64 minU = 0;
+    qint64 maxU = 0;
+    this->limitsUV(ubits, yuvColorSpaceType, minU, maxU);
+
+    qint64 minV = 0;
+    qint64 maxV = 0;
+    this->limitsUV(ybits, yuvColorSpaceType, minV, maxV);
+
+    qint64 ciy = rounding + shiftDiv * minY;
+    qint64 ciu = rounding + shiftDiv * (minU + maxU) / 2;
+    qint64 civ = rounding + shiftDiv * (minV + maxV) / 2;
+
+    this->m00 = ky; this->m01 = 0; this->m02 = 0; this->m03 = ciy;
+    this->m10 = 0 ; this->m11 = 0; this->m12 = 0; this->m13 = ciu;
+    this->m20 = 0 ; this->m21 = 0; this->m22 = 0; this->m23 = civ;
+
+    this->xmin = minY; this->xmax = maxY;
+    this->ymin = minU; this->ymax = maxU;
+    this->zmin = minV; this->zmax = maxV;
+
+    this->shift = shift;
+}
+
+FrameConvertParameters::FrameConvertParameters()
+{
+}
+
+FrameConvertParameters::FrameConvertParameters(const FrameConvertParameters &other):
+    inputCaps(other.inputCaps),
+    outputCaps(other.outputCaps),
+    outputConvertCaps(other.outputConvertCaps),
+    outputFrame(other.outputFrame),
+    scalingMode(other.scalingMode),
+    aspectRatioMode(other.aspectRatioMode),
+    convertType(other.convertType),
+    convertDataTypes(other.convertDataTypes),
+    alphaMode(other.alphaMode),
+    resizeMode(other.resizeMode),
+    fromEndian(other.fromEndian),
+    toEndian(other.toEndian),
+    inputWidth(other.inputWidth),
+    inputWidth_1(other.inputWidth_1),
+    inputHeight(other.inputHeight),
+    outputWidth(other.outputWidth),
+    outputHeight(other.outputHeight),
+    planeXi(other.planeXi),
+    planeYi(other.planeYi),
+    planeZi(other.planeZi),
+    planeAi(other.planeAi),
+    compXi(other.compXi),
+    compYi(other.compYi),
+    compZi(other.compZi),
+    compAi(other.compAi),
+    planeXo(other.planeXo),
+    planeYo(other.planeYo),
+    planeZo(other.planeZo),
+    planeAo(other.planeAo),
+    compXo(other.compXo),
+    compYo(other.compYo),
+    compZo(other.compZo),
+    compAo(other.compAo),
+    xiOffset(other.xiOffset),
+    yiOffset(other.yiOffset),
+    ziOffset(other.ziOffset),
+    aiOffset(other.aiOffset),
+    xoOffset(other.xoOffset),
+    yoOffset(other.yoOffset),
+    zoOffset(other.zoOffset),
+    aoOffset(other.aoOffset),
+    xiShift(other.xiShift),
+    yiShift(other.yiShift),
+    ziShift(other.ziShift),
+    aiShift(other.aiShift),
+    xoShift(other.xoShift),
+    yoShift(other.yoShift),
+    zoShift(other.zoShift),
+    aoShift(other.aoShift),
+    maxXi(other.maxXi),
+    maxYi(other.maxYi),
+    maxZi(other.maxZi),
+    maxAi(other.maxAi),
+    maskXo(other.maskXo),
+    maskYo(other.maskYo),
+    maskZo(other.maskZo),
+    maskAo(other.maskAo),
+    alphaMask(other.alphaMask)
+{
+    auto oWidth = this->outputCaps.width();
+    auto oHeight = this->outputCaps.height();
+
+    size_t oWidthDataSize = sizeof(int) * oWidth;
+    size_t oHeightDataSize = sizeof(int) * oHeight;
+
+    if (other.srcWidth) {
+        this->srcWidth = new int [oWidth];
+        memcpy(this->srcWidth, other.srcWidth, oWidthDataSize);
+    }
+
+    if (other.srcWidth_1) {
+        this->srcWidth_1 = new int [oWidth];
+        memcpy(this->srcWidth_1, other.srcWidth_1, oWidthDataSize);
+    }
+
+    if (other.srcWidthOffsetX) {
+        this->srcWidthOffsetX = new int [oWidth];
+        memcpy(this->srcWidthOffsetX, other.srcWidthOffsetX, oWidthDataSize);
+    }
+
+    if (other.srcWidthOffsetY) {
+        this->srcWidthOffsetY = new int [oWidth];
+        memcpy(this->srcWidthOffsetY, other.srcWidthOffsetY, oWidthDataSize);
+    }
+
+    if (other.srcWidthOffsetZ) {
+        this->srcWidthOffsetZ = new int [oWidth];
+        memcpy(this->srcWidthOffsetZ, other.srcWidthOffsetZ, oWidthDataSize);
+    }
+
+    if (other.srcWidthOffsetA) {
+        this->srcWidthOffsetA = new int [oWidth];
+        memcpy(this->srcWidthOffsetA, other.srcWidthOffsetA, oWidthDataSize);
+    }
+
+    if (other.srcHeight) {
+        this->srcHeight = new int [oHeight];
+        memcpy(this->srcHeight, other.srcHeight, oHeightDataSize);
+    }
+
+    auto iWidth = this->inputCaps.width();
+    size_t iWidthDataSize = sizeof(int) * iWidth;
+
+    if (other.dlSrcWidthOffsetX) {
+        this->dlSrcWidthOffsetX = new int [iWidth];
+        memcpy(this->dlSrcWidthOffsetX, other.dlSrcWidthOffsetX, iWidthDataSize);
+    }
+
+    if (other.dlSrcWidthOffsetY) {
+        this->dlSrcWidthOffsetY = new int [iWidth];
+        memcpy(this->dlSrcWidthOffsetY, other.dlSrcWidthOffsetY, iWidthDataSize);
+    }
+
+    if (other.dlSrcWidthOffsetZ) {
+        this->dlSrcWidthOffsetZ = new int [iWidth];
+        memcpy(this->dlSrcWidthOffsetZ, other.dlSrcWidthOffsetZ, iWidthDataSize);
+    }
+
+    if (other.dlSrcWidthOffsetA) {
+        this->dlSrcWidthOffsetA = new int [iWidth];
+        memcpy(this->dlSrcWidthOffsetA, other.dlSrcWidthOffsetA, iWidthDataSize);
+    }
+
+    if (other.srcWidthOffsetX_1) {
+        this->srcWidthOffsetX_1 = new int [oWidth];
+        memcpy(this->srcWidthOffsetX_1, other.srcWidthOffsetX_1, oWidthDataSize);
+    }
+
+    if (other.srcWidthOffsetY_1) {
+        this->srcWidthOffsetY_1 = new int [oWidth];
+        memcpy(this->srcWidthOffsetY_1, other.srcWidthOffsetY_1, oWidthDataSize);
+    }
+
+    if (other.srcWidthOffsetZ_1) {
+        this->srcWidthOffsetZ_1 = new int [oWidth];
+        memcpy(this->srcWidthOffsetZ_1, other.srcWidthOffsetZ_1, oWidthDataSize);
+    }
+
+    if (other.srcWidthOffsetA_1) {
+        this->srcWidthOffsetA_1 = new int [oWidth];
+        memcpy(this->srcWidthOffsetA_1, other.srcWidthOffsetA_1, oWidthDataSize);
+    }
+
+    if (other.srcHeight_1) {
+        this->srcHeight_1 = new int [oHeight];
+        memcpy(this->srcHeight_1, other.srcHeight_1, oHeightDataSize);
+    }
+
+    if (other.dstWidthOffsetX) {
+        this->dstWidthOffsetX = new int [oWidth];
+        memcpy(this->dstWidthOffsetX, other.dstWidthOffsetX, oWidthDataSize);
+    }
+
+    if (other.dstWidthOffsetY) {
+        this->dstWidthOffsetY = new int [oWidth];
+        memcpy(this->dstWidthOffsetY, other.dstWidthOffsetY, oWidthDataSize);
+    }
+
+    if (other.dstWidthOffsetZ) {
+        this->dstWidthOffsetZ = new int [oWidth];
+        memcpy(this->dstWidthOffsetZ, other.dstWidthOffsetZ, oWidthDataSize);
+    }
+
+    if (other.dstWidthOffsetA) {
+        this->dstWidthOffsetA = new int [oWidth];
+        memcpy(this->dstWidthOffsetA, other.dstWidthOffsetA, oWidthDataSize);
+    }
+
+    size_t oHeightDlDataSize = sizeof(size_t) * oHeight;
+
+    if (other.srcHeightDlOffset) {
+        this->srcHeightDlOffset = new size_t [oHeight];
+        memcpy(this->srcHeightDlOffset, other.srcHeightDlOffset, oHeightDlDataSize);
+    }
+
+    if (other.srcHeightDlOffset_1) {
+        this->srcHeightDlOffset_1 = new size_t [oHeight];
+        memcpy(this->srcHeightDlOffset_1, other.srcHeightDlOffset_1, oHeightDlDataSize);
+    }
+
+    size_t iWidth_1 = this->inputCaps.width() + 1;
+    size_t iHeight_1 = this->inputCaps.height() + 1;
+    size_t integralImageSize = iWidth_1 * iHeight_1;
+    size_t integralImageDataSize = sizeof(DlSumType) * integralImageSize;
+
+    if (other.integralImageDataX) {
+        this->integralImageDataX = new DlSumType [integralImageSize];
+        memcpy(this->integralImageDataX, other.integralImageDataX, integralImageDataSize);
+    }
+
+    if (other.integralImageDataY) {
+        this->integralImageDataY = new DlSumType [integralImageSize];
+        memcpy(this->integralImageDataY, other.integralImageDataY, integralImageDataSize);
+    }
+
+    if (other.integralImageDataZ) {
+        this->integralImageDataZ = new DlSumType [integralImageSize];
+        memcpy(this->integralImageDataZ, other.integralImageDataZ, integralImageDataSize);
+    }
+
+    if (other.integralImageDataA) {
+        this->integralImageDataA = new DlSumType [integralImageSize];
+        memcpy(this->integralImageDataA, other.integralImageDataA, integralImageDataSize);
+    }
+
+    if (other.kx) {
+        this->kx = new qint64 [oWidth];
+        memcpy(this->kx, other.kx, sizeof(qint64) * oWidth);
+    }
+
+    if (other.ky) {
+        this->ky = new qint64 [oHeight];
+        memcpy(this->ky, other.ky, sizeof(qint64) * oHeight);
+    }
+
+    auto kdlSize = size_t(this->inputCaps.width()) * this->inputCaps.height();
+    auto kdlDataSize = sizeof(DlSumType) * kdlSize;
+
+    if (other.kdl) {
+        this->kdl = new DlSumType [kdlSize];
+        memcpy(this->kdl, other.kdl, kdlDataSize);
+    }
+}
+
+FrameConvertParameters::~FrameConvertParameters()
+{
+    this->clearBuffers();
+    this->clearDlBuffers();
+}
+
+FrameConvertParameters &FrameConvertParameters::operator =(const FrameConvertParameters &other)
+{
+    if (this != &other) {
+        this->inputCaps = other.inputCaps;
+        this->outputCaps = other.outputCaps;
+        this->outputConvertCaps = other.outputConvertCaps;
+        this->outputFrame = other.outputFrame;
+        this->scalingMode = other.scalingMode;
+        this->aspectRatioMode = other.aspectRatioMode;
+        this->convertType = other.convertType;
+        this->convertDataTypes = other.convertDataTypes;
+        this->alphaMode = other.alphaMode;
+        this->resizeMode = other.resizeMode;
+        this->fromEndian = other.fromEndian;
+        this->toEndian = other.toEndian;
+        this->inputWidth = other.inputWidth;
+        this->inputWidth_1 = other.inputWidth_1;
+        this->inputHeight = other.inputHeight;
+        this->outputWidth = other.outputWidth;
+        this->outputHeight = other.outputHeight;
+        this->planeXi = other.planeXi;
+        this->planeYi = other.planeYi;
+        this->planeZi = other.planeZi;
+        this->planeAi = other.planeAi;
+        this->compXi = other.compXi;
+        this->compYi = other.compYi;
+        this->compZi = other.compZi;
+        this->compAi = other.compAi;
+        this->planeXo = other.planeXo;
+        this->planeYo = other.planeYo;
+        this->planeZo = other.planeZo;
+        this->planeAo = other.planeAo;
+        this->compXo = other.compXo;
+        this->compYo = other.compYo;
+        this->compZo = other.compZo;
+        this->compAo = other.compAo;
+        this->xiOffset = other.xiOffset;
+        this->yiOffset = other.yiOffset;
+        this->ziOffset = other.ziOffset;
+        this->aiOffset = other.aiOffset;
+        this->xoOffset = other.xoOffset;
+        this->yoOffset = other.yoOffset;
+        this->zoOffset = other.zoOffset;
+        this->aoOffset = other.aoOffset;
+        this->xiShift = other.xiShift;
+        this->yiShift = other.yiShift;
+        this->ziShift = other.ziShift;
+        this->aiShift = other.aiShift;
+        this->xoShift = other.xoShift;
+        this->yoShift = other.yoShift;
+        this->zoShift = other.zoShift;
+        this->aoShift = other.aoShift;
+        this->maxXi = other.maxXi;
+        this->maxYi = other.maxYi;
+        this->maxZi = other.maxZi;
+        this->maxAi = other.maxAi;
+        this->maskXo = other.maskXo;
+        this->maskYo = other.maskYo;
+        this->maskZo = other.maskZo;
+        this->maskAo = other.maskAo;
+        this->alphaMask = other.alphaMask;
+
+        this->clearBuffers();
+        this->clearDlBuffers();
+
+        auto oWidth = this->outputCaps.width();
+        auto oHeight = this->outputCaps.height();
+
+        size_t oWidthDataSize = sizeof(int) * oWidth;
+        size_t oHeightDataSize = sizeof(int) * oHeight;
+
+        if (other.srcWidth) {
+            this->srcWidth = new int [oWidth];
+            memcpy(this->srcWidth, other.srcWidth, oWidthDataSize);
+        }
+
+        if (other.srcWidth_1) {
+            this->srcWidth_1 = new int [oWidth];
+            memcpy(this->srcWidth_1, other.srcWidth_1, oWidthDataSize);
+        }
+
+        if (other.srcWidthOffsetX) {
+            this->srcWidthOffsetX = new int [oWidth];
+            memcpy(this->srcWidthOffsetX, other.srcWidthOffsetX, oWidthDataSize);
+        }
+
+        if (other.srcWidthOffsetY) {
+            this->srcWidthOffsetY = new int [oWidth];
+            memcpy(this->srcWidthOffsetY, other.srcWidthOffsetY, oWidthDataSize);
+        }
+
+        if (other.srcWidthOffsetZ) {
+            this->srcWidthOffsetZ = new int [oWidth];
+            memcpy(this->srcWidthOffsetZ, other.srcWidthOffsetZ, oWidthDataSize);
+        }
+
+        if (other.srcWidthOffsetA) {
+            this->srcWidthOffsetA = new int [oWidth];
+            memcpy(this->srcWidthOffsetA, other.srcWidthOffsetA, oWidthDataSize);
+        }
+
+        if (other.srcHeight) {
+            this->srcHeight = new int [oHeight];
+            memcpy(this->srcHeight, other.srcHeight, oHeightDataSize);
+        }
+
+        auto iWidth = this->inputCaps.width();
+        size_t iWidthDataSize = sizeof(int) * iWidth;
+
+        if (other.dlSrcWidthOffsetX) {
+            this->dlSrcWidthOffsetX = new int [iWidth];
+            memcpy(this->dlSrcWidthOffsetX, other.dlSrcWidthOffsetX, iWidthDataSize);
+        }
+
+        if (other.dlSrcWidthOffsetY) {
+            this->dlSrcWidthOffsetY = new int [iWidth];
+            memcpy(this->dlSrcWidthOffsetY, other.dlSrcWidthOffsetY, iWidthDataSize);
+        }
+
+        if (other.dlSrcWidthOffsetZ) {
+            this->dlSrcWidthOffsetZ = new int [iWidth];
+            memcpy(this->dlSrcWidthOffsetZ, other.dlSrcWidthOffsetZ, iWidthDataSize);
+        }
+
+        if (other.dlSrcWidthOffsetA) {
+            this->dlSrcWidthOffsetA = new int [iWidth];
+            memcpy(this->dlSrcWidthOffsetA, other.dlSrcWidthOffsetA, iWidthDataSize);
+        }
+
+        if (other.srcWidthOffsetX_1) {
+            this->srcWidthOffsetX_1 = new int [oWidth];
+            memcpy(this->srcWidthOffsetX_1, other.srcWidthOffsetX_1, oWidthDataSize);
+        }
+
+        if (other.srcWidthOffsetY_1) {
+            this->srcWidthOffsetY_1 = new int [oWidth];
+            memcpy(this->srcWidthOffsetY_1, other.srcWidthOffsetY_1, oWidthDataSize);
+        }
+
+        if (other.srcWidthOffsetZ_1) {
+            this->srcWidthOffsetZ_1 = new int [oWidth];
+            memcpy(this->srcWidthOffsetZ_1, other.srcWidthOffsetZ_1, oWidthDataSize);
+        }
+
+        if (other.srcWidthOffsetA_1) {
+            this->srcWidthOffsetA_1 = new int [oWidth];
+            memcpy(this->srcWidthOffsetA_1, other.srcWidthOffsetA_1, oWidthDataSize);
+        }
+
+        if (other.srcHeight_1) {
+            this->srcHeight_1 = new int [oHeight];
+            memcpy(this->srcHeight_1, other.srcHeight_1, oHeightDataSize);
+        }
+
+        if (other.dstWidthOffsetX) {
+            this->dstWidthOffsetX = new int [oWidth];
+            memcpy(this->dstWidthOffsetX, other.dstWidthOffsetX, oWidthDataSize);
+        }
+
+        if (other.dstWidthOffsetY) {
+            this->dstWidthOffsetY = new int [oWidth];
+            memcpy(this->dstWidthOffsetY, other.dstWidthOffsetY, oWidthDataSize);
+        }
+
+        if (other.dstWidthOffsetZ) {
+            this->dstWidthOffsetZ = new int [oWidth];
+            memcpy(this->dstWidthOffsetZ, other.dstWidthOffsetZ, oWidthDataSize);
+        }
+
+        if (other.dstWidthOffsetA) {
+            this->dstWidthOffsetA = new int [oWidth];
+            memcpy(this->dstWidthOffsetA, other.dstWidthOffsetA, oWidthDataSize);
+        }
+
+        size_t oHeightDlDataSize = sizeof(size_t) * oHeight;
+
+        if (other.srcHeightDlOffset) {
+            this->srcHeightDlOffset = new size_t [oHeight];
+            memcpy(this->srcHeightDlOffset, other.srcHeightDlOffset, oHeightDlDataSize);
+        }
+
+        if (other.srcHeightDlOffset_1) {
+            this->srcHeightDlOffset_1 = new size_t [oHeight];
+            memcpy(this->srcHeightDlOffset_1, other.srcHeightDlOffset_1, oHeightDlDataSize);
+        }
+
+        size_t iWidth_1 = this->inputCaps.width() + 1;
+        size_t iHeight_1 = this->inputCaps.height() + 1;
+        size_t integralImageSize = iWidth_1 * iHeight_1;
+        size_t integralImageDataSize = sizeof(DlSumType) * integralImageSize;
+
+        if (other.integralImageDataX) {
+            this->integralImageDataX = new DlSumType [integralImageSize];
+            memcpy(this->integralImageDataX, other.integralImageDataX, integralImageDataSize);
+        }
+
+        if (other.integralImageDataY) {
+            this->integralImageDataY = new DlSumType [integralImageSize];
+            memcpy(this->integralImageDataY, other.integralImageDataY, integralImageDataSize);
+        }
+
+        if (other.integralImageDataZ) {
+            this->integralImageDataZ = new DlSumType [integralImageSize];
+            memcpy(this->integralImageDataZ, other.integralImageDataZ, integralImageDataSize);
+        }
+
+        if (other.integralImageDataA) {
+            this->integralImageDataA = new DlSumType [integralImageSize];
+            memcpy(this->integralImageDataA, other.integralImageDataA, integralImageDataSize);
+        }
+
+        if (other.kx) {
+            this->kx = new qint64 [oWidth];
+            memcpy(this->kx, other.kx, sizeof(qint64) * oWidth);
+        }
+
+        if (other.ky) {
+            this->ky = new qint64 [oHeight];
+            memcpy(this->ky, other.ky, sizeof(qint64) * oHeight);
+        }
+
+        auto kdlSize = size_t(this->inputCaps.width()) * this->inputCaps.height();
+        auto kdlDataSize = sizeof(DlSumType) * kdlSize;
+
+        if (other.kdl) {
+            this->kdl = new DlSumType [kdlSize];
+            memcpy(this->kdl, other.kdl, kdlDataSize);
+        }
+    }
+
+    return *this;
+}
+
+void FrameConvertParameters::clearBuffers()
+{
+    if (this->srcWidth) {
+        delete [] this->srcWidth;
+        this->srcWidth = nullptr;
+    }
+
+    if (this->srcWidth_1) {
+        delete [] this->srcWidth_1;
+        this->srcWidth_1 = nullptr;
+    }
+
+    if (this->srcWidthOffsetX) {
+        delete [] this->srcWidthOffsetX;
+        this->srcWidthOffsetX = nullptr;
+    }
+
+    if (this->srcWidthOffsetY) {
+        delete [] this->srcWidthOffsetY;
+        this->srcWidthOffsetY = nullptr;
+    }
+
+    if (this->srcWidthOffsetZ) {
+        delete [] this->srcWidthOffsetZ;
+        this->srcWidthOffsetZ = nullptr;
+    }
+
+    if (this->srcWidthOffsetA) {
+        delete [] this->srcWidthOffsetA;
+        this->srcWidthOffsetA = nullptr;
+    }
+
+    if (this->srcHeight) {
+        delete [] this->srcHeight;
+        this->srcHeight = nullptr;
+    }
+
+    if (this->srcWidthOffsetX_1) {
+        delete [] this->srcWidthOffsetX_1;
+        this->srcWidthOffsetX_1 = nullptr;
+    }
+
+    if (this->srcWidthOffsetY_1) {
+        delete [] this->srcWidthOffsetY_1;
+        this->srcWidthOffsetY_1 = nullptr;
+    }
+
+    if (this->srcWidthOffsetZ_1) {
+        delete [] this->srcWidthOffsetZ_1;
+        this->srcWidthOffsetZ_1 = nullptr;
+    }
+
+    if (this->srcWidthOffsetA_1) {
+        delete [] this->srcWidthOffsetA_1;
+        this->srcWidthOffsetA_1 = nullptr;
+    }
+
+    if (this->srcHeight_1) {
+        delete [] this->srcHeight_1;
+        this->srcHeight_1 = nullptr;
+    }
+
+    if (this->dstWidthOffsetX) {
+        delete [] this->dstWidthOffsetX;
+        this->dstWidthOffsetX = nullptr;
+    }
+
+    if (this->dstWidthOffsetY) {
+        delete [] this->dstWidthOffsetY;
+        this->dstWidthOffsetY = nullptr;
+    }
+
+    if (this->dstWidthOffsetZ) {
+        delete [] this->dstWidthOffsetZ;
+        this->dstWidthOffsetZ = nullptr;
+    }
+
+    if (this->dstWidthOffsetA) {
+        delete [] this->dstWidthOffsetA;
+        this->dstWidthOffsetA = nullptr;
+    }
+
+    if (this->kx) {
+        delete [] this->kx;
+        this->kx = nullptr;
+    }
+
+    if (this->ky) {
+        delete [] this->ky;
+        this->ky = nullptr;
+    }
+}
+
+void FrameConvertParameters::clearDlBuffers()
+{
+    if (this->integralImageDataX) {
+        delete [] this->integralImageDataX;
+        this->integralImageDataX = nullptr;
+    }
+
+    if (this->integralImageDataY) {
+        delete [] this->integralImageDataY;
+        this->integralImageDataY = nullptr;
+    }
+
+    if (this->integralImageDataZ) {
+        delete [] this->integralImageDataZ;
+        this->integralImageDataZ = nullptr;
+    }
+
+    if (this->integralImageDataA) {
+        delete [] this->integralImageDataA;
+        this->integralImageDataA = nullptr;
+    }
+
+    if (this->kdl) {
+        delete [] this->kdl;
+        this->kdl = nullptr;
+    }
+
+    if (this->srcHeightDlOffset) {
+        delete [] this->srcHeightDlOffset;
+        this->srcHeightDlOffset = nullptr;
+    }
+
+    if (this->srcHeightDlOffset_1) {
+        delete [] this->srcHeightDlOffset_1;
+        this->srcHeightDlOffset_1 = nullptr;
+    }
+
+    if (this->dlSrcWidthOffsetX) {
+        delete [] this->dlSrcWidthOffsetX;
+        this->dlSrcWidthOffsetX = nullptr;
+    }
+
+    if (this->dlSrcWidthOffsetY) {
+        delete [] this->dlSrcWidthOffsetY;
+        this->dlSrcWidthOffsetY = nullptr;
+    }
+
+    if (this->dlSrcWidthOffsetZ) {
+        delete [] this->dlSrcWidthOffsetZ;
+        this->dlSrcWidthOffsetZ = nullptr;
+    }
+
+    if (this->dlSrcWidthOffsetA) {
+        delete [] this->dlSrcWidthOffsetA;
+        this->dlSrcWidthOffsetA = nullptr;
+    }
+}
+
+void FrameConvertParameters::allocateBuffers(const AkVideoCaps &ocaps)
+{
+    this->clearBuffers();
+
+    this->srcWidth = new int [ocaps.width()];
+    this->srcWidth_1 = new int [ocaps.width()];
+    this->srcWidthOffsetX = new int [ocaps.width()];
+    this->srcWidthOffsetY = new int [ocaps.width()];
+    this->srcWidthOffsetZ = new int [ocaps.width()];
+    this->srcWidthOffsetA = new int [ocaps.width()];
+    this->srcHeight = new int [ocaps.height()];
+
+    this->srcWidthOffsetX_1 = new int [ocaps.width()];
+    this->srcWidthOffsetY_1 = new int [ocaps.width()];
+    this->srcWidthOffsetZ_1 = new int [ocaps.width()];
+    this->srcWidthOffsetA_1 = new int [ocaps.width()];
+    this->srcHeight_1 = new int [ocaps.height()];
+
+    this->dstWidthOffsetX = new int [ocaps.width()];
+    this->dstWidthOffsetY = new int [ocaps.width()];
+    this->dstWidthOffsetZ = new int [ocaps.width()];
+    this->dstWidthOffsetA = new int [ocaps.width()];
+
+    this->kx = new qint64 [ocaps.width()];
+    this->ky = new qint64 [ocaps.height()];
+}
+
+void FrameConvertParameters::allocateDlBuffers(const AkVideoCaps &icaps,
+                                               const AkVideoCaps &ocaps)
+{
+    size_t width_1 = icaps.width() + 1;
+    size_t height_1 = icaps.height() + 1;
+    auto integralImageSize = width_1 * height_1;
+
+    this->integralImageDataX = new DlSumType [integralImageSize];
+    this->integralImageDataY = new DlSumType [integralImageSize];
+    this->integralImageDataZ = new DlSumType [integralImageSize];
+    this->integralImageDataA = new DlSumType [integralImageSize];
+    memset(this->integralImageDataX, 0, integralImageSize);
+    memset(this->integralImageDataY, 0, integralImageSize);
+    memset(this->integralImageDataZ, 0, integralImageSize);
+    memset(this->integralImageDataA, 0, integralImageSize);
+
+    auto kdlSize = size_t(icaps.width()) * icaps.height();
+    this->kdl = new DlSumType [kdlSize];
+    memset(this->kdl, 0, kdlSize);
+
+    this->srcHeightDlOffset = new size_t [ocaps.height()];
+    this->srcHeightDlOffset_1 = new size_t [ocaps.height()];
+
+    this->dlSrcWidthOffsetX = new int [icaps.width()];
+    this->dlSrcWidthOffsetY = new int [icaps.width()];
+    this->dlSrcWidthOffsetZ = new int [icaps.width()];
+    this->dlSrcWidthOffsetA = new int [icaps.width()];
+}
+
+void FrameConvertParameters::setOutputConvertCaps(const AkVideoCaps &icaps,
+                                                  const AkVideoCaps &ocaps,
+                                                  AkVideoConverter::AspectRatioMode aspectRatioMode)
+{
+    this->outputConvertCaps = ocaps;
+
+    if (this->outputConvertCaps.format() == AkVideoCaps::Format_none)
+        this->outputConvertCaps.setFormat(icaps.format());
+
+    int width = this->outputConvertCaps.width() > 1?
+                    this->outputConvertCaps.width():
+                    icaps.width();
+    int height = this->outputConvertCaps.height() > 1?
+                     this->outputConvertCaps.height():
+                     icaps.height();
+
+    if (aspectRatioMode == AkVideoConverter::AspectRatioMode_Keep) {
+        auto w = height * icaps.width() / icaps.height();
+        auto h = width * icaps.height() / icaps.width();
+
+        if (w > width)
+            w = width;
+        else if (h > height)
+            h = height;
+
+        width = w;
+        height = h;
+    }
+
+    this->outputConvertCaps.setWidth(width);
+    this->outputConvertCaps.setHeight(height);
+    this->outputConvertCaps.setFps(icaps.fps());
+}
+
+#define DEFINE_CONVERT_TYPES(isize, osize) \
+    if (ispecs.byteLength() == (isize / 8) && ospecs.byteLength() == (osize / 8)) \
+        this->convertDataTypes = ConvertDataTypes_##isize##_##osize;
+
+void FrameConvertParameters::configure(const AkVideoCaps &icaps,
+                                       const AkVideoCaps &ocaps,
+                                       ColorConvert &colorConvert,
+                                       AkVideoConverter::YuvColorSpace yuvColorSpace,
+                                       AkVideoConverter::YuvColorSpaceType yuvColorSpaceType)
+{
+    this->outputFrame = {ocaps};
+
+    auto ispecs = AkVideoCaps::formatSpecs(icaps.format());
+    auto ospecs = AkVideoCaps::formatSpecs(ocaps.format());
+
+    DEFINE_CONVERT_TYPES(8, 8);
+    DEFINE_CONVERT_TYPES(8, 16);
+    DEFINE_CONVERT_TYPES(8, 32);
+    DEFINE_CONVERT_TYPES(16, 8);
+    DEFINE_CONVERT_TYPES(16, 16);
+    DEFINE_CONVERT_TYPES(16, 32);
+    DEFINE_CONVERT_TYPES(32, 8);
+    DEFINE_CONVERT_TYPES(32, 16);
+    DEFINE_CONVERT_TYPES(32, 32);
+
+    auto icomponents = ispecs.mainComponents();
+    auto ocomponents = ospecs.mainComponents();
+
+    if (icomponents == 3 && ispecs.type() == ospecs.type())
+        this->convertType = ConvertType_Vector;
+    else if (icomponents == 3 && ocomponents == 3)
+        this->convertType = ConvertType_3to3;
+    else if (icomponents == 3 && ocomponents == 1)
+        this->convertType = ConvertType_3to1;
+    else if (icomponents == 1 && ocomponents == 3)
+        this->convertType = ConvertType_1to3;
+    else if (icomponents == 1 && ocomponents == 1)
+        this->convertType = ConvertType_1to1;
+
+    this->fromEndian = ispecs.endianness();
+    this->toEndian = ospecs.endianness();
+    colorConvert.setYuvColorSpace(yuvColorSpace);
+    colorConvert.setYuvColorSpaceType(yuvColorSpaceType);
+    colorConvert.loadMatrix(ispecs, ospecs);
+
+    switch (ispecs.type()) {
+    case AkVideoFormatSpec::VFT_RGB:
+        this->planeXi = ispecs.componentPlane(AkColorComponent::CT_R);
+        this->planeYi = ispecs.componentPlane(AkColorComponent::CT_G);
+        this->planeZi = ispecs.componentPlane(AkColorComponent::CT_B);
+
+        this->compXi = ispecs.component(AkColorComponent::CT_R);
+        this->compYi = ispecs.component(AkColorComponent::CT_G);
+        this->compZi = ispecs.component(AkColorComponent::CT_B);
+
+        break;
+
+    case AkVideoFormatSpec::VFT_YUV:
+        this->planeXi = ispecs.componentPlane(AkColorComponent::CT_Y);
+        this->planeYi = ispecs.componentPlane(AkColorComponent::CT_U);
+        this->planeZi = ispecs.componentPlane(AkColorComponent::CT_V);
+
+        this->compXi = ispecs.component(AkColorComponent::CT_Y);
+        this->compYi = ispecs.component(AkColorComponent::CT_U);
+        this->compZi = ispecs.component(AkColorComponent::CT_V);
+
+        break;
+
+    case AkVideoFormatSpec::VFT_Gray:
+        this->planeXi = ispecs.componentPlane(AkColorComponent::CT_Y);
+        this->compXi = ispecs.component(AkColorComponent::CT_Y);
+
+        break;
+
+    default:
+        break;
+    }
+
+    this->planeAi = ispecs.componentPlane(AkColorComponent::CT_A);
+    this->compAi = ispecs.component(AkColorComponent::CT_A);
+
+    switch (ospecs.type()) {
+    case AkVideoFormatSpec::VFT_RGB:
+        this->planeXo = ospecs.componentPlane(AkColorComponent::CT_R);
+        this->planeYo = ospecs.componentPlane(AkColorComponent::CT_G);
+        this->planeZo = ospecs.componentPlane(AkColorComponent::CT_B);
+
+        this->compXo = ospecs.component(AkColorComponent::CT_R);
+        this->compYo = ospecs.component(AkColorComponent::CT_G);
+        this->compZo = ospecs.component(AkColorComponent::CT_B);
+
+        break;
+
+    case AkVideoFormatSpec::VFT_YUV:
+        this->planeXo = ospecs.componentPlane(AkColorComponent::CT_Y);
+        this->planeYo = ospecs.componentPlane(AkColorComponent::CT_U);
+        this->planeZo = ospecs.componentPlane(AkColorComponent::CT_V);
+
+        this->compXo = ospecs.component(AkColorComponent::CT_Y);
+        this->compYo = ospecs.component(AkColorComponent::CT_U);
+        this->compZo = ospecs.component(AkColorComponent::CT_V);
+
+        break;
+
+    case AkVideoFormatSpec::VFT_Gray:
+        this->planeXo = ospecs.componentPlane(AkColorComponent::CT_Y);
+        this->compXo = ospecs.component(AkColorComponent::CT_Y);
+
+        break;
+
+    default:
+        break;
+    }
+
+    this->planeAo = ospecs.componentPlane(AkColorComponent::CT_A);
+    this->compAo = ospecs.component(AkColorComponent::CT_A);
+
+    this->xiOffset = this->compXi.offset();
+    this->yiOffset = this->compYi.offset();
+    this->ziOffset = this->compZi.offset();
+    this->aiOffset = this->compAi.offset();
+
+    this->xoOffset = this->compXo.offset();
+    this->yoOffset = this->compYo.offset();
+    this->zoOffset = this->compZo.offset();
+    this->aoOffset = this->compAo.offset();
+
+    this->xiShift = this->compXi.shift();
+    this->yiShift = this->compYi.shift();
+    this->ziShift = this->compZi.shift();
+    this->aiShift = this->compAi.shift();
+
+    this->xoShift = this->compXo.shift();
+    this->yoShift = this->compYo.shift();
+    this->zoShift = this->compZo.shift();
+    this->aoShift = this->compAo.shift();
+
+    this->maxXi = this->compXi.max<quint64>();
+    this->maxYi = this->compYi.max<quint64>();
+    this->maxZi = this->compZi.max<quint64>();
+    this->maxAi = this->compAi.max<quint64>();
+
+    this->maskXo = ~(this->compXo.max<quint64>() << this->compXo.shift());
+    this->maskYo = ~(this->compYo.max<quint64>() << this->compYo.shift());
+    this->maskZo = ~(this->compZo.max<quint64>() << this->compZo.shift());
+    this->alphaMask = this->compAo.max<quint64>() << this->compAo.shift();
+    this->maskAo = ~this->alphaMask;
+
+    bool hasAlphaIn = ispecs.contains(AkColorComponent::CT_A);
+    bool hasAlphaOut = ospecs.contains(AkColorComponent::CT_A);
+
+    if (hasAlphaIn && hasAlphaOut)
+        this->alphaMode = AlphaMode_AI_AO;
+    else if (hasAlphaIn && !hasAlphaOut)
+        this->alphaMode = AlphaMode_AI_O;
+    else if (!hasAlphaIn && hasAlphaOut)
+        this->alphaMode = AlphaMode_I_AO;
+    else if (!hasAlphaIn && !hasAlphaOut)
+        this->alphaMode = AlphaMode_I_O;
+}
+
+void FrameConvertParameters::configureScaling(const AkVideoCaps &icaps,
+                                              const AkVideoCaps &ocaps,
+                                              AkVideoConverter::AspectRatioMode aspectRatioMode)
+{
+    if (ocaps.width() > icaps.width() || ocaps.height() > icaps.height())
+        this->resizeMode = ResizeMode_Up;
+    else if (ocaps.width() < icaps.width() || ocaps.height() < icaps.height())
+        this->resizeMode = ResizeMode_Down;
+    else
+        this->resizeMode = ResizeMode_Keep;
+
+    QRect inputRect;
+
+    if (aspectRatioMode == AkVideoConverter::AspectRatioMode_Expanding) {
+        auto w = icaps.height() * ocaps.width() / ocaps.height();
+        auto h = icaps.width() * ocaps.height() / ocaps.width();
+
+        if (w > icaps.width())
+            w = icaps.width();
+
+        if (h > icaps.height())
+            h = icaps.height();
+
+        auto x = (icaps.width() - w) / 2;
+        auto y = (icaps.height() - h) / 2;
+
+        inputRect = {x, y, w, h};
+    } else {
+        inputRect = {0, 0, icaps.width(), icaps.height()};
+    }
+
+    this->allocateBuffers(ocaps);
+
+    int wi_1 = qMax(1, inputRect.width() - 1);
+    int wo_1 = qMax(1, ocaps.width() - 1);
+
+    auto xSrcToDst = [&inputRect, &wi_1, &wo_1] (int x) -> int {
+        return (x - inputRect.x()) * wo_1 / wi_1;
+    };
+
+    auto xDstToSrc = [&inputRect, &wi_1, &wo_1] (int x) -> int {
+        return (x * wi_1 + inputRect.x() * wo_1) / wo_1;
+    };
+
+    for (int x = 0; x < ocaps.width(); ++x) {
+        auto xs = xDstToSrc(x);
+        auto xs_1 = xDstToSrc(qMin(x + 1, ocaps.width() - 1));
+        auto xmin = xSrcToDst(xs);
+        auto xmax = xSrcToDst(xs + 1);
+
+        this->srcWidth[x]   = xs;
+        this->srcWidth_1[x] = qMin(xDstToSrc(x + 1), icaps.width());
+        this->srcWidthOffsetX[x] = (xs >> this->compXi.widthDiv()) * this->compXi.step();
+        this->srcWidthOffsetY[x] = (xs >> this->compYi.widthDiv()) * this->compYi.step();
+        this->srcWidthOffsetZ[x] = (xs >> this->compZi.widthDiv()) * this->compZi.step();
+        this->srcWidthOffsetA[x] = (xs >> this->compAi.widthDiv()) * this->compAi.step();
+
+        this->srcWidthOffsetX_1[x] = (xs_1 >> this->compXi.widthDiv()) * this->compXi.step();
+        this->srcWidthOffsetY_1[x] = (xs_1 >> this->compYi.widthDiv()) * this->compYi.step();
+        this->srcWidthOffsetZ_1[x] = (xs_1 >> this->compZi.widthDiv()) * this->compZi.step();
+        this->srcWidthOffsetA_1[x] = (xs_1 >> this->compAi.widthDiv()) * this->compAi.step();
+
+        this->dstWidthOffsetX[x] = (x >> this->compXo.widthDiv()) * this->compXo.step();
+        this->dstWidthOffsetY[x] = (x >> this->compYo.widthDiv()) * this->compYo.step();
+        this->dstWidthOffsetZ[x] = (x >> this->compZo.widthDiv()) * this->compZo.step();
+        this->dstWidthOffsetA[x] = (x >> this->compAo.widthDiv()) * this->compAo.step();
+
+        if (xmax > xmin)
+            this->kx[x] = SCALE_EMULT * (x - xmin) / (xmax - xmin);
+        else
+            this->kx[x] = 0;
+    }
+
+    int hi_1 = qMax(1, inputRect.height() - 1);
+    int ho_1 = qMax(1, ocaps.height() - 1);
+
+    auto ySrcToDst = [&inputRect, &hi_1, &ho_1] (int y) -> int {
+        return (y - inputRect.y()) * ho_1 / hi_1;
+    };
+
+    auto yDstToSrc = [&inputRect, &hi_1, &ho_1] (int y) -> int {
+        return (y * hi_1 + inputRect.y() * ho_1) / ho_1;
+    };
+
+    for (int y = 0; y < ocaps.height(); ++y) {
+        if (this->resizeMode == ResizeMode_Down) {
+            this->srcHeight[y] = yDstToSrc(y);
+            this->srcHeight_1[y] = qMin(yDstToSrc(y + 1), icaps.height());
+        } else {
+            auto ys = yDstToSrc(y);
+            auto ys_1 = yDstToSrc(qMin(y + 1, ocaps.height() - 1));
+            auto ymin = ySrcToDst(ys);
+            auto ymax = ySrcToDst(ys + 1);
+
+            this->srcHeight[y] = ys;
+            this->srcHeight_1[y] = ys_1;
+
+            if (ymax > ymin)
+                this->ky[y] = SCALE_EMULT * (y - ymin) / (ymax - ymin);
+            else
+                this->ky[y] = 0;
+        }
+    }
+
+    this->inputWidth = icaps.width();
+    this->inputWidth_1 = icaps.width() + 1;
+    this->inputHeight = icaps.height();
+    this->outputWidth = ocaps.width();
+    this->outputHeight = ocaps.height();
+
+    this->clearDlBuffers();
+
+    if (this->resizeMode == ResizeMode_Down) {
+        this->allocateDlBuffers(icaps, ocaps);
+
+        for (int x = 0; x < icaps.width(); ++x) {
+            this->dlSrcWidthOffsetX[x] = (x >> this->compXi.widthDiv()) * this->compXi.step();
+            this->dlSrcWidthOffsetY[x] = (x >> this->compYi.widthDiv()) * this->compYi.step();
+            this->dlSrcWidthOffsetZ[x] = (x >> this->compZi.widthDiv()) * this->compZi.step();
+            this->dlSrcWidthOffsetA[x] = (x >> this->compAi.widthDiv()) * this->compAi.step();
+        }
+
+        for (int y = 0; y < this->outputHeight; ++y) {
+            auto &ys = this->srcHeight[y];
+            auto &ys_1 = this->srcHeight_1[y];
+
+            this->srcHeightDlOffset[y] = size_t(ys) * this->inputWidth_1;
+            this->srcHeightDlOffset_1[y] = size_t(ys_1) * this->inputWidth_1;
+
+            auto diffY = ys_1 - ys;
+            auto line = this->kdl + size_t(y) * icaps.width();
+
+            for (int x = 0; x < this->outputWidth; ++x) {
+                auto diffX = this->srcWidth_1[x] - this->srcWidth[x];
+                line[x] = diffX * diffY;
+            }
+        }
+    }
+}
+
+void FrameConvertParameters::reset()
+{
+    this->inputCaps = AkVideoCaps();
+    this->outputCaps = AkVideoCaps();
+    this->outputConvertCaps = AkVideoCaps();
+    this->outputFrame = AkVideoPacket();
+    this->scalingMode = AkVideoConverter::ScalingMode_Fast;
+    this->aspectRatioMode = AkVideoConverter::AspectRatioMode_Ignore;
+    this->convertType = ConvertType_Vector;
+    this->convertDataTypes = ConvertDataTypes_8_8;
+    this->alphaMode = AlphaMode_AI_AO;
+    this->resizeMode = ResizeMode_Keep;
+
+    this->fromEndian = Q_BYTE_ORDER;
+    this->toEndian = Q_BYTE_ORDER;
+
+    this->clearBuffers();
+    this->clearDlBuffers();
+
+    this->inputWidth = 0;
+    this->inputHeight = 0;
+    this->outputWidth = 0;
+    this->outputHeight = 0;
+
+    this->planeXi = 0;
+    this->planeYi = 0;
+    this->planeZi = 0;
+    this->planeAi = 0;
+
+    this->compXi = {};
+    this->compYi = {};
+    this->compZi = {};
+    this->compAi = {};
+
+    this->planeXo = 0;
+    this->planeYo = 0;
+    this->planeZo = 0;
+    this->planeAo = 0;
+
+    this->compXo = {};
+    this->compYo = {};
+    this->compZo = {};
+    this->compAo = {};
+
+    this->xiOffset = 0;
+    this->yiOffset = 0;
+    this->ziOffset = 0;
+    this->aiOffset = 0;
+
+    this->xoOffset = 0;
+    this->yoOffset = 0;
+    this->zoOffset = 0;
+    this->aoOffset = 0;
+
+    this->xiShift = 0;
+    this->yiShift = 0;
+    this->ziShift = 0;
+    this->aiShift = 0;
+
+    this->xoShift = 0;
+    this->yoShift = 0;
+    this->zoShift = 0;
+    this->aoShift = 0;
+
+    this->maxXi = 0;
+    this->maxYi = 0;
+    this->maxZi = 0;
+    this->maxAi = 0;
+
+    this->maskXo = 0;
+    this->maskYo = 0;
+    this->maskZo = 0;
+    this->maskAo = 0;
+
+    this->alphaMask = 0;
+}
+
+#include "moc_akvideoconverter.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/akvideoconverter.h
@@ -0,0 +1,146 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef AKVIDEOCONVERTER_H
+#define AKVIDEOCONVERTER_H
+
+#include <QObject>
+
+#include "akcommons.h"
+
+class AkVideoConverterPrivate;
+class AkVideoCaps;
+class AkVideoPacket;
+
+class AKCOMMONS_EXPORT AkVideoConverter: public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(AkVideoCaps outputCaps
+               READ outputCaps
+               WRITE setOutputCaps
+               RESET resetOutputCaps
+               NOTIFY outputCapsChanged)
+    Q_PROPERTY(YuvColorSpace yuvColorSpace
+               READ yuvColorSpace
+               WRITE setYuvColorSpace
+               RESET resetYuvColorSpace
+               NOTIFY yuvColorSpaceChanged)
+    Q_PROPERTY(YuvColorSpaceType yuvColorSpaceType
+               READ yuvColorSpaceType
+               WRITE setYuvColorSpaceType
+               RESET resetYuvColorSpaceType
+               NOTIFY yuvColorSpaceTypeChanged)
+    Q_PROPERTY(AkVideoConverter::ScalingMode scalingMode
+               READ scalingMode
+               WRITE setScalingMode
+               RESET resetScalingMode
+               NOTIFY scalingModeChanged)
+    Q_PROPERTY(AkVideoConverter::AspectRatioMode aspectRatioMode
+               READ aspectRatioMode
+               WRITE setAspectRatioMode
+               RESET resetAspectRatioMode
+               NOTIFY aspectRatioModeChanged)
+
+    public:
+        enum YuvColorSpace
+        {
+            YuvColorSpace_AVG,
+            YuvColorSpace_ITUR_BT601,
+            YuvColorSpace_ITUR_BT709,
+            YuvColorSpace_ITUR_BT2020,
+            YuvColorSpace_SMPTE_240M
+        };
+        Q_ENUM(YuvColorSpace)
+
+        enum YuvColorSpaceType
+        {
+            YuvColorSpaceType_StudioSwing,
+            YuvColorSpaceType_FullSwing
+        };
+        Q_ENUM(YuvColorSpaceType)
+
+        enum ScalingMode {
+            ScalingMode_Fast,
+            ScalingMode_Linear
+        };
+        Q_ENUM(ScalingMode)
+
+        enum AspectRatioMode {
+            AspectRatioMode_Ignore,
+            AspectRatioMode_Keep,
+            AspectRatioMode_Expanding
+        };
+        Q_ENUM(AspectRatioMode)
+
+        AkVideoConverter(QObject *parent=nullptr);
+        AkVideoConverter(const AkVideoCaps &outputCaps,
+                         QObject *parent=nullptr);
+        AkVideoConverter(const AkVideoConverter &other);
+        ~AkVideoConverter();
+        AkVideoConverter &operator =(const AkVideoConverter &other);
+
+        Q_INVOKABLE static QObject *create();
+
+        Q_INVOKABLE AkVideoCaps outputCaps() const;
+        Q_INVOKABLE YuvColorSpace yuvColorSpace() const;
+        Q_INVOKABLE YuvColorSpaceType yuvColorSpaceType() const;
+        Q_INVOKABLE AkVideoConverter::ScalingMode scalingMode() const;
+        Q_INVOKABLE AkVideoConverter::AspectRatioMode aspectRatioMode() const;
+        Q_INVOKABLE bool begin();
+        Q_INVOKABLE void end();
+        Q_INVOKABLE AkVideoPacket convert(const AkVideoPacket &packet);
+
+    private:
+        AkVideoConverterPrivate *d;
+
+    Q_SIGNALS:
+        void outputCapsChanged(const AkVideoCaps &outputCaps);
+        void yuvColorSpaceChanged(YuvColorSpace yuvColorSpace);
+        void yuvColorSpaceTypeChanged(YuvColorSpaceType yuvColorSpaceType);
+        void scalingModeChanged(AkVideoConverter::ScalingMode scalingMode);
+        void aspectRatioModeChanged(AkVideoConverter::AspectRatioMode aspectRatioMode);
+
+    public Q_SLOTS:
+        void setCacheIndex(int index);
+        void setOutputCaps(const AkVideoCaps &outputCaps);
+        void setYuvColorSpace(YuvColorSpace yuvColorSpace);
+        void setYuvColorSpaceType(YuvColorSpaceType yuvColorSpaceType);
+        void setScalingMode(AkVideoConverter::ScalingMode scalingMode);
+        void setAspectRatioMode(AkVideoConverter::AspectRatioMode aspectRatioMode);
+        void resetOutputCaps();
+        void resetYuvColorSpace();
+        void resetYuvColorSpaceType();
+        void resetScalingMode();
+        void resetAspectRatioMode();
+        void reset();
+        static void registerTypes();
+};
+
+AKCOMMONS_EXPORT QDebug operator <<(QDebug debug, AkVideoConverter::YuvColorSpace yuvColorSpace);
+AKCOMMONS_EXPORT QDebug operator <<(QDebug debug, AkVideoConverter::YuvColorSpaceType yuvColorSpaceType);
+AKCOMMONS_EXPORT QDebug operator <<(QDebug debug, AkVideoConverter::ScalingMode mode);
+AKCOMMONS_EXPORT QDebug operator <<(QDebug debug, AkVideoConverter::AspectRatioMode mode);
+
+Q_DECLARE_METATYPE(AkVideoConverter)
+Q_DECLARE_METATYPE(AkVideoConverter::YuvColorSpace)
+Q_DECLARE_METATYPE(AkVideoConverter::YuvColorSpaceType)
+Q_DECLARE_METATYPE(AkVideoConverter::ScalingMode)
+Q_DECLARE_METATYPE(AkVideoConverter::AspectRatioMode)
+
+#endif // AKVIDEOCONVERTER_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/akvideoformatspec.cpp
@@ -0,0 +1,310 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QDataStream>
+#include <QDebug>
+#include <QMetaEnum>
+#include <QQmlEngine>
+
+#include "akvideoformatspec.h"
+
+class AkVideoFormatSpecPrivate
+{
+    public:
+        AkVideoFormatSpec::VideoFormatType m_type {AkVideoFormatSpec::VFT_Unknown};
+        int m_endianness {Q_BYTE_ORDER};
+        AkColorPlanes m_planes;
+};
+
+AkVideoFormatSpec::AkVideoFormatSpec(QObject *parent):
+    QObject(parent)
+{
+    this->d = new AkVideoFormatSpecPrivate();
+}
+
+AkVideoFormatSpec::AkVideoFormatSpec(VideoFormatType type,
+                                     int endianness,
+                                     const AkColorPlanes &planes):
+    QObject()
+{
+    this->d = new AkVideoFormatSpecPrivate();
+    this->d->m_type = type;
+    this->d->m_endianness = endianness;
+    this->d->m_planes = planes;
+}
+
+AkVideoFormatSpec::AkVideoFormatSpec(const AkVideoFormatSpec &other):
+    QObject()
+{
+    this->d = new AkVideoFormatSpecPrivate();
+    this->d->m_type = other.d->m_type;
+    this->d->m_endianness = other.d->m_endianness;
+    this->d->m_planes = other.d->m_planes;
+}
+
+AkVideoFormatSpec::~AkVideoFormatSpec()
+{
+    delete this->d;
+}
+
+AkVideoFormatSpec &AkVideoFormatSpec::operator =(const AkVideoFormatSpec &other)
+{
+    if (this != &other) {
+        this->d->m_type = other.d->m_type;
+        this->d->m_endianness = other.d->m_endianness;
+        this->d->m_planes = other.d->m_planes;
+    }
+
+    return *this;
+}
+
+bool AkVideoFormatSpec::operator ==(const AkVideoFormatSpec &other) const
+{
+    return this->d->m_type == other.d->m_type
+            && this->d->m_endianness == other.d->m_endianness
+            && this->d->m_planes == other.d->m_planes;
+}
+
+bool AkVideoFormatSpec::operator !=(const AkVideoFormatSpec &other) const
+{
+    return !(*this == other);
+}
+
+QObject *AkVideoFormatSpec::create()
+{
+    return new AkVideoFormatSpec();
+}
+
+QObject *AkVideoFormatSpec::create(const AkVideoFormatSpec &other)
+{
+    return new AkVideoFormatSpec(other);
+}
+
+QObject *AkVideoFormatSpec::create(VideoFormatType type,
+                                   int endianness,
+                                   const AkColorPlanes &planes)
+{
+    return new AkVideoFormatSpec(type, endianness, planes);
+}
+
+QVariant AkVideoFormatSpec::toVariant() const
+{
+    return QVariant::fromValue(*this);
+}
+
+AkVideoFormatSpec::VideoFormatType AkVideoFormatSpec::type() const
+{
+    return this->d->m_type;
+}
+
+int AkVideoFormatSpec::endianness() const
+{
+    return this->d->m_endianness;
+}
+
+size_t AkVideoFormatSpec::planes() const
+{
+    return this->d->m_planes.size();
+}
+
+const AkColorPlane &AkVideoFormatSpec::plane(size_t plane) const
+{
+    return this->d->m_planes[plane];
+}
+
+int AkVideoFormatSpec::bpp() const
+{
+    int bpp = 0;
+
+    for (auto &plane: this->d->m_planes)
+        bpp += plane.bitsSize();
+
+    return bpp;
+}
+
+AkColorComponent AkVideoFormatSpec::component(AkColorComponent::ComponentType componentType) const
+{
+    for (auto &plane: this->d->m_planes)
+        for (size_t i = 0; i < plane.components(); ++i) {
+            auto &component = plane.component(i);
+
+            if (component.type() == componentType)
+                return component;
+        }
+
+    return {};
+}
+
+int AkVideoFormatSpec::componentPlane(AkColorComponent::ComponentType component) const
+{
+    int planeIndex = 0;
+
+    for (auto &plane: this->d->m_planes) {
+        for (size_t i = 0; i < plane.components(); ++i) {
+            auto &component_ = plane.component(i);
+
+            if (component_.type() == component)
+                return planeIndex;
+        }
+
+        planeIndex++;
+    }
+
+    return -1;
+}
+
+bool AkVideoFormatSpec::contains(AkColorComponent::ComponentType component) const
+{
+    for (auto &plane: this->d->m_planes)
+        for (size_t i = 0; i < plane.components(); ++i) {
+            auto &component_ = plane.component(i);
+
+            if (component_.type() == component)
+                return true;
+        }
+
+    return false;
+}
+
+size_t AkVideoFormatSpec::byteLength() const
+{
+    for (auto &plane: this->d->m_planes)
+        for (size_t i = 0; i < plane.components(); ++i) {
+            auto &component = plane.component(i);
+
+            return component.byteLength();
+        }
+
+    return 0;
+}
+
+size_t AkVideoFormatSpec::numberOfComponents() const
+{
+    auto n = this->mainComponents();
+
+    if (this->contains(AkColorComponent::CT_A))
+        n++;
+
+    return n;
+}
+
+size_t AkVideoFormatSpec::mainComponents() const
+{
+    size_t n = 0;
+
+    switch (this->d->m_type) {
+    case VFT_RGB:
+    case VFT_YUV:
+        n = 3;
+
+        break;
+
+    case VFT_Gray:
+        n = 1;
+
+        break;
+
+    default:
+        break;
+    }
+
+    return n;
+}
+
+void AkVideoFormatSpec::registerTypes()
+{
+    qRegisterMetaType<AkVideoFormatSpec>("AkVideoFormatSpec");
+    qRegisterMetaType<AkColorPlanes>("AkColorPlanes");
+    qRegisterMetaTypeStreamOperators<AkVideoFormatSpec>("AkVideoFormatSpec");
+    qRegisterMetaType<VideoFormatType>("AkVideoFormatType");
+    QMetaType::registerDebugStreamOperator<VideoFormatType>();
+    qmlRegisterSingletonType<AkVideoFormatSpec>("Ak", 1, 0, "AkVideoFormatSpec",
+                                          [] (QQmlEngine *qmlEngine,
+                                              QJSEngine *jsEngine) -> QObject * {
+        Q_UNUSED(qmlEngine)
+        Q_UNUSED(jsEngine)
+
+        return new AkVideoFormatSpec();
+    });
+}
+
+QDebug operator <<(QDebug debug, const AkVideoFormatSpec &spec)
+{
+    debug.nospace() << "AkVideoFormatSpec("
+                    << "type="
+                    << spec.type()
+                    << ",endianness="
+                    << spec.endianness()
+                    << ",planes="
+                    << spec.planes()
+                    << ",bpp="
+                    << spec.bpp()
+                    << ")";
+
+    return debug.space();
+}
+
+QDebug operator <<(QDebug debug, AkVideoFormatSpec::VideoFormatType format)
+{
+    AkVideoFormatSpec spec;
+    int videoFormatTypeIndex =
+            spec.metaObject()->indexOfEnumerator("VideoFormatType");
+    auto typeEnum = spec.metaObject()->enumerator(videoFormatTypeIndex);
+    QString fmt(typeEnum.valueToKey(format));
+    fmt.remove("VFT_");
+    debug.nospace() << fmt.toStdString().c_str();
+
+    return debug.space();
+}
+
+QDataStream &operator >>(QDataStream &istream, AkVideoFormatSpec &spec)
+{
+    auto type = AkVideoFormatSpec::VFT_Unknown;
+    istream >> type;
+    int endianness = Q_BYTE_ORDER;
+    istream >> endianness;
+    int nPlanes = 0;
+    istream >> nPlanes;
+    AkColorPlanes planes;
+
+    for (int i = 0; i < nPlanes; i++) {
+        AkColorPlane plane;
+        istream >> plane;
+        planes << plane;
+    }
+
+    spec = {type, endianness, planes};
+
+    return istream;
+}
+
+QDataStream &operator <<(QDataStream &ostream, const AkVideoFormatSpec &spec)
+{
+    ostream << spec.type();
+    ostream << spec.endianness();
+    auto nPlanes = spec.planes();
+    ostream << int(nPlanes);
+
+    for (size_t i = 0; i < nPlanes; ++i)
+        ostream << spec.plane(i);
+
+    return ostream;
+}
+
+#include "moc_akvideoformatspec.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/akvideoformatspec.h
@@ -0,0 +1,107 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef AKVIDEOFORMATSPEC_H
+#define AKVIDEOFORMATSPEC_H
+
+#include "akcolorplane.h"
+
+class AkVideoFormatSpec;
+class AkVideoFormatSpecPrivate;
+
+class AKCOMMONS_EXPORT AkVideoFormatSpec: public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(VideoFormatType type
+               READ type
+               CONSTANT)
+    Q_PROPERTY(int endianness
+               READ endianness
+               CONSTANT)
+    Q_PROPERTY(size_t planes
+               READ planes
+               CONSTANT)
+    Q_PROPERTY(int bpp
+               READ bpp
+               CONSTANT)
+    Q_PROPERTY(size_t byteLength
+               READ byteLength
+               CONSTANT)
+    Q_PROPERTY(size_t numberOfComponents
+               READ numberOfComponents
+               CONSTANT)
+    Q_PROPERTY(size_t mainComponents
+               READ mainComponents
+               CONSTANT)
+
+    public:
+        enum VideoFormatType
+        {
+            VFT_Unknown,
+            VFT_RGB,
+            VFT_YUV,
+            VFT_Gray
+        };
+        Q_ENUM(VideoFormatType)
+
+        AkVideoFormatSpec(QObject *parent=nullptr);
+        AkVideoFormatSpec(VideoFormatType type,
+                          int endianness,
+                          const AkColorPlanes &planes);
+        AkVideoFormatSpec(const AkVideoFormatSpec &other);
+        ~AkVideoFormatSpec();
+        AkVideoFormatSpec &operator =(const AkVideoFormatSpec &other);
+        bool operator ==(const AkVideoFormatSpec &other) const;
+        bool operator !=(const AkVideoFormatSpec &other) const;
+
+        Q_INVOKABLE static QObject *create();
+        Q_INVOKABLE static QObject *create(const AkVideoFormatSpec &other);
+        Q_INVOKABLE static QObject *create(AkVideoFormatSpec::VideoFormatType type,
+                                           int endianness,
+                                           const AkColorPlanes &planes);
+        Q_INVOKABLE QVariant toVariant() const;
+
+        Q_INVOKABLE AkVideoFormatSpec::VideoFormatType type() const;
+        Q_INVOKABLE int endianness() const;
+        Q_INVOKABLE size_t planes() const;
+        Q_INVOKABLE const AkColorPlane &plane(size_t plane) const;
+        Q_INVOKABLE int bpp() const;
+        Q_INVOKABLE AkColorComponent component(AkColorComponent::ComponentType componentType) const;
+        Q_INVOKABLE int componentPlane(AkColorComponent::ComponentType component) const;
+        Q_INVOKABLE bool contains(AkColorComponent::ComponentType component) const;
+        Q_INVOKABLE size_t byteLength() const;
+        Q_INVOKABLE size_t numberOfComponents() const;
+        Q_INVOKABLE size_t mainComponents() const;
+
+    private:
+        AkVideoFormatSpecPrivate *d;
+
+    public Q_SLOTS:
+        static void registerTypes();
+};
+
+AKCOMMONS_EXPORT QDebug operator <<(QDebug debug, const AkVideoFormatSpec &caps);
+AKCOMMONS_EXPORT QDebug operator <<(QDebug debug, AkVideoFormatSpec::VideoFormatType format);
+AKCOMMONS_EXPORT QDataStream &operator >>(QDataStream &istream, AkVideoFormatSpec &caps);
+AKCOMMONS_EXPORT QDataStream &operator <<(QDataStream &ostream, const AkVideoFormatSpec &caps);
+
+Q_DECLARE_METATYPE(AkVideoFormatSpec)
+Q_DECLARE_METATYPE(AkVideoFormatSpec::VideoFormatType)
+
+#endif // AKVIDEOFORMATSPEC_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/akvideomixer.cpp
@@ -0,0 +1,1713 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QQmlEngine>
+
+#include "akvideomixer.h"
+#include "akvideocaps.h"
+#include "akvideoformatspec.h"
+#include "akvideopacket.h"
+
+enum DrawType
+{
+    DrawType_1_component,
+    DrawType_3_components,
+};
+
+enum DrawDataTypes
+{
+    DrawDataTypes_8,
+    DrawDataTypes_16,
+    DrawDataTypes_32,
+};
+
+class CommonDrawParameters
+{
+    public:
+        AkVideoCaps outputCaps;
+
+        AkVideoMixer::MixerFlags flags {AkVideoMixer::MixerFlagNone};
+        bool lightweightCache {false};
+        DrawType drawType {DrawType_1_component};
+        DrawDataTypes drawDataTypes {DrawDataTypes_8};
+        bool fastDraw {false};
+        bool optimizedFor8bits {false};
+
+        int endianness {Q_BYTE_ORDER};
+
+        int planeXi {0};
+        int planeYi {0};
+        int planeZi {0};
+        int planeAi {0};
+
+        AkColorComponent compXi;
+        AkColorComponent compYi;
+        AkColorComponent compZi;
+        AkColorComponent compAi;
+
+        size_t xiOffset {0};
+        size_t yiOffset {0};
+        size_t ziOffset {0};
+        size_t aiOffset {0};
+
+        size_t xiShift {0};
+        size_t yiShift {0};
+        size_t ziShift {0};
+        size_t aiShift {0};
+
+        size_t xiStep {0};
+        size_t yiStep {0};
+        size_t ziStep {0};
+        size_t aiStep {0};
+
+        size_t xiWidthDiv {0};
+        size_t yiWidthDiv {0};
+        size_t ziWidthDiv {0};
+        size_t aiWidthDiv {0};
+
+        quint64 maxXi {0};
+        quint64 maxYi {0};
+        quint64 maxZi {0};
+        quint64 maxAi {0};
+        quint64 maxAi2 {0};
+
+        quint64 maskXo {0};
+        quint64 maskYo {0};
+        quint64 maskZo {0};
+        quint64 maskAo {0};
+
+        size_t lengthAi {0};
+        size_t alphaShift {0};
+        qint64 *aiMultTable {nullptr};
+        qint64 *aoMultTable {nullptr};
+        qint64 *alphaDivTable {nullptr};
+
+        CommonDrawParameters();
+        CommonDrawParameters(const CommonDrawParameters &other);
+        ~CommonDrawParameters();
+        CommonDrawParameters &operator =(const CommonDrawParameters &other);
+        inline void allocateBuffers(size_t alphaLength);
+        inline void clearBuffers();
+        void configure(const AkVideoCaps &caps);
+        void reset();
+};
+
+class DrawParameters
+{
+    public:
+        AkVideoCaps inputCaps;
+        AkVideoCaps outputCaps;
+
+        bool canDraw {false};
+
+        int x {0};
+        int y {0};
+
+        int iX {0};
+        int iY {0};
+        int iWidth {0};
+        int iHeight {0};
+
+        int oX {0};
+        int oY {0};
+        int oWidth {0};
+        int oHeight {0};
+
+        int iDiffX {0};
+        int iDiffY {0};
+        int oDiffX {0};
+        int oDiffY {0};
+        int oMultX {0};
+        int oMultY {0};
+
+        int *srcWidthOffsetX {nullptr};
+        int *srcWidthOffsetY {nullptr};
+        int *srcWidthOffsetZ {nullptr};
+        int *srcWidthOffsetA {nullptr};
+        int *srcHeight {nullptr};
+
+        int *dstWidthOffsetX {nullptr};
+        int *dstWidthOffsetY {nullptr};
+        int *dstWidthOffsetZ {nullptr};
+        int *dstWidthOffsetA {nullptr};
+
+        DrawParameters();
+        DrawParameters(const DrawParameters &other);
+        ~DrawParameters();
+        DrawParameters &operator =(const DrawParameters &other);
+        inline void allocateBuffers(const AkVideoCaps &caps);
+        inline void clearBuffers();
+        void configure(int x, int y,
+                       const AkVideoCaps &icaps,
+                       const AkVideoCaps &ocaps, const CommonDrawParameters &cdp);
+        void reset();
+};
+
+class AkVideoMixerPrivate
+{
+    public:
+        AkVideoMixer::MixerFlags m_flags {AkVideoMixer::MixerFlagNone};
+        AkVideoPacket *m_baseFrame {nullptr};
+        CommonDrawParameters m_cdp;
+        DrawParameters *m_dp {nullptr};
+        size_t m_dpSize {0};
+        int m_cacheIndex {0};
+
+        // Endianness conversion functions for color components
+
+        inline quint8 swapBytes(quint8 &&value, int endianness) const
+        {
+            Q_UNUSED(endianness)
+
+            return value;
+        }
+
+        inline quint16 swapBytes(quint16 &&value, int endianness) const
+        {
+            if (endianness == Q_BYTE_ORDER)
+                return value;
+
+            quint16 result;
+            auto pv = reinterpret_cast<quint8 *>(&value);
+            auto pr = reinterpret_cast<quint8 *>(&result);
+            pr[0] = pv[1];
+            pr[1] = pv[0];
+
+            return result;
+        }
+
+        inline quint32 swapBytes(quint32 &&value, int endianness) const
+        {
+            if (endianness == Q_BYTE_ORDER)
+                return value;
+
+            quint32 result;
+            auto pv = reinterpret_cast<quint8 *>(&value);
+            auto pr = reinterpret_cast<quint8 *>(&result);
+            pr[0] = pv[3];
+            pr[1] = pv[2];
+            pr[2] = pv[1];
+            pr[3] = pv[0];
+
+            return result;
+        }
+
+        inline quint64 swapBytes(quint64 &&value, int endianness) const
+        {
+            if (endianness == Q_BYTE_ORDER)
+                return value;
+
+            quint64 result;
+            auto pv = reinterpret_cast<quint8 *>(&value);
+            auto pr = reinterpret_cast<quint8 *>(&result);
+            pr[0] = pv[7];
+            pr[1] = pv[6];
+            pr[2] = pv[5];
+            pr[3] = pv[4];
+            pr[4] = pv[3];
+            pr[5] = pv[2];
+            pr[6] = pv[1];
+            pr[7] = pv[0];
+
+            return result;
+        }
+
+        /* Drawing functions */
+
+        template <typename DataType>
+        void draw8bits3A(const DrawParameters &dp,
+                         const AkVideoPacket &src,
+                         AkVideoPacket &dst) const
+        {
+            for (int y = dp.oY; y < dp.oHeight; ++y) {
+                auto &ys = dp.srcHeight[y];
+
+                auto src_line_x = src.constLine(this->m_cdp.planeXi, ys) + this->m_cdp.xiOffset;
+                auto src_line_y = src.constLine(this->m_cdp.planeYi, ys) + this->m_cdp.yiOffset;
+                auto src_line_z = src.constLine(this->m_cdp.planeZi, ys) + this->m_cdp.ziOffset;
+                auto src_line_a = src.constLine(this->m_cdp.planeAi, ys) + this->m_cdp.aiOffset;
+
+                auto dst_line_x = dst.line(this->m_cdp.planeXi, y) + this->m_cdp.xiOffset;
+                auto dst_line_y = dst.line(this->m_cdp.planeYi, y) + this->m_cdp.yiOffset;
+                auto dst_line_z = dst.line(this->m_cdp.planeZi, y) + this->m_cdp.ziOffset;
+                auto dst_line_a = dst.line(this->m_cdp.planeAi, y) + this->m_cdp.aiOffset;
+
+                for (int x = dp.oX; x < dp.oWidth; ++x) {
+                    int &xs_x = dp.srcWidthOffsetX[x];
+                    int &xs_y = dp.srcWidthOffsetY[x];
+                    int &xs_z = dp.srcWidthOffsetZ[x];
+                    int &xs_a = dp.srcWidthOffsetA[x];
+
+                    auto xi = *reinterpret_cast<const DataType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const DataType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const DataType *>(src_line_z + xs_z);
+                    auto ai = *reinterpret_cast<const DataType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(DataType(xi), this->m_cdp.endianness) >> this->m_cdp.xiShift) & this->m_cdp.maxXi;
+                    yi = (this->swapBytes(DataType(yi), this->m_cdp.endianness) >> this->m_cdp.yiShift) & this->m_cdp.maxYi;
+                    zi = (this->swapBytes(DataType(zi), this->m_cdp.endianness) >> this->m_cdp.ziShift) & this->m_cdp.maxZi;
+                    ai = (this->swapBytes(DataType(ai), this->m_cdp.endianness) >> this->m_cdp.aiShift) & this->m_cdp.maxAi;
+
+                    int &xd_x = dp.dstWidthOffsetX[x];
+                    int &xd_y = dp.dstWidthOffsetY[x];
+                    int &xd_z = dp.dstWidthOffsetZ[x];
+                    int &xd_a = dp.dstWidthOffsetA[x];
+
+                    auto xop = reinterpret_cast<DataType *>(dst_line_x + xd_x);
+                    auto yop = reinterpret_cast<DataType *>(dst_line_y + xd_y);
+                    auto zop = reinterpret_cast<DataType *>(dst_line_z + xd_z);
+                    auto aop = reinterpret_cast<DataType *>(dst_line_a + xd_a);
+
+                    auto xo = (this->swapBytes(DataType(*xop), this->m_cdp.endianness) >> this->m_cdp.xiShift) & this->m_cdp.maxXi;
+                    auto yo = (this->swapBytes(DataType(*yop), this->m_cdp.endianness) >> this->m_cdp.yiShift) & this->m_cdp.maxYi;
+                    auto zo = (this->swapBytes(DataType(*zop), this->m_cdp.endianness) >> this->m_cdp.ziShift) & this->m_cdp.maxZi;
+                    auto ao = (this->swapBytes(DataType(*aop), this->m_cdp.endianness) >> this->m_cdp.aiShift) & this->m_cdp.maxAi;
+
+                    auto alphaMask = (size_t(ai) << this->m_cdp.lengthAi) | size_t(ao);
+                    qint64 xt = (qint64(xi) * this->m_cdp.aiMultTable[alphaMask] + qint64(xo) * this->m_cdp.aoMultTable[alphaMask]) >> this->m_cdp.alphaShift;
+                    qint64 yt = (qint64(yi) * this->m_cdp.aiMultTable[alphaMask] + qint64(yo) * this->m_cdp.aoMultTable[alphaMask]) >> this->m_cdp.alphaShift;
+                    qint64 zt = (qint64(zi) * this->m_cdp.aiMultTable[alphaMask] + qint64(zo) * this->m_cdp.aoMultTable[alphaMask]) >> this->m_cdp.alphaShift;
+                    qint64 &at = this->m_cdp.alphaDivTable[alphaMask];
+
+                    *xop = (*xop & DataType(this->m_cdp.maskXo)) | (DataType(xt) << this->m_cdp.xiShift);
+                    *yop = (*yop & DataType(this->m_cdp.maskYo)) | (DataType(yt) << this->m_cdp.yiShift);
+                    *zop = (*zop & DataType(this->m_cdp.maskZo)) | (DataType(zt) << this->m_cdp.ziShift);
+                    *aop = (*aop & DataType(this->m_cdp.maskAo)) | (DataType(at) << this->m_cdp.aiShift);
+
+                    auto xot = this->swapBytes(DataType(*xop), this->m_cdp.endianness);
+                    auto yot = this->swapBytes(DataType(*yop), this->m_cdp.endianness);
+                    auto zot = this->swapBytes(DataType(*zop), this->m_cdp.endianness);
+                    auto aot = this->swapBytes(DataType(*aop), this->m_cdp.endianness);
+
+                    *xop = xot;
+                    *yop = yot;
+                    *zop = zot;
+                    *aop = aot;
+                }
+            }
+        }
+
+        template <typename DataType>
+        void draw3A(const DrawParameters &dp,
+                    const AkVideoPacket &src,
+                    AkVideoPacket &dst) const
+        {
+            for (int y = dp.oY; y < dp.oHeight; ++y) {
+                auto &ys = dp.srcHeight[y];
+
+                auto src_line_x = src.constLine(this->m_cdp.planeXi, ys) + this->m_cdp.xiOffset;
+                auto src_line_y = src.constLine(this->m_cdp.planeYi, ys) + this->m_cdp.yiOffset;
+                auto src_line_z = src.constLine(this->m_cdp.planeZi, ys) + this->m_cdp.ziOffset;
+                auto src_line_a = src.constLine(this->m_cdp.planeAi, ys) + this->m_cdp.aiOffset;
+
+                auto dst_line_x = dst.line(this->m_cdp.planeXi, y) + this->m_cdp.xiOffset;
+                auto dst_line_y = dst.line(this->m_cdp.planeYi, y) + this->m_cdp.yiOffset;
+                auto dst_line_z = dst.line(this->m_cdp.planeZi, y) + this->m_cdp.ziOffset;
+                auto dst_line_a = dst.line(this->m_cdp.planeAi, y) + this->m_cdp.aiOffset;
+
+                for (int x = dp.oX; x < dp.oWidth; ++x) {
+                    int &xs_x = dp.srcWidthOffsetX[x];
+                    int &xs_y = dp.srcWidthOffsetY[x];
+                    int &xs_z = dp.srcWidthOffsetZ[x];
+                    int &xs_a = dp.srcWidthOffsetA[x];
+
+                    auto xi = *reinterpret_cast<const DataType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const DataType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const DataType *>(src_line_z + xs_z);
+                    auto ai = *reinterpret_cast<const DataType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(DataType(xi), this->m_cdp.endianness) >> this->m_cdp.xiShift) & this->m_cdp.maxXi;
+                    yi = (this->swapBytes(DataType(yi), this->m_cdp.endianness) >> this->m_cdp.yiShift) & this->m_cdp.maxYi;
+                    zi = (this->swapBytes(DataType(zi), this->m_cdp.endianness) >> this->m_cdp.ziShift) & this->m_cdp.maxZi;
+                    ai = (this->swapBytes(DataType(ai), this->m_cdp.endianness) >> this->m_cdp.aiShift) & this->m_cdp.maxAi;
+
+                    int &xd_x = dp.dstWidthOffsetX[x];
+                    int &xd_y = dp.dstWidthOffsetY[x];
+                    int &xd_z = dp.dstWidthOffsetZ[x];
+                    int &xd_a = dp.dstWidthOffsetA[x];
+
+                    auto xop = reinterpret_cast<DataType *>(dst_line_x + xd_x);
+                    auto yop = reinterpret_cast<DataType *>(dst_line_y + xd_y);
+                    auto zop = reinterpret_cast<DataType *>(dst_line_z + xd_z);
+                    auto aop = reinterpret_cast<DataType *>(dst_line_a + xd_a);
+
+                    auto xo = (this->swapBytes(DataType(*xop), this->m_cdp.endianness) >> this->m_cdp.xiShift) & this->m_cdp.maxXi;
+                    auto yo = (this->swapBytes(DataType(*yop), this->m_cdp.endianness) >> this->m_cdp.yiShift) & this->m_cdp.maxYi;
+                    auto zo = (this->swapBytes(DataType(*zop), this->m_cdp.endianness) >> this->m_cdp.ziShift) & this->m_cdp.maxZi;
+                    auto ao = (this->swapBytes(DataType(*aop), this->m_cdp.endianness) >> this->m_cdp.aiShift) & this->m_cdp.maxAi;
+
+                    auto diffAi = qint64(this->m_cdp.maxAi) - qint64(ai);
+                    auto a = qint64(this->m_cdp.maxAi2) - (qint64(this->m_cdp.maxAi) - qint64(ao)) * diffAi;
+
+                    qint64 xt = 0;
+                    qint64 yt = 0;
+                    qint64 zt = 0;
+                    qint64 at = 0;
+
+                    if (a != 0) {
+                        auto mi = qint64(ai) * qint64(this->m_cdp.maxAi);
+                        auto mo = qint64(ao) * diffAi;
+                        xt = (qint64(xi) * mi + qint64(xo) * mo) / a;
+                        yt = (qint64(yi) * mi + qint64(yo) * mo) / a;
+                        zt = (qint64(zi) * mi + qint64(zo) * mo) / a;
+                        at = a / qint64(this->m_cdp.maxAi);
+                    }
+
+                    *xop = (*xop & DataType(this->m_cdp.maskXo)) | (DataType(xt) << this->m_cdp.xiShift);
+                    *yop = (*yop & DataType(this->m_cdp.maskYo)) | (DataType(yt) << this->m_cdp.yiShift);
+                    *zop = (*zop & DataType(this->m_cdp.maskZo)) | (DataType(zt) << this->m_cdp.ziShift);
+                    *aop = (*aop & DataType(this->m_cdp.maskAo)) | (DataType(at) << this->m_cdp.aiShift);
+
+                    auto xot = this->swapBytes(DataType(*xop), this->m_cdp.endianness);
+                    auto yot = this->swapBytes(DataType(*yop), this->m_cdp.endianness);
+                    auto zot = this->swapBytes(DataType(*zop), this->m_cdp.endianness);
+                    auto aot = this->swapBytes(DataType(*aop), this->m_cdp.endianness);
+
+                    *xop = xot;
+                    *yop = yot;
+                    *zop = zot;
+                    *aop = aot;
+                }
+            }
+        }
+
+        template <typename DataType>
+        void draw8bits1A(const DrawParameters &dp,
+                         const AkVideoPacket &src,
+                         AkVideoPacket &dst) const
+        {
+            for (int y = dp.oY; y < dp.oHeight; ++y) {
+                auto &ys = dp.srcHeight[y];
+
+                auto src_line_x = src.constLine(this->m_cdp.planeXi, ys) + this->m_cdp.xiOffset;
+                auto src_line_a = src.constLine(this->m_cdp.planeAi, ys) + this->m_cdp.aiOffset;
+
+                auto dst_line_x = dst.line(this->m_cdp.planeXi, y) + this->m_cdp.xiOffset;
+                auto dst_line_a = dst.line(this->m_cdp.planeAi, y) + this->m_cdp.aiOffset;
+
+                for (int x = dp.oX; x < dp.oWidth; ++x) {
+                    int &xs_x = dp.srcWidthOffsetX[x];
+                    int &xs_a = dp.srcWidthOffsetA[x];
+
+                    auto xi = *reinterpret_cast<const DataType *>(src_line_x + xs_x);
+                    auto ai = *reinterpret_cast<const DataType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(DataType(xi), this->m_cdp.endianness) >> this->m_cdp.xiShift) & this->m_cdp.maxXi;
+                    ai = (this->swapBytes(DataType(ai), this->m_cdp.endianness) >> this->m_cdp.aiShift) & this->m_cdp.maxAi;
+
+                    int &xd_x = dp.dstWidthOffsetX[x];
+                    int &xd_a = dp.dstWidthOffsetA[x];
+
+                    auto xop = reinterpret_cast<DataType *>(dst_line_x + xd_x);
+                    auto aop = reinterpret_cast<DataType *>(dst_line_a + xd_a);
+
+                    auto xo = (this->swapBytes(DataType(*xop), this->m_cdp.endianness) >> this->m_cdp.xiShift) & this->m_cdp.maxXi;
+                    auto ao = (this->swapBytes(DataType(*aop), this->m_cdp.endianness) >> this->m_cdp.aiShift) & this->m_cdp.maxAi;
+
+                    auto alphaMask = (size_t(ai) << this->m_cdp.lengthAi) | size_t(ao);
+                    qint64 xt = (qint64(xi) * this->m_cdp.aiMultTable[alphaMask] + qint64(xo) * this->m_cdp.aoMultTable[alphaMask]) >> this->m_cdp.alphaShift;
+                    qint64 &at = this->m_cdp.alphaDivTable[alphaMask];
+
+                    *xop = (*xop & DataType(this->m_cdp.maskXo)) | (DataType(xt) << this->m_cdp.xiShift);
+                    *aop = (*aop & DataType(this->m_cdp.maskAo)) | (DataType(at) << this->m_cdp.aiShift);
+
+                    auto xot = this->swapBytes(DataType(*xop), this->m_cdp.endianness);
+                    auto aot = this->swapBytes(DataType(*aop), this->m_cdp.endianness);
+
+                    *xop = xot;
+                    *aop = aot;
+                }
+            }
+        }
+
+        template <typename DataType>
+        void draw1A(const DrawParameters &dp,
+                    const AkVideoPacket &src,
+                    AkVideoPacket &dst) const
+        {
+            for (int y = dp.oY; y < dp.oHeight; ++y) {
+                auto &ys = dp.srcHeight[y];
+
+                auto src_line_x = src.constLine(this->m_cdp.planeXi, ys) + this->m_cdp.xiOffset;
+                auto src_line_a = src.constLine(this->m_cdp.planeAi, ys) + this->m_cdp.aiOffset;
+
+                auto dst_line_x = dst.line(this->m_cdp.planeXi, y) + this->m_cdp.xiOffset;
+                auto dst_line_a = dst.line(this->m_cdp.planeAi, y) + this->m_cdp.aiOffset;
+
+                for (int x = dp.oX; x < dp.oWidth; ++x) {
+                    int &xs_x = dp.srcWidthOffsetX[x];
+                    int &xs_a = dp.srcWidthOffsetA[x];
+
+                    auto xi = *reinterpret_cast<const DataType *>(src_line_x + xs_x);
+                    auto ai = *reinterpret_cast<const DataType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(DataType(xi), this->m_cdp.endianness) >> this->m_cdp.xiShift) & this->m_cdp.maxXi;
+                    ai = (this->swapBytes(DataType(ai), this->m_cdp.endianness) >> this->m_cdp.aiShift) & this->m_cdp.maxAi;
+
+                    int &xd_x = dp.dstWidthOffsetX[x];
+                    int &xd_a = dp.dstWidthOffsetA[x];
+
+                    auto xop = reinterpret_cast<DataType *>(dst_line_x + xd_x);
+                    auto aop = reinterpret_cast<DataType *>(dst_line_a + xd_a);
+
+                    auto xo = (this->swapBytes(DataType(*xop), this->m_cdp.endianness) >> this->m_cdp.xiShift) & this->m_cdp.maxXi;
+                    auto ao = (this->swapBytes(DataType(*aop), this->m_cdp.endianness) >> this->m_cdp.aiShift) & this->m_cdp.maxAi;
+
+                    auto diffAi = qint64(this->m_cdp.maxAi) - qint64(ai);
+                    auto a = qint64(this->m_cdp.maxAi2) - (qint64(this->m_cdp.maxAi) - qint64(ao)) * diffAi;
+
+                    qint64 xt = 0;
+                    qint64 at = 0;
+
+                    if (a != 1) {
+                        auto mi = qint64(ai) * qint64(this->m_cdp.maxAi);
+                        auto mo = qint64(ao) * diffAi;
+                        xt = (qint64(xi) * mi + qint64(xo) * mo) / a;
+                        at = a / qint64(this->m_cdp.maxAi);
+                    }
+
+                    *xop = (*xop & DataType(this->m_cdp.maskXo)) | (DataType(xt) << this->m_cdp.xiShift);
+                    *aop = (*aop & DataType(this->m_cdp.maskAo)) | (DataType(at) << this->m_cdp.aiShift);
+
+                    auto xot = this->swapBytes(DataType(*xop), this->m_cdp.endianness);
+                    auto aot = this->swapBytes(DataType(*aop), this->m_cdp.endianness);
+
+                    *xop = xot;
+                    *aop = aot;
+                }
+            }
+        }
+
+        /* Lightweight cache drawing functions */
+
+        template <typename DataType>
+        void drawLc8bits3A(const DrawParameters &dp,
+                           const AkVideoPacket &src,
+                           AkVideoPacket &dst) const
+        {
+            for (int y = dp.oY; y < dp.oHeight; ++y) {
+                auto ys = (y * dp.iDiffY + dp.oMultY) / dp.oDiffY;
+
+                auto src_line_x = src.constLine(this->m_cdp.planeXi, ys) + this->m_cdp.xiOffset;
+                auto src_line_y = src.constLine(this->m_cdp.planeYi, ys) + this->m_cdp.yiOffset;
+                auto src_line_z = src.constLine(this->m_cdp.planeZi, ys) + this->m_cdp.ziOffset;
+                auto src_line_a = src.constLine(this->m_cdp.planeAi, ys) + this->m_cdp.aiOffset;
+
+                auto dst_line_x = dst.line(this->m_cdp.planeXi, y) + this->m_cdp.xiOffset;
+                auto dst_line_y = dst.line(this->m_cdp.planeYi, y) + this->m_cdp.yiOffset;
+                auto dst_line_z = dst.line(this->m_cdp.planeZi, y) + this->m_cdp.ziOffset;
+                auto dst_line_a = dst.line(this->m_cdp.planeAi, y) + this->m_cdp.aiOffset;
+
+                for (int x = dp.oX; x < dp.oWidth; ++x) {
+                    auto xs = (x * dp.iDiffX + dp.oMultX) / dp.oDiffX;
+
+                    int xs_x = (xs >> this->m_cdp.xiWidthDiv) * this->m_cdp.xiStep;
+                    int xs_y = (xs >> this->m_cdp.yiWidthDiv) * this->m_cdp.yiStep;
+                    int xs_z = (xs >> this->m_cdp.ziWidthDiv) * this->m_cdp.ziStep;
+                    int xs_a = (xs >> this->m_cdp.aiWidthDiv) * this->m_cdp.aiStep;
+
+                    auto xi = *reinterpret_cast<const DataType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const DataType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const DataType *>(src_line_z + xs_z);
+                    auto ai = *reinterpret_cast<const DataType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(DataType(xi), this->m_cdp.endianness) >> this->m_cdp.xiShift) & this->m_cdp.maxXi;
+                    yi = (this->swapBytes(DataType(yi), this->m_cdp.endianness) >> this->m_cdp.yiShift) & this->m_cdp.maxYi;
+                    zi = (this->swapBytes(DataType(zi), this->m_cdp.endianness) >> this->m_cdp.ziShift) & this->m_cdp.maxZi;
+                    ai = (this->swapBytes(DataType(ai), this->m_cdp.endianness) >> this->m_cdp.aiShift) & this->m_cdp.maxAi;
+
+                    int xd_x = (x >> this->m_cdp.xiWidthDiv) * this->m_cdp.xiStep;
+                    int xd_y = (x >> this->m_cdp.yiWidthDiv) * this->m_cdp.yiStep;
+                    int xd_z = (x >> this->m_cdp.ziWidthDiv) * this->m_cdp.ziStep;
+                    int xd_a = (x >> this->m_cdp.aiWidthDiv) * this->m_cdp.aiStep;
+
+                    auto xop = reinterpret_cast<DataType *>(dst_line_x + xd_x);
+                    auto yop = reinterpret_cast<DataType *>(dst_line_y + xd_y);
+                    auto zop = reinterpret_cast<DataType *>(dst_line_z + xd_z);
+                    auto aop = reinterpret_cast<DataType *>(dst_line_a + xd_a);
+
+                    auto xo = (this->swapBytes(DataType(*xop), this->m_cdp.endianness) >> this->m_cdp.xiShift) & this->m_cdp.maxXi;
+                    auto yo = (this->swapBytes(DataType(*yop), this->m_cdp.endianness) >> this->m_cdp.yiShift) & this->m_cdp.maxYi;
+                    auto zo = (this->swapBytes(DataType(*zop), this->m_cdp.endianness) >> this->m_cdp.ziShift) & this->m_cdp.maxZi;
+                    auto ao = (this->swapBytes(DataType(*aop), this->m_cdp.endianness) >> this->m_cdp.aiShift) & this->m_cdp.maxAi;
+
+                    auto alphaMask = (size_t(ai) << this->m_cdp.lengthAi) | size_t(ao);
+                    qint64 xt = (qint64(xi) * this->m_cdp.aiMultTable[alphaMask] + qint64(xo) * this->m_cdp.aoMultTable[alphaMask]) >> this->m_cdp.alphaShift;
+                    qint64 yt = (qint64(yi) * this->m_cdp.aiMultTable[alphaMask] + qint64(yo) * this->m_cdp.aoMultTable[alphaMask]) >> this->m_cdp.alphaShift;
+                    qint64 zt = (qint64(zi) * this->m_cdp.aiMultTable[alphaMask] + qint64(zo) * this->m_cdp.aoMultTable[alphaMask]) >> this->m_cdp.alphaShift;
+                    qint64 &at = this->m_cdp.alphaDivTable[alphaMask];
+
+                    *xop = (*xop & DataType(this->m_cdp.maskXo)) | (DataType(xt) << this->m_cdp.xiShift);
+                    *yop = (*yop & DataType(this->m_cdp.maskYo)) | (DataType(yt) << this->m_cdp.yiShift);
+                    *zop = (*zop & DataType(this->m_cdp.maskZo)) | (DataType(zt) << this->m_cdp.ziShift);
+                    *aop = (*aop & DataType(this->m_cdp.maskAo)) | (DataType(at) << this->m_cdp.aiShift);
+
+                    auto xot = this->swapBytes(DataType(*xop), this->m_cdp.endianness);
+                    auto yot = this->swapBytes(DataType(*yop), this->m_cdp.endianness);
+                    auto zot = this->swapBytes(DataType(*zop), this->m_cdp.endianness);
+                    auto aot = this->swapBytes(DataType(*aop), this->m_cdp.endianness);
+
+                    *xop = xot;
+                    *yop = yot;
+                    *zop = zot;
+                    *aop = aot;
+                }
+            }
+        }
+
+        template <typename DataType>
+        void drawLc3A(const DrawParameters &dp,
+                      const AkVideoPacket &src,
+                      AkVideoPacket &dst) const
+        {
+            for (int y = dp.oY; y < dp.oHeight; ++y) {
+                auto ys = (y * dp.iDiffY + dp.oMultY) / dp.oDiffY;
+
+                auto src_line_x = src.constLine(this->m_cdp.planeXi, ys) + this->m_cdp.xiOffset;
+                auto src_line_y = src.constLine(this->m_cdp.planeYi, ys) + this->m_cdp.yiOffset;
+                auto src_line_z = src.constLine(this->m_cdp.planeZi, ys) + this->m_cdp.ziOffset;
+                auto src_line_a = src.constLine(this->m_cdp.planeAi, ys) + this->m_cdp.aiOffset;
+
+                auto dst_line_x = dst.line(this->m_cdp.planeXi, y) + this->m_cdp.xiOffset;
+                auto dst_line_y = dst.line(this->m_cdp.planeYi, y) + this->m_cdp.yiOffset;
+                auto dst_line_z = dst.line(this->m_cdp.planeZi, y) + this->m_cdp.ziOffset;
+                auto dst_line_a = dst.line(this->m_cdp.planeAi, y) + this->m_cdp.aiOffset;
+
+                for (int x = dp.oX; x < dp.oWidth; ++x) {
+                    auto xs = (x * dp.iDiffX + dp.oMultX) / dp.oDiffX;
+
+                    int xs_x = (xs >> this->m_cdp.xiWidthDiv) * this->m_cdp.xiStep;
+                    int xs_y = (xs >> this->m_cdp.yiWidthDiv) * this->m_cdp.yiStep;
+                    int xs_z = (xs >> this->m_cdp.ziWidthDiv) * this->m_cdp.ziStep;
+                    int xs_a = (xs >> this->m_cdp.aiWidthDiv) * this->m_cdp.aiStep;
+
+                    auto xi = *reinterpret_cast<const DataType *>(src_line_x + xs_x);
+                    auto yi = *reinterpret_cast<const DataType *>(src_line_y + xs_y);
+                    auto zi = *reinterpret_cast<const DataType *>(src_line_z + xs_z);
+                    auto ai = *reinterpret_cast<const DataType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(DataType(xi), this->m_cdp.endianness) >> this->m_cdp.xiShift) & this->m_cdp.maxXi;
+                    yi = (this->swapBytes(DataType(yi), this->m_cdp.endianness) >> this->m_cdp.yiShift) & this->m_cdp.maxYi;
+                    zi = (this->swapBytes(DataType(zi), this->m_cdp.endianness) >> this->m_cdp.ziShift) & this->m_cdp.maxZi;
+                    ai = (this->swapBytes(DataType(ai), this->m_cdp.endianness) >> this->m_cdp.aiShift) & this->m_cdp.maxAi;
+
+                    int xd_x = (x >> this->m_cdp.xiWidthDiv) * this->m_cdp.xiStep;
+                    int xd_y = (x >> this->m_cdp.yiWidthDiv) * this->m_cdp.yiStep;
+                    int xd_z = (x >> this->m_cdp.ziWidthDiv) * this->m_cdp.ziStep;
+                    int xd_a = (x >> this->m_cdp.aiWidthDiv) * this->m_cdp.aiStep;
+
+                    auto xop = reinterpret_cast<DataType *>(dst_line_x + xd_x);
+                    auto yop = reinterpret_cast<DataType *>(dst_line_y + xd_y);
+                    auto zop = reinterpret_cast<DataType *>(dst_line_z + xd_z);
+                    auto aop = reinterpret_cast<DataType *>(dst_line_a + xd_a);
+
+                    auto xo = (this->swapBytes(DataType(*xop), this->m_cdp.endianness) >> this->m_cdp.xiShift) & this->m_cdp.maxXi;
+                    auto yo = (this->swapBytes(DataType(*yop), this->m_cdp.endianness) >> this->m_cdp.yiShift) & this->m_cdp.maxYi;
+                    auto zo = (this->swapBytes(DataType(*zop), this->m_cdp.endianness) >> this->m_cdp.ziShift) & this->m_cdp.maxZi;
+                    auto ao = (this->swapBytes(DataType(*aop), this->m_cdp.endianness) >> this->m_cdp.aiShift) & this->m_cdp.maxAi;
+
+                    auto diffAi = qint64(this->m_cdp.maxAi) - qint64(ai);
+                    auto a = qint64(this->m_cdp.maxAi2) - (qint64(this->m_cdp.maxAi) - qint64(ao)) * diffAi;
+
+                    qint64 xt = 0;
+                    qint64 yt = 0;
+                    qint64 zt = 0;
+                    qint64 at = 0;
+
+                    if (a != 0) {
+                        auto mi = qint64(ai) * qint64(this->m_cdp.maxAi);
+                        auto mo = qint64(ao) * diffAi;
+                        xt = (qint64(xi) * mi + qint64(xo) * mo) / a;
+                        yt = (qint64(yi) * mi + qint64(yo) * mo) / a;
+                        zt = (qint64(zi) * mi + qint64(zo) * mo) / a;
+                        at = a / qint64(this->m_cdp.maxAi);
+                    }
+
+                    *xop = (*xop & DataType(this->m_cdp.maskXo)) | (DataType(xt) << this->m_cdp.xiShift);
+                    *yop = (*yop & DataType(this->m_cdp.maskYo)) | (DataType(yt) << this->m_cdp.yiShift);
+                    *zop = (*zop & DataType(this->m_cdp.maskZo)) | (DataType(zt) << this->m_cdp.ziShift);
+                    *aop = (*aop & DataType(this->m_cdp.maskAo)) | (DataType(at) << this->m_cdp.aiShift);
+
+                    auto xot = this->swapBytes(DataType(*xop), this->m_cdp.endianness);
+                    auto yot = this->swapBytes(DataType(*yop), this->m_cdp.endianness);
+                    auto zot = this->swapBytes(DataType(*zop), this->m_cdp.endianness);
+                    auto aot = this->swapBytes(DataType(*aop), this->m_cdp.endianness);
+
+                    *xop = xot;
+                    *yop = yot;
+                    *zop = zot;
+                    *aop = aot;
+                }
+            }
+        }
+
+        template <typename DataType>
+        void drawLc8bits1A(const DrawParameters &dp,
+                           const AkVideoPacket &src,
+                           AkVideoPacket &dst) const
+        {
+            for (int y = dp.oY; y < dp.oHeight; ++y) {
+                auto ys = (y * dp.iDiffY + dp.oMultY) / dp.oDiffY;
+
+                auto src_line_x = src.constLine(this->m_cdp.planeXi, ys) + this->m_cdp.xiOffset;
+                auto src_line_a = src.constLine(this->m_cdp.planeAi, ys) + this->m_cdp.aiOffset;
+
+                auto dst_line_x = dst.line(this->m_cdp.planeXi, y) + this->m_cdp.xiOffset;
+                auto dst_line_a = dst.line(this->m_cdp.planeAi, y) + this->m_cdp.aiOffset;
+
+                for (int x = dp.oX; x < dp.oWidth; ++x) {
+                    auto xs = (x * dp.iDiffX + dp.oMultX) / dp.oDiffX;
+
+                    int xs_x = (xs >> this->m_cdp.xiWidthDiv) * this->m_cdp.xiStep;
+                    int xs_a = (xs >> this->m_cdp.aiWidthDiv) * this->m_cdp.aiStep;
+
+                    auto xi = *reinterpret_cast<const DataType *>(src_line_x + xs_x);
+                    auto ai = *reinterpret_cast<const DataType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(DataType(xi), this->m_cdp.endianness) >> this->m_cdp.xiShift) & this->m_cdp.maxXi;
+                    ai = (this->swapBytes(DataType(ai), this->m_cdp.endianness) >> this->m_cdp.aiShift) & this->m_cdp.maxAi;
+
+                    int xd_x = (x >> this->m_cdp.xiWidthDiv) * this->m_cdp.xiStep;
+                    int xd_a = (x >> this->m_cdp.aiWidthDiv) * this->m_cdp.aiStep;
+
+                    auto xop = reinterpret_cast<DataType *>(dst_line_x + xd_x);
+                    auto aop = reinterpret_cast<DataType *>(dst_line_a + xd_a);
+
+                    auto xo = (this->swapBytes(DataType(*xop), this->m_cdp.endianness) >> this->m_cdp.xiShift) & this->m_cdp.maxXi;
+                    auto ao = (this->swapBytes(DataType(*aop), this->m_cdp.endianness) >> this->m_cdp.aiShift) & this->m_cdp.maxAi;
+
+                    auto alphaMask = (size_t(ai) << this->m_cdp.lengthAi) | size_t(ao);
+                    qint64 xt = (qint64(xi) * this->m_cdp.aiMultTable[alphaMask] + qint64(xo) * this->m_cdp.aoMultTable[alphaMask]) >> this->m_cdp.alphaShift;
+                    qint64 &at = this->m_cdp.alphaDivTable[alphaMask];
+
+                    *xop = (*xop & DataType(this->m_cdp.maskXo)) | (DataType(xt) << this->m_cdp.xiShift);
+                    *aop = (*aop & DataType(this->m_cdp.maskAo)) | (DataType(at) << this->m_cdp.aiShift);
+
+                    auto xot = this->swapBytes(DataType(*xop), this->m_cdp.endianness);
+                    auto aot = this->swapBytes(DataType(*aop), this->m_cdp.endianness);
+
+                    *xop = xot;
+                    *aop = aot;
+                }
+            }
+        }
+
+        template <typename DataType>
+        void drawLc1A(const DrawParameters &dp,
+                      const AkVideoPacket &src,
+                      AkVideoPacket &dst) const
+        {
+            for (int y = dp.oY; y < dp.oHeight; ++y) {
+                auto ys = (y * dp.iDiffY + dp.oMultY) / dp.oDiffY;
+
+                auto src_line_x = src.constLine(this->m_cdp.planeXi, ys) + this->m_cdp.xiOffset;
+                auto src_line_a = src.constLine(this->m_cdp.planeAi, ys) + this->m_cdp.aiOffset;
+
+                auto dst_line_x = dst.line(this->m_cdp.planeXi, y) + this->m_cdp.xiOffset;
+                auto dst_line_a = dst.line(this->m_cdp.planeAi, y) + this->m_cdp.aiOffset;
+
+                for (int x = dp.oX; x < dp.oWidth; ++x) {
+                    auto xs = (x * dp.iDiffX + dp.oMultX) / dp.oDiffX;
+
+                    int xs_x = (xs >> this->m_cdp.xiWidthDiv) * this->m_cdp.xiStep;
+                    int xs_a = (xs >> this->m_cdp.aiWidthDiv) * this->m_cdp.aiStep;
+
+                    auto xi = *reinterpret_cast<const DataType *>(src_line_x + xs_x);
+                    auto ai = *reinterpret_cast<const DataType *>(src_line_a + xs_a);
+
+                    xi = (this->swapBytes(DataType(xi), this->m_cdp.endianness) >> this->m_cdp.xiShift) & this->m_cdp.maxXi;
+                    ai = (this->swapBytes(DataType(ai), this->m_cdp.endianness) >> this->m_cdp.aiShift) & this->m_cdp.maxAi;
+
+                    int xd_x = (x >> this->m_cdp.xiWidthDiv) * this->m_cdp.xiStep;
+                    int xd_a = (x >> this->m_cdp.aiWidthDiv) * this->m_cdp.aiStep;
+
+                    auto xop = reinterpret_cast<DataType *>(dst_line_x + xd_x);
+                    auto aop = reinterpret_cast<DataType *>(dst_line_a + xd_a);
+
+                    auto xo = (this->swapBytes(DataType(*xop), this->m_cdp.endianness) >> this->m_cdp.xiShift) & this->m_cdp.maxXi;
+                    auto ao = (this->swapBytes(DataType(*aop), this->m_cdp.endianness) >> this->m_cdp.aiShift) & this->m_cdp.maxAi;
+
+                    auto diffAi = qint64(this->m_cdp.maxAi) - qint64(ai);
+                    auto a = qint64(this->m_cdp.maxAi2) - (qint64(this->m_cdp.maxAi) - qint64(ao)) * diffAi;
+
+                    qint64 xt = 0;
+                    qint64 at = 0;
+
+                    if (a != 1) {
+                        auto mi = qint64(ai) * qint64(this->m_cdp.maxAi);
+                        auto mo = qint64(ao) * diffAi;
+                        xt = (qint64(xi) * mi + qint64(xo) * mo) / a;
+                        at = a / qint64(this->m_cdp.maxAi);
+                    }
+
+                    *xop = (*xop & DataType(this->m_cdp.maskXo)) | (DataType(xt) << this->m_cdp.xiShift);
+                    *aop = (*aop & DataType(this->m_cdp.maskAo)) | (DataType(at) << this->m_cdp.aiShift);
+
+                    auto xot = this->swapBytes(DataType(*xop), this->m_cdp.endianness);
+                    auto aot = this->swapBytes(DataType(*aop), this->m_cdp.endianness);
+
+                    *xop = xot;
+                    *aop = aot;
+                }
+            }
+        }
+
+        void drawBlit(const DrawParameters &dp,
+                      const AkVideoPacket &src,
+                      AkVideoPacket &dst) const
+        {
+            auto diffX = dp.oWidth - dp.oX;
+            auto diffY = dp.oHeight - dp.oY;
+
+            for (int plane = 0; plane < src.planes(); plane++) {
+                auto bytesUsed = src.bytesUsed(plane);
+                auto srcOffset = dp.iX * bytesUsed / src.caps().width();
+                auto dstOffset = dp.oX * bytesUsed / src.caps().width();
+                auto copyBytes = diffX * bytesUsed / src.caps().width();
+                auto srcLineOffset = src.lineSize(plane);
+                auto dstLineOffset = dst.lineSize(plane);
+                auto srcLine = src.constLine(plane, dp.iY) + srcOffset;
+                auto dstLine = dst.line(plane, dp.oY) + dstOffset;
+                auto maxY = diffY >> src.heightDiv(plane);
+
+                for (int y = 0; y < maxY; y++) {
+                    memcpy(dstLine, srcLine, copyBytes);
+                    srcLine += srcLineOffset;
+                    dstLine += dstLineOffset;
+                }
+            }
+        }
+
+#define DRAW_FUNC(components) \
+        template <typename DataType> \
+        inline void drawFrame##components(const DrawParameters &dp, \
+                                          const AkVideoPacket &src, \
+                                          AkVideoPacket &dst) const \
+        { \
+            if (this->m_cdp.optimizedFor8bits) { \
+                if (this->m_cdp.lightweightCache) \
+                    this->drawLc8bits##components##A<DataType>(dp, src, dst); \
+                else \
+                    this->draw8bits##components##A<DataType>(dp, src, dst); \
+            } else { \
+                if (this->m_cdp.lightweightCache) \
+                    this->drawLc##components##A<DataType>(dp, src, dst); \
+                else \
+                    this->draw##components##A<DataType>(dp, src, dst); \
+            } \
+        }
+
+        DRAW_FUNC(1)
+        DRAW_FUNC(3)
+
+        template <typename DataType>
+        inline void draw(const DrawParameters &dp,
+                         const AkVideoPacket &src,
+                         AkVideoPacket &dst)
+        {
+            switch (this->m_cdp.drawType) {
+            case DrawType_3_components:
+                this->drawFrame3<DataType>(dp, src, dst);
+                break;
+            case DrawType_1_component:
+                this->drawFrame1<DataType>(dp, src, dst);
+                break;
+            }
+        }
+
+        inline void draw(int x, int y, const AkVideoPacket &packet);
+};
+
+AkVideoMixer::AkVideoMixer(QObject *parent):
+    QObject(parent)
+{
+    this->d = new AkVideoMixerPrivate();
+}
+
+AkVideoMixer::AkVideoMixer(const AkVideoMixer &other):
+    QObject()
+{
+    this->d = new AkVideoMixerPrivate();
+    this->d->m_baseFrame = other.d->m_baseFrame;
+}
+
+AkVideoMixer::~AkVideoMixer()
+{
+    if (this->d->m_dp) {
+        delete [] this->d->m_dp;
+        this->d->m_dp = nullptr;
+    }
+
+    this->d->m_cdp.clearBuffers();
+
+    delete this->d;
+}
+
+AkVideoMixer &AkVideoMixer::operator =(const AkVideoMixer &other)
+{
+    if (this != &other) {
+        this->d->m_baseFrame = other.d->m_baseFrame;
+    }
+
+    return *this;
+}
+
+QObject *AkVideoMixer::create()
+{
+    return new AkVideoMixer();
+}
+
+AkVideoMixer::MixerFlags AkVideoMixer::flags() const
+{
+    return this->d->m_flags;
+}
+
+bool AkVideoMixer::begin(AkVideoPacket *packet)
+{
+    this->d->m_baseFrame = packet;
+    this->d->m_cacheIndex = 0;
+
+    if (packet->caps() != this->d->m_cdp.outputCaps
+        || this->d->m_flags != this->d->m_cdp.flags) {
+        this->d->m_cdp.outputCaps = packet->caps();
+        this->d->m_cdp.flags = this->d->m_flags;
+        this->d->m_cdp.configure(packet->caps());
+    }
+
+    return true;
+}
+
+void AkVideoMixer::end()
+{
+    this->d->m_baseFrame = nullptr;
+    this->d->m_cacheIndex = 0;
+}
+
+void AkVideoMixer::draw(const AkVideoPacket &packet)
+{
+    this->draw(0, 0, packet);
+}
+
+bool AkVideoMixer::draw(int x, int y, const AkVideoPacket &packet)
+{
+    if (!this->d->m_baseFrame
+        || !*this->d->m_baseFrame
+        || !packet
+        || packet.caps().format() != this->d->m_baseFrame->caps().format()) {
+        return false;
+    }
+
+    this->d->draw(x, y, packet);
+
+    return true;
+}
+
+void AkVideoMixer::setCacheIndex(int index)
+{
+    this->d->m_cacheIndex = index;
+}
+
+void AkVideoMixer::setFlags(const AkVideoMixer::MixerFlags &flags)
+{
+    if (this->d->m_flags == flags)
+        return;
+
+    this->d->m_flags = flags;
+    emit this->flagsChanged(this->d->m_flags);
+}
+
+void AkVideoMixer::resetFlags()
+{
+    this->setFlags(MixerFlagNone);
+}
+
+void AkVideoMixer::reset()
+{
+    if (this->d->m_dp) {
+        delete [] this->d->m_dp;
+        this->d->m_dp = nullptr;
+    }
+
+    this->d->m_cdp.reset();
+    this->d->m_dpSize = 0;
+}
+
+void AkVideoMixer::registerTypes()
+{
+    qRegisterMetaType<AkVideoMixer>("AkVideoMixer");
+    qRegisterMetaType<MixerFlag>("MixerFlag");
+    qRegisterMetaType<MixerFlags>("MixerFlags");
+    qmlRegisterSingletonType<AkVideoMixer>("Ak", 1, 0, "AkVideoMixer",
+                                           [] (QQmlEngine *qmlEngine,
+                                               QJSEngine *jsEngine) -> QObject * {
+        Q_UNUSED(qmlEngine)
+        Q_UNUSED(jsEngine)
+
+        return new AkVideoMixer();
+    });
+}
+
+#define DEFINE_DRAW_FUNC(size) \
+    case DrawDataTypes_##size: \
+        this->draw<quint##size>(dp, packet, *this->m_baseFrame); \
+        break;
+
+void AkVideoMixerPrivate::draw(int x, int y, const AkVideoPacket &packet)
+{
+    int cacheIndex;
+
+    if (this->m_cdp.lightweightCache) {
+        cacheIndex = 0;
+
+        if (this->m_dpSize != 1) {
+            if (this->m_dp)
+                delete [] this->m_dp;
+
+            this->m_dp = new DrawParameters[1];
+            this->m_dpSize = 1;
+        }
+    } else {
+        cacheIndex = this->m_cacheIndex;
+
+        if (this->m_cacheIndex >= this->m_dpSize) {
+            static const int cacheBlockSize = 8;
+            auto newSize = (this->m_cacheIndex + cacheBlockSize) & ~(cacheBlockSize - 1);
+            auto dp = new DrawParameters[newSize];
+
+            if (this->m_dp) {
+                for (int i = 0; i < this->m_dpSize; ++i)
+                    dp[i] = this->m_dp[i];
+
+                delete [] this->m_dp;
+            }
+
+            this->m_dp = dp;
+            this->m_dpSize = newSize;
+        }
+    }
+
+    auto &dp = this->m_dp[cacheIndex];
+
+    if (!packet.caps().isSameFormat(dp.inputCaps)
+        || !this->m_baseFrame->caps().isSameFormat(dp.outputCaps)
+        || x != dp.x
+        || y != dp.y) {
+        dp.inputCaps = packet.caps();
+        dp.outputCaps = this->m_baseFrame->caps();
+        dp.x = x;
+        dp.y = y;
+        dp.configure(x,
+                     y,
+                     packet.caps(),
+                     this->m_baseFrame->caps(),
+                     this->m_cdp);
+    }
+
+    if (dp.canDraw) {
+        if (this->m_cdp.fastDraw) {
+            this->drawBlit(dp, packet, *this->m_baseFrame);
+        } else {
+            switch (this->m_cdp.drawDataTypes) {
+            DEFINE_DRAW_FUNC(8)
+            DEFINE_DRAW_FUNC(16)
+            DEFINE_DRAW_FUNC(32)
+            }
+        }
+    }
+
+    if (!this->m_cdp.lightweightCache)
+        this->m_cacheIndex++;
+}
+
+CommonDrawParameters::CommonDrawParameters()
+{
+
+}
+
+CommonDrawParameters::CommonDrawParameters(const CommonDrawParameters &other):
+    outputCaps(other.outputCaps),
+    flags(other.flags),
+    drawType(other.drawType),
+    drawDataTypes(other.drawDataTypes),
+    fastDraw(other.fastDraw),
+    optimizedFor8bits(other.optimizedFor8bits),
+    endianness(other.endianness),
+    planeXi(other.planeXi),
+    planeYi(other.planeYi),
+    planeZi(other.planeZi),
+    planeAi(other.planeAi),
+    compXi(other.compXi),
+    compYi(other.compYi),
+    compZi(other.compZi),
+    compAi(other.compAi),
+    xiOffset(other.xiOffset),
+    yiOffset(other.yiOffset),
+    ziOffset(other.ziOffset),
+    aiOffset(other.aiOffset),
+    xiShift(other.xiShift),
+    yiShift(other.yiShift),
+    ziShift(other.ziShift),
+    aiShift(other.aiShift),
+    xiStep(other.xiStep),
+    yiStep(other.yiStep),
+    ziStep(other.ziStep),
+    aiStep(other.aiStep),
+    xiWidthDiv(other.xiWidthDiv),
+    yiWidthDiv(other.yiWidthDiv),
+    ziWidthDiv(other.ziWidthDiv),
+    aiWidthDiv(other.aiWidthDiv),
+    maxXi(other.maxXi),
+    maxYi(other.maxYi),
+    maxZi(other.maxZi),
+    maxAi(other.maxAi),
+    maxAi2(other.maxAi2),
+    maskXo(other.maskXo),
+    maskYo(other.maskYo),
+    maskZo(other.maskZo),
+    maskAo(other.maskAo),
+    lengthAi(other.lengthAi),
+    alphaShift(other.alphaShift)
+{
+    auto alphaMult = 1 << (2 * this->lengthAi);
+    size_t alphaMultSize = sizeof(qint64) * alphaMult;
+
+    if (other.aiMultTable) {
+        this->aiMultTable = new qint64 [alphaMult];
+        memcpy(this->aiMultTable, other.aiMultTable, alphaMultSize);
+    }
+
+    if (other.aoMultTable) {
+        this->aoMultTable = new qint64 [alphaMult];
+        memcpy(this->aoMultTable, other.aoMultTable, alphaMultSize);
+    }
+
+    if (other.alphaDivTable) {
+        this->alphaDivTable = new qint64 [alphaMult];
+        memcpy(this->alphaDivTable, other.alphaDivTable, alphaMultSize);
+    }
+}
+
+CommonDrawParameters::~CommonDrawParameters()
+{
+    this->clearBuffers();
+}
+
+CommonDrawParameters &CommonDrawParameters::operator =(const CommonDrawParameters &other)
+{
+    if (this != &other) {
+        this->outputCaps = other.outputCaps;
+        this->flags = other.flags;
+        this->drawType = other.drawType;
+        this->drawDataTypes = other.drawDataTypes;
+        this->fastDraw = other.fastDraw;
+        this->optimizedFor8bits = other.optimizedFor8bits;
+        this->endianness = other.endianness;
+        this->planeXi = other.planeXi;
+        this->planeYi = other.planeYi;
+        this->planeZi = other.planeZi;
+        this->planeAi = other.planeAi;
+        this->compXi = other.compXi;
+        this->compYi = other.compYi;
+        this->compZi = other.compZi;
+        this->compAi = other.compAi;
+        this->xiOffset = other.xiOffset;
+        this->yiOffset = other.yiOffset;
+        this->ziOffset = other.ziOffset;
+        this->aiOffset = other.aiOffset;
+        this->xiShift = other.xiShift;
+        this->yiShift = other.yiShift;
+        this->ziShift = other.ziShift;
+        this->aiShift = other.aiShift;
+        this->xiStep = other.xiStep;
+        this->yiStep = other.yiStep;
+        this->ziStep = other.ziStep;
+        this->aiStep = other.aiStep;
+        this->xiWidthDiv = other.xiWidthDiv;
+        this->yiWidthDiv = other.yiWidthDiv;
+        this->ziWidthDiv = other.ziWidthDiv;
+        this->aiWidthDiv = other.aiWidthDiv;
+        this->maxXi = other.maxXi;
+        this->maxYi = other.maxYi;
+        this->maxZi = other.maxZi;
+        this->maxAi = other.maxAi;
+        this->maxAi2 = other.maxAi2;
+        this->maskXo = other.maskXo;
+        this->maskYo = other.maskYo;
+        this->maskZo = other.maskZo;
+        this->maskAo = other.maskAo;
+        this->lengthAi = other.lengthAi;
+        this->alphaShift = other.alphaShift;
+
+        this->clearBuffers();
+
+        auto alphaMult = 1 << (2 * this->lengthAi);
+        size_t alphaMultSize = sizeof(qint64) * alphaMult;
+
+        if (other.aiMultTable) {
+            this->aiMultTable = new qint64 [alphaMult];
+            memcpy(this->aiMultTable, other.aiMultTable, alphaMultSize);
+        }
+
+        if (other.aoMultTable) {
+            this->aoMultTable = new qint64 [alphaMult];
+            memcpy(this->aoMultTable, other.aoMultTable, alphaMultSize);
+        }
+
+        if (other.alphaDivTable) {
+            this->alphaDivTable = new qint64 [alphaMult];
+            memcpy(this->alphaDivTable, other.alphaDivTable, alphaMultSize);
+        }
+    }
+
+    return *this;
+}
+
+void CommonDrawParameters::allocateBuffers(size_t alphaLength)
+{
+    this->clearBuffers();
+
+    auto alphaMult = 1 << (2 * alphaLength);
+    this->aiMultTable = new qint64 [alphaMult];
+    this->aoMultTable = new qint64 [alphaMult];
+    this->alphaDivTable = new qint64 [alphaMult];
+}
+
+void CommonDrawParameters::clearBuffers()
+{
+    if (this->aiMultTable) {
+        delete [] this->aiMultTable;
+        this->aiMultTable = nullptr;
+    }
+
+    if (this->aoMultTable) {
+        delete [] this->aoMultTable;
+        this->aoMultTable = nullptr;
+    }
+
+    if (this->alphaDivTable) {
+        delete [] this->alphaDivTable;
+        this->alphaDivTable = nullptr;
+    }
+}
+
+#define DEFINE_DRAW_TYPES(size) \
+    if (ispecs.byteLength() == (size / 8)) \
+        this->drawDataTypes = DrawDataTypes_##size;
+
+void CommonDrawParameters::configure(const AkVideoCaps &caps)
+{
+    auto ispecs = AkVideoCaps::formatSpecs(caps.format());
+
+    DEFINE_DRAW_TYPES(8);
+    DEFINE_DRAW_TYPES(16);
+    DEFINE_DRAW_TYPES(32);
+
+    switch (ispecs.mainComponents()) {
+    case 1:
+        this->drawType = DrawType_1_component;
+
+        break;
+    case 3:
+        this->drawType = DrawType_3_components;
+
+        break;
+    default:
+        break;
+    }
+
+    this->endianness = ispecs.endianness();
+
+    switch (ispecs.type()) {
+    case AkVideoFormatSpec::VFT_RGB:
+        this->planeXi = ispecs.componentPlane(AkColorComponent::CT_R);
+        this->planeYi = ispecs.componentPlane(AkColorComponent::CT_G);
+        this->planeZi = ispecs.componentPlane(AkColorComponent::CT_B);
+
+        this->compXi = ispecs.component(AkColorComponent::CT_R);
+        this->compYi = ispecs.component(AkColorComponent::CT_G);
+        this->compZi = ispecs.component(AkColorComponent::CT_B);
+
+        break;
+
+    case AkVideoFormatSpec::VFT_YUV:
+        this->planeXi = ispecs.componentPlane(AkColorComponent::CT_Y);
+        this->planeYi = ispecs.componentPlane(AkColorComponent::CT_U);
+        this->planeZi = ispecs.componentPlane(AkColorComponent::CT_V);
+
+        this->compXi = ispecs.component(AkColorComponent::CT_Y);
+        this->compYi = ispecs.component(AkColorComponent::CT_U);
+        this->compZi = ispecs.component(AkColorComponent::CT_V);
+
+        break;
+
+    default:
+        break;
+    }
+
+    this->planeAi = ispecs.componentPlane(AkColorComponent::CT_A);
+    this->compAi = ispecs.component(AkColorComponent::CT_A);
+
+    this->xiOffset = this->compXi.offset();
+    this->yiOffset = this->compYi.offset();
+    this->ziOffset = this->compZi.offset();
+    this->aiOffset = this->compAi.offset();
+
+    this->xiShift = this->compXi.shift();
+    this->yiShift = this->compYi.shift();
+    this->ziShift = this->compZi.shift();
+    this->aiShift = this->compAi.shift();
+
+    this->xiStep = this->compXi.step();
+    this->yiStep = this->compYi.step();
+    this->ziStep = this->compZi.step();
+    this->aiStep = this->compAi.step();
+
+    this->xiWidthDiv = this->compXi.widthDiv();
+    this->yiWidthDiv = this->compYi.widthDiv();
+    this->ziWidthDiv = this->compZi.widthDiv();
+    this->aiWidthDiv = this->compAi.widthDiv();
+
+    this->maxXi = this->compXi.max<quint64>();
+    this->maxYi = this->compYi.max<quint64>();
+    this->maxZi = this->compZi.max<quint64>();
+    this->maxAi = this->compAi.max<quint64>();
+    this->maxAi2 = this->maxAi * this->maxAi;
+
+    this->maskXo = ~(this->compXi.max<quint64>() << this->compXi.shift());
+    this->maskYo = ~(this->compYi.max<quint64>() << this->compYi.shift());
+    this->maskZo = ~(this->compZi.max<quint64>() << this->compZi.shift());
+    this->maskAo = ~(this->compAi.max<quint64>() << this->compAi.shift());
+
+    this->lengthAi = this->compAi.length();
+    this->alphaShift = 2 * this->lengthAi;
+    this->fastDraw = (this->flags & AkVideoMixer::MixerFlagForceBlit)
+                     || !ispecs.contains(AkColorComponent::CT_A);
+    this->lightweightCache =
+            this->flags & AkVideoMixer::MixerFlagLightweightCache;
+    this->optimizedFor8bits = this->compAi.length() <= 8;
+
+    if (!this->fastDraw) {
+        this->allocateBuffers(this->lengthAi);
+        auto alphaMult = 1 << (2 * this->lengthAi);
+        auto aBitLen = 1 << this->lengthAi;
+
+        for (int ai = 0; ai < aBitLen; ai++)
+            for (int ao = 0; ao < aBitLen; ao++) {
+                auto alphaMask = (size_t(ai) << this->lengthAi) | size_t(ao);
+                auto a = this->maxAi2 - (this->maxAi - ai) * (this->maxAi - ao);
+                this->aiMultTable[alphaMask] = a? alphaMult * qint64(ai) * qint64(this->maxAi) / a: 0;
+                this->aoMultTable[alphaMask] = a? alphaMult * qint64(ao) * (qint64(this->maxAi) - qint64(ai)) / a: 0;
+                this->alphaDivTable[alphaMask] = a / this->maxAi;
+            }
+    }
+}
+
+void CommonDrawParameters::reset()
+{
+    this->clearBuffers();
+
+    this->outputCaps = AkVideoCaps();
+
+    this->drawType = DrawType_1_component;
+    this->drawDataTypes = DrawDataTypes_8;
+    this->fastDraw = false;
+
+    this->endianness = Q_BYTE_ORDER;
+
+    this->clearBuffers();
+
+    this->planeXi = 0;
+    this->planeYi = 0;
+    this->planeZi = 0;
+    this->planeAi = 0;
+
+    this->compXi = {};
+    this->compYi = {};
+    this->compZi = {};
+    this->compAi = {};
+
+    this->xiOffset = 0;
+    this->yiOffset = 0;
+    this->ziOffset = 0;
+    this->aiOffset = 0;
+
+    this->xiShift = 0;
+    this->yiShift = 0;
+    this->ziShift = 0;
+    this->aiShift = 0;
+
+    this->xiStep = 0;
+    this->yiStep = 0;
+    this->ziStep = 0;
+    this->aiStep = 0;
+
+    this->xiWidthDiv = 0;
+    this->yiWidthDiv = 0;
+    this->ziWidthDiv = 0;
+    this->aiWidthDiv = 0;
+
+    this->maxXi = 0;
+    this->maxYi = 0;
+    this->maxZi = 0;
+    this->maxAi = 0;
+    this->maxAi2 = 0;
+
+    this->maskXo = 0;
+    this->maskYo = 0;
+    this->maskZo = 0;
+    this->maskAo = 0;
+
+    this->lengthAi = 0;
+    this->alphaShift = 0;
+    this->optimizedFor8bits = false;
+}
+
+DrawParameters::DrawParameters()
+{
+}
+
+DrawParameters::DrawParameters(const DrawParameters &other):
+    inputCaps(other.inputCaps),
+    x(other.x),
+    y(other.y),
+    iX(other.iX),
+    iY(other.iY),
+    iWidth(other.iWidth),
+    iHeight(other.iHeight),
+    oX(other.oX),
+    oY(other.oY),
+    oWidth(other.oWidth),
+    oHeight(other.oHeight),
+    iDiffX(other.iDiffX),
+    iDiffY(other.iDiffY),
+    oDiffX(other.oDiffX),
+    oDiffY(other.oDiffY),
+    oMultX(other.oMultX),
+    oMultY(other.oMultY)
+{
+    auto width = this->outputCaps.width();
+    auto height = this->outputCaps.height();
+
+    size_t widthDataSize = sizeof(int) * width;
+
+    if (other.srcWidthOffsetX) {
+        this->srcWidthOffsetX = new int [width];
+        memcpy(this->srcWidthOffsetX, other.srcWidthOffsetX, widthDataSize);
+    }
+
+    if (other.srcWidthOffsetY) {
+        this->srcWidthOffsetY = new int [width];
+        memcpy(this->srcWidthOffsetY, other.srcWidthOffsetY, widthDataSize);
+    }
+
+    if (other.srcWidthOffsetZ) {
+        this->srcWidthOffsetZ = new int [width];
+        memcpy(this->srcWidthOffsetZ, other.srcWidthOffsetZ, widthDataSize);
+    }
+
+    if (other.srcWidthOffsetA) {
+        this->srcWidthOffsetA = new int [width];
+        memcpy(this->srcWidthOffsetA, other.srcWidthOffsetA, widthDataSize);
+    }
+
+    if (other.srcHeight) {
+        this->srcHeight = new int [height];
+        memcpy(this->srcHeight, other.srcHeight, sizeof(int) * height);
+    }
+
+    if (other.dstWidthOffsetX) {
+        this->dstWidthOffsetX = new int [width];
+        memcpy(this->dstWidthOffsetX, other.dstWidthOffsetX, widthDataSize);
+    }
+
+    if (other.dstWidthOffsetY) {
+        this->dstWidthOffsetY = new int [width];
+        memcpy(this->dstWidthOffsetY, other.dstWidthOffsetY, widthDataSize);
+    }
+
+    if (other.dstWidthOffsetZ) {
+        this->dstWidthOffsetZ = new int [width];
+        memcpy(this->dstWidthOffsetZ, other.dstWidthOffsetZ, widthDataSize);
+    }
+
+    if (other.dstWidthOffsetA) {
+        this->dstWidthOffsetA = new int [width];
+        memcpy(this->dstWidthOffsetA, other.dstWidthOffsetA, widthDataSize);
+    }
+}
+
+DrawParameters::~DrawParameters()
+{
+    this->clearBuffers();
+}
+
+DrawParameters &DrawParameters::operator =(const DrawParameters &other)
+{
+    if (this != &other) {
+        this->inputCaps = other.inputCaps;
+        this->outputCaps = other.outputCaps;
+        this->x = other.x;
+        this->y = other.y;
+        this->iX = other.iX;
+        this->iY = other.iY;
+        this->iWidth = other.iWidth;
+        this->iHeight = other.iHeight;
+        this->oX = other.oX;
+        this->oY = other.oY;
+        this->oWidth = other.oWidth;
+        this->oHeight = other.oHeight;
+        this->iDiffX = other.iDiffX;
+        this->iDiffY = other.iDiffY;
+        this->oDiffX = other.oDiffX;
+        this->oDiffY = other.oDiffY;
+        this->oMultX = other.oMultX;
+        this->oMultY = other.oMultY;
+
+        this->clearBuffers();
+
+        auto width = this->outputCaps.width();
+        auto height = this->outputCaps.height();
+
+        size_t widthDataSize = sizeof(int) * width;
+
+        if (other.srcWidthOffsetX) {
+            this->srcWidthOffsetX = new int [width];
+            memcpy(this->srcWidthOffsetX, other.srcWidthOffsetX, widthDataSize);
+        }
+
+        if (other.srcWidthOffsetY) {
+            this->srcWidthOffsetY = new int [width];
+            memcpy(this->srcWidthOffsetY, other.srcWidthOffsetY, widthDataSize);
+        }
+
+        if (other.srcWidthOffsetZ) {
+            this->srcWidthOffsetZ = new int [width];
+            memcpy(this->srcWidthOffsetZ, other.srcWidthOffsetZ, widthDataSize);
+        }
+
+        if (other.srcWidthOffsetA) {
+            this->srcWidthOffsetA = new int [width];
+            memcpy(this->srcWidthOffsetA, other.srcWidthOffsetA, widthDataSize);
+        }
+
+        if (other.srcHeight) {
+            this->srcHeight = new int [height];
+            memcpy(this->srcHeight, other.srcHeight, sizeof(int) * height);
+        }
+
+        if (other.dstWidthOffsetX) {
+            this->dstWidthOffsetX = new int [width];
+            memcpy(this->dstWidthOffsetX, other.dstWidthOffsetX, widthDataSize);
+        }
+
+        if (other.dstWidthOffsetY) {
+            this->dstWidthOffsetY = new int [width];
+            memcpy(this->dstWidthOffsetY, other.dstWidthOffsetY, widthDataSize);
+        }
+
+        if (other.dstWidthOffsetZ) {
+            this->dstWidthOffsetZ = new int [width];
+            memcpy(this->dstWidthOffsetZ, other.dstWidthOffsetZ, widthDataSize);
+        }
+
+        if (other.dstWidthOffsetA) {
+            this->dstWidthOffsetA = new int [width];
+            memcpy(this->dstWidthOffsetA, other.dstWidthOffsetA, widthDataSize);
+        }
+
+    }
+
+    return *this;
+}
+
+void DrawParameters::allocateBuffers(const AkVideoCaps &caps)
+{
+    this->clearBuffers();
+
+    this->srcWidthOffsetX = new int [caps.width()];
+    this->srcWidthOffsetY = new int [caps.width()];
+    this->srcWidthOffsetZ = new int [caps.width()];
+    this->srcWidthOffsetA = new int [caps.width()];
+    this->srcHeight = new int [caps.height()];
+
+    this->dstWidthOffsetX = new int [caps.width()];
+    this->dstWidthOffsetY = new int [caps.width()];
+    this->dstWidthOffsetZ = new int [caps.width()];
+    this->dstWidthOffsetA = new int [caps.width()];
+}
+
+void DrawParameters::clearBuffers()
+{
+    if (this->srcWidthOffsetX) {
+        delete [] this->srcWidthOffsetX;
+        this->srcWidthOffsetX = nullptr;
+    }
+
+    if (this->srcWidthOffsetY) {
+        delete [] this->srcWidthOffsetY;
+        this->srcWidthOffsetY = nullptr;
+    }
+
+    if (this->srcWidthOffsetZ) {
+        delete [] this->srcWidthOffsetZ;
+        this->srcWidthOffsetZ = nullptr;
+    }
+
+    if (this->srcWidthOffsetA) {
+        delete [] this->srcWidthOffsetA;
+        this->srcWidthOffsetA = nullptr;
+    }
+
+    if (this->srcHeight) {
+        delete [] this->srcHeight;
+        this->srcHeight = nullptr;
+    }
+
+    if (this->dstWidthOffsetX) {
+        delete [] this->dstWidthOffsetX;
+        this->dstWidthOffsetX = nullptr;
+    }
+
+    if (this->dstWidthOffsetY) {
+        delete [] this->dstWidthOffsetY;
+        this->dstWidthOffsetY = nullptr;
+    }
+
+    if (this->dstWidthOffsetZ) {
+        delete [] this->dstWidthOffsetZ;
+        this->dstWidthOffsetZ = nullptr;
+    }
+
+    if (this->dstWidthOffsetA) {
+        delete [] this->dstWidthOffsetA;
+        this->dstWidthOffsetA = nullptr;
+    }
+}
+
+void DrawParameters::configure(int x, int y,
+                               const AkVideoCaps &icaps,
+                               const AkVideoCaps &ocaps,
+                               const CommonDrawParameters &cdp)
+{
+    if (x < 0) {
+        this->iX = -x;
+        this->oX = 0;
+    } else {
+        this->iX = 0;
+        this->oX = x;
+    }
+
+    if (x + icaps.width() <= ocaps.width()) {
+        this->iWidth = icaps.width();
+        this->oWidth = icaps.width() + x;
+    } else {
+        this->iWidth = ocaps.width() - x;
+        this->oWidth = ocaps.width();
+    }
+
+    if (y < 0) {
+        this->iY = -y;
+        this->oY = 0;
+    } else {
+        this->iY = 0;
+        this->oY = y;
+    }
+
+    if (y + icaps.height() <= ocaps.height()) {
+        this->iHeight = icaps.height();
+        this->oHeight = icaps.height() + y;
+    } else {
+        this->iHeight = ocaps.height() - y;
+        this->oHeight = ocaps.height();
+    }
+
+    this->canDraw = this->iX >= 0 && this->iX < icaps.width()
+                 && this->iY >= 0 && this->iY < icaps.height()
+                 && this->oX >= 0 && this->oX < ocaps.width()
+                 && this->oY >= 0 && this->oY < ocaps.height()
+                 && this->iWidth >= 0 && this->iWidth <= icaps.width()
+                 && this->iHeight >= 0 && this->iHeight <= icaps.height()
+                 && this->oWidth >= 0 && this->oWidth <= ocaps.width()
+                 && this->oHeight >= 0 && this->oHeight <= ocaps.height();
+
+    this->iDiffX = this->iWidth - this->iX - 1;
+    this->oDiffX = this->oWidth - this->oX - 1;
+
+    if (this->oDiffX < 1)
+        this->oDiffX = 1;
+
+    this->oMultX = this->iX * this->oDiffX - this->oX * this->iDiffX;
+
+    this->iDiffY = this->iHeight - this->iY - 1;
+    this->oDiffY = this->oHeight - this->oY - 1;
+
+    if (this->oDiffY < 1)
+        this->oDiffY = 1;
+
+    this->oMultY = this->iY * this->oDiffY - this->oY * this->iDiffY;
+
+    if (!cdp.lightweightCache) {
+        this->allocateBuffers(ocaps);
+
+        for (int x = 0; x < ocaps.width(); ++x) {
+            auto xs = (x * this->iDiffX + this->oMultX) / this->oDiffX;
+
+            this->srcWidthOffsetX[x] = (xs >> cdp.xiWidthDiv) * cdp.xiStep;
+            this->srcWidthOffsetY[x] = (xs >> cdp.yiWidthDiv) * cdp.yiStep;
+            this->srcWidthOffsetZ[x] = (xs >> cdp.ziWidthDiv) * cdp.ziStep;
+            this->srcWidthOffsetA[x] = (xs >> cdp.aiWidthDiv) * cdp.aiStep;
+
+            this->dstWidthOffsetX[x] = (x >> cdp.xiWidthDiv) * cdp.xiStep;
+            this->dstWidthOffsetY[x] = (x >> cdp.yiWidthDiv) * cdp.yiStep;
+            this->dstWidthOffsetZ[x] = (x >> cdp.ziWidthDiv) * cdp.ziStep;
+            this->dstWidthOffsetA[x] = (x >> cdp.aiWidthDiv) * cdp.aiStep;
+        }
+
+        for (int y = 0; y < ocaps.height(); ++y) {
+            auto ys = (y * this->iDiffY + this->oMultY) / this->oDiffY;
+            this->srcHeight[y] = ys;
+        }
+    }
+}
+
+void DrawParameters::reset()
+{
+    this->inputCaps = AkVideoCaps();
+    this->outputCaps = AkVideoCaps();
+
+    this->iX = 0;
+    this->iY = 0;
+    this->iWidth = 0;
+    this->iHeight = 0;
+
+    this->oX = 0;
+    this->oY = 0;
+    this->oWidth = 0;
+    this->oHeight = 0;
+    this->iDiffX = 0;
+    this->iDiffY = 0;
+    this->oDiffX = 0;
+    this->oDiffY = 0;
+    this->oMultX = 0;
+    this->oMultY = 0;
+
+    this->clearBuffers();
+}
+
+#include "moc_akvideomixer.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Lib/src/akvideomixer.h
@@ -0,0 +1,83 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef AKVIDEOMIXER_H
+#define AKVIDEOMIXER_H
+
+#include <QObject>
+
+#include "akcommons.h"
+
+class AkVideoMixerPrivate;
+class AkVideoPacket;
+
+class AKCOMMONS_EXPORT AkVideoMixer: public QObject
+{
+    Q_OBJECT
+    Q_FLAGS(MixerFlag)
+    Q_PROPERTY(MixerFlags flags
+               READ flags
+               WRITE setFlags
+               RESET resetFlags
+               NOTIFY flagsChanged)
+
+    public:
+        enum MixerFlag
+        {
+            MixerFlagNone = 0x0,
+            MixerFlagLightweightCache = 0x1,
+            MixerFlagForceBlit = 0x2,
+        };
+        Q_DECLARE_FLAGS(MixerFlags, MixerFlag)
+        Q_FLAG(MixerFlags)
+        Q_ENUM(MixerFlag)
+
+        AkVideoMixer(QObject *parent=nullptr);
+        AkVideoMixer(const AkVideoMixer &other);
+        ~AkVideoMixer();
+        AkVideoMixer &operator =(const AkVideoMixer &other);
+
+        Q_INVOKABLE static QObject *create();
+
+        Q_INVOKABLE AkVideoMixer::MixerFlags flags() const;
+        Q_INVOKABLE bool begin(AkVideoPacket *packet);
+        Q_INVOKABLE void end();
+        Q_INVOKABLE void draw(const AkVideoPacket &packet);
+        Q_INVOKABLE bool draw(int x, int y, const AkVideoPacket &packet);
+
+    private:
+        AkVideoMixerPrivate *d;
+
+    signals:
+        void flagsChanged(const AkVideoMixer::MixerFlags &flags);
+
+    public Q_SLOTS:
+        void setCacheIndex(int index);
+        void setFlags(const AkVideoMixer::MixerFlags &flags);
+        void resetFlags();
+        void reset();
+        static void registerTypes();
+};
+
+Q_DECLARE_METATYPE(AkVideoMixer)
+Q_DECLARE_METATYPE(AkVideoMixer::MixerFlag)
+Q_DECLARE_METATYPE(AkVideoMixer::MixerFlags)
+Q_DECLARE_OPERATORS_FOR_FLAGS(AkVideoMixer::MixerFlags)
+
+#endif // AKFRAC_H
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akvideopacket.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/akvideopacket.cpp
@@ -23,284 +23,111 @@
 #include <QQmlEngine>
 
 #include "akvideopacket.h"
-#include "akpacket.h"
-#include "akcaps.h"
 #include "akfrac.h"
+#include "akpacket.h"
+#include "akvideoformatspec.h"
 
-struct RGBX
-{
-    uint8_t x;
-    uint8_t b;
-    uint8_t g;
-    uint8_t r;
-};
-
-struct XRGB
-{
-    uint8_t b;
-    uint8_t g;
-    uint8_t r;
-    uint8_t x;
-};
-
-struct RGB24
-{
-    uint8_t b;
-    uint8_t g;
-    uint8_t r;
-};
-
-struct RGB16
-{
-    uint16_t b: 5;
-    uint16_t g: 6;
-    uint16_t r: 5;
-};
-
-struct RGB15
-{
-    uint16_t b: 5;
-    uint16_t g: 5;
-    uint16_t r: 5;
-    uint16_t x: 1;
-};
-
-struct XBGR
-{
-    uint8_t r;
-    uint8_t g;
-    uint8_t b;
-    uint8_t x;
-};
-
-struct BGRX
-{
-    uint8_t x;
-    uint8_t r;
-    uint8_t g;
-    uint8_t b;
-};
-
-struct BGR24
-{
-    uint8_t r;
-    uint8_t g;
-    uint8_t b;
-};
-
-struct BGR16
-{
-    uint16_t r: 5;
-    uint16_t g: 6;
-    uint16_t b: 5;
-};
-
-struct BGR15
-{
-    uint16_t r: 5;
-    uint16_t g: 5;
-    uint16_t b: 5;
-    uint16_t x: 1;
-};
-
-struct UYVY
-{
-    uint8_t v0;
-    uint8_t y0;
-    uint8_t u0;
-    uint8_t y1;
-};
-
-struct YUY2
-{
-    uint8_t y0;
-    uint8_t v0;
-    uint8_t y1;
-    uint8_t u0;
-};
-
-struct UV
-{
-    uint8_t u;
-    uint8_t v;
-};
-
-struct VU
-{
-    uint8_t v;
-    uint8_t u;
-};
-
-using VideoConvertFuntion = AkVideoPacket (*)(const AkVideoPacket *src,
-                                              int align);
-
-struct VideoConvert
-{
-    AkVideoCaps::PixelFormat from;
-    AkVideoCaps::PixelFormat to;
-    VideoConvertFuntion convert;
-};
-
-using ImageToPixelFormatMap = QMap<QImage::Format, AkVideoCaps::PixelFormat>;
-
-inline ImageToPixelFormatMap initImageToPixelFormatMap()
-{
-    ImageToPixelFormatMap imageToFormat {
-        {QImage::Format_Mono      , AkVideoCaps::Format_monob   },
-        {QImage::Format_RGB32     , AkVideoCaps::Format_0rgb    },
-        {QImage::Format_ARGB32    , AkVideoCaps::Format_argb    },
-        {QImage::Format_RGB16     , AkVideoCaps::Format_rgb565le},
-        {QImage::Format_RGB555    , AkVideoCaps::Format_rgb555le},
-        {QImage::Format_RGB888    , AkVideoCaps::Format_rgb24   },
-        {QImage::Format_RGB444    , AkVideoCaps::Format_rgb444le},
-        {QImage::Format_Grayscale8, AkVideoCaps::Format_gray    }
-    };
-
-    return imageToFormat;
-}
-
-Q_GLOBAL_STATIC_WITH_ARGS(ImageToPixelFormatMap, AkImageToFormat, (initImageToPixelFormatMap()))
+#define MAX_PLANES 4
 
 class AkVideoPacketPrivate
 {
     public:
         AkVideoCaps m_caps;
         QByteArray m_buffer;
-        qint64 m_pts {0};
-        AkFrac m_timeBase;
-        qint64 m_id {-1};
-        int m_index {-1};
-
-        // YUV utility functions
-        inline static uint8_t rgb_y(int r, int g, int b);
-        inline static uint8_t rgb_u(int r, int g, int b);
-        inline static uint8_t rgb_v(int r, int g, int b);
-        inline static uint8_t yuv_r(int y, int u, int v);
-        inline static uint8_t yuv_g(int y, int u, int v);
-        inline static uint8_t yuv_b(int y, int u, int v);
-
-        static AkVideoPacket bgr24_to_0rgb(const AkVideoPacket *src, int align);
-        static AkVideoPacket bgr24_to_rgb24(const AkVideoPacket *src, int align);
-        static AkVideoPacket bgr24_to_rgb565le(const AkVideoPacket *src, int align);
-        static AkVideoPacket bgr24_to_rgb555le(const AkVideoPacket *src, int align);
-        static AkVideoPacket bgr24_to_0bgr(const AkVideoPacket *src, int align);
-        static AkVideoPacket bgr24_to_bgr565le(const AkVideoPacket *src, int align);
-        static AkVideoPacket bgr24_to_bgr555le(const AkVideoPacket *src, int align);
-        static AkVideoPacket bgr24_to_uyvy422(const AkVideoPacket *src, int align);
-        static AkVideoPacket bgr24_to_yuyv422(const AkVideoPacket *src, int align);
-        static AkVideoPacket bgr24_to_nv12(const AkVideoPacket *src, int align);
-        static AkVideoPacket bgr24_to_nv21(const AkVideoPacket *src, int align);
-
-        static AkVideoPacket rgb24_to_0rgb(const AkVideoPacket *src, int align);
-        static AkVideoPacket rgb24_to_rgb565le(const AkVideoPacket *src, int align);
-        static AkVideoPacket rgb24_to_rgb555le(const AkVideoPacket *src, int align);
-        static AkVideoPacket rgb24_to_0bgr(const AkVideoPacket *src, int align);
-        static AkVideoPacket rgb24_to_bgr24(const AkVideoPacket *src, int align);
-        static AkVideoPacket rgb24_to_bgr565le(const AkVideoPacket *src, int align);
-        static AkVideoPacket rgb24_to_bgr555le(const AkVideoPacket *src, int align);
-        static AkVideoPacket rgb24_to_uyvy422(const AkVideoPacket *src, int align);
-        static AkVideoPacket rgb24_to_yuyv422(const AkVideoPacket *src, int align);
-        static AkVideoPacket rgb24_to_nv12(const AkVideoPacket *src, int align);
-        static AkVideoPacket rgb24_to_nv21(const AkVideoPacket *src, int align);
-        static AkVideoPacket rgb24_to_yuv420p(const AkVideoPacket *src, int align);
-
-        static AkVideoPacket rgba_to_rgb24(const AkVideoPacket *src, int align);
-        static AkVideoPacket rgb0_to_rgb24(const AkVideoPacket *src, int align);
-        static AkVideoPacket yuyv422_to_rgb24(const AkVideoPacket *src, int align);
-        static AkVideoPacket yuv420p_to_rgb24(const AkVideoPacket *src, int align);
-        static AkVideoPacket yvu420p_to_rgb24(const AkVideoPacket *src, int align);
-        static AkVideoPacket nv12_to_rgb24(const AkVideoPacket *src, int align);
-        static AkVideoPacket nv21_to_rgb24(const AkVideoPacket *src, int align);
-        static AkVideoPacket rgbap_to_rgb24(const AkVideoPacket *src, int align);
-        static AkVideoPacket _0bgr_to_rgb24(const AkVideoPacket *src, int align);
-        static AkVideoPacket bgr0_to_rgb24(const AkVideoPacket *src, int align);
-        static AkVideoPacket bgr0_to_0rgb(const AkVideoPacket *src, int align);
+        size_t m_size {0};
+        size_t m_nPlanes {0};
+        quint8 *m_planes[MAX_PLANES];
+        size_t m_planeSize[MAX_PLANES];
+        size_t m_planeOffset[MAX_PLANES];
+        size_t m_lineSize[MAX_PLANES];
+        size_t m_bytesUsed[MAX_PLANES];
+        size_t m_widthDiv[MAX_PLANES];
+        size_t m_heightDiv[MAX_PLANES];
+        size_t m_align {32};
+
+        void updateParams(const AkVideoFormatSpec &specs);
+        inline void updatePlanes();
+        template<typename T>
+        static inline T alignUp(const T &value, const T &align)
+        {
+            return (value + align - 1) & ~(align - 1);
+        }
 };
 
-using VideoConvertFuncs = QVector<VideoConvert>;
-
-VideoConvertFuncs initVideoConvertFuncs()
-{
-    VideoConvertFuncs convert {
-        {AkVideoCaps::Format_bgr24  , AkVideoCaps::Format_0rgb    , AkVideoPacketPrivate::bgr24_to_0rgb    },
-        {AkVideoCaps::Format_bgr24  , AkVideoCaps::Format_rgb24   , AkVideoPacketPrivate::bgr24_to_rgb24   },
-        {AkVideoCaps::Format_bgr24  , AkVideoCaps::Format_rgb565le, AkVideoPacketPrivate::bgr24_to_rgb565le},
-        {AkVideoCaps::Format_bgr24  , AkVideoCaps::Format_rgb555le, AkVideoPacketPrivate::bgr24_to_rgb555le},
-        {AkVideoCaps::Format_bgr24  , AkVideoCaps::Format_0bgr    , AkVideoPacketPrivate::bgr24_to_0bgr    },
-        {AkVideoCaps::Format_bgr24  , AkVideoCaps::Format_bgr565le, AkVideoPacketPrivate::bgr24_to_bgr565le},
-        {AkVideoCaps::Format_bgr24  , AkVideoCaps::Format_bgr555le, AkVideoPacketPrivate::bgr24_to_bgr555le},
-        {AkVideoCaps::Format_bgr24  , AkVideoCaps::Format_uyvy422 , AkVideoPacketPrivate::bgr24_to_uyvy422 },
-        {AkVideoCaps::Format_bgr24  , AkVideoCaps::Format_yuyv422 , AkVideoPacketPrivate::bgr24_to_yuyv422 },
-        {AkVideoCaps::Format_bgr24  , AkVideoCaps::Format_nv12    , AkVideoPacketPrivate::bgr24_to_nv12    },
-        {AkVideoCaps::Format_bgr24  , AkVideoCaps::Format_nv21    , AkVideoPacketPrivate::bgr24_to_nv21    },
-
-        {AkVideoCaps::Format_rgb24  , AkVideoCaps::Format_0rgb    , AkVideoPacketPrivate::rgb24_to_0rgb    },
-        {AkVideoCaps::Format_rgb24  , AkVideoCaps::Format_rgb565le, AkVideoPacketPrivate::rgb24_to_rgb565le},
-        {AkVideoCaps::Format_rgb24  , AkVideoCaps::Format_rgb555le, AkVideoPacketPrivate::rgb24_to_rgb555le},
-        {AkVideoCaps::Format_rgb24  , AkVideoCaps::Format_0bgr    , AkVideoPacketPrivate::rgb24_to_0bgr    },
-        {AkVideoCaps::Format_rgb24  , AkVideoCaps::Format_bgr24   , AkVideoPacketPrivate::rgb24_to_bgr24   },
-        {AkVideoCaps::Format_rgb24  , AkVideoCaps::Format_bgr565le, AkVideoPacketPrivate::rgb24_to_bgr565le},
-        {AkVideoCaps::Format_rgb24  , AkVideoCaps::Format_bgr555le, AkVideoPacketPrivate::rgb24_to_bgr555le},
-        {AkVideoCaps::Format_rgb24  , AkVideoCaps::Format_uyvy422 , AkVideoPacketPrivate::rgb24_to_uyvy422 },
-        {AkVideoCaps::Format_rgb24  , AkVideoCaps::Format_yuyv422 , AkVideoPacketPrivate::rgb24_to_yuyv422 },
-        {AkVideoCaps::Format_rgb24  , AkVideoCaps::Format_nv12    , AkVideoPacketPrivate::rgb24_to_nv12    },
-        {AkVideoCaps::Format_rgb24  , AkVideoCaps::Format_nv21    , AkVideoPacketPrivate::rgb24_to_nv21    },
-        {AkVideoCaps::Format_rgb24  , AkVideoCaps::Format_yuv420p , AkVideoPacketPrivate::rgb24_to_yuv420p },
-
-        {AkVideoCaps::Format_rgba   , AkVideoCaps::Format_rgb24   , AkVideoPacketPrivate::rgba_to_rgb24    },
-        {AkVideoCaps::Format_rgb0   , AkVideoCaps::Format_rgb24   , AkVideoPacketPrivate::rgba_to_rgb24    },
-        {AkVideoCaps::Format_yuyv422, AkVideoCaps::Format_rgb24   , AkVideoPacketPrivate::yuyv422_to_rgb24 },
-        {AkVideoCaps::Format_yuv420p, AkVideoCaps::Format_rgb24   , AkVideoPacketPrivate::yuv420p_to_rgb24 },
-        {AkVideoCaps::Format_yvu420p, AkVideoCaps::Format_rgb24   , AkVideoPacketPrivate::yvu420p_to_rgb24 },
-        {AkVideoCaps::Format_yuv422p, AkVideoCaps::Format_rgb24   , AkVideoPacketPrivate::yuv420p_to_rgb24 },
-        {AkVideoCaps::Format_nv12   , AkVideoCaps::Format_rgb24   , AkVideoPacketPrivate::nv12_to_rgb24    },
-        {AkVideoCaps::Format_nv16   , AkVideoCaps::Format_rgb24   , AkVideoPacketPrivate::nv12_to_rgb24    },
-        {AkVideoCaps::Format_nv21   , AkVideoCaps::Format_rgb24   , AkVideoPacketPrivate::nv21_to_rgb24    },
-        {AkVideoCaps::Format_rgbap  , AkVideoCaps::Format_rgb24   , AkVideoPacketPrivate::rgbap_to_rgb24   },
-        {AkVideoCaps::Format_0bgr   , AkVideoCaps::Format_rgb24   , AkVideoPacketPrivate::_0bgr_to_rgb24   },
-        {AkVideoCaps::Format_bgr0   , AkVideoCaps::Format_rgb24   , AkVideoPacketPrivate::bgr0_to_rgb24    },
-        {AkVideoCaps::Format_bgr0   , AkVideoCaps::Format_0rgb    , AkVideoPacketPrivate::bgr0_to_0rgb     },
-    };
-
-    return convert;
-}
-
-Q_GLOBAL_STATIC_WITH_ARGS(VideoConvertFuncs, videoConvert, (initVideoConvertFuncs()))
-
 AkVideoPacket::AkVideoPacket(QObject *parent):
-    QObject(parent)
+    AkPacketBase(parent)
 {
-    this->d = new AkVideoPacketPrivate();
+    this->d = new AkVideoPacketPrivate;
 }
 
-AkVideoPacket::AkVideoPacket(const AkVideoCaps &caps)
+AkVideoPacket::AkVideoPacket(const AkVideoCaps &caps,
+                             bool initialized,
+                             size_t align):
+    AkPacketBase()
 {
-    this->d = new AkVideoPacketPrivate();
+    this->d = new AkVideoPacketPrivate;
     this->d->m_caps = caps;
-    this->d->m_buffer = QByteArray(int(caps.pictureSize()), Qt::Uninitialized);
-}
+    this->d->m_align = align;
+    auto specs = AkVideoCaps::formatSpecs(this->d->m_caps.format());
+    this->d->m_nPlanes = specs.planes();
+    this->d->updateParams(specs);
+
+    if (initialized)
+        this->d->m_buffer = QByteArray(int(this->d->m_size), 0);
+    else
+        this->d->m_buffer = QByteArray(int(this->d->m_size), Qt::Uninitialized);
+
+    this->d->updatePlanes();
+}
+
+AkVideoPacket::AkVideoPacket(const AkPacket &other):
+    AkPacketBase(other)
+{
+    this->d = new AkVideoPacketPrivate;
+
+    if (other.type() == AkPacket::PacketVideo) {
+        auto data = reinterpret_cast<AkVideoPacket *>(other.privateData());
+        this->d->m_caps = data->d->m_caps;
+        this->d->m_buffer = data->d->m_buffer;
+        this->d->m_size = data->d->m_size;
+        this->d->m_nPlanes = data->d->m_nPlanes;
+
+        if (this->d->m_nPlanes > 0) {
+            const size_t dataSize = MAX_PLANES * sizeof(size_t);
+            memcpy(this->d->m_planeSize, data->d->m_planeSize, dataSize);
+            memcpy(this->d->m_planeOffset, data->d->m_planeOffset, dataSize);
+            memcpy(this->d->m_lineSize, data->d->m_lineSize, dataSize);
+            memcpy(this->d->m_bytesUsed, data->d->m_bytesUsed, dataSize);
+            memcpy(this->d->m_widthDiv, data->d->m_widthDiv, dataSize);
+            memcpy(this->d->m_heightDiv, data->d->m_heightDiv, dataSize);
+        }
 
-AkVideoPacket::AkVideoPacket(const AkPacket &other)
-{
-    this->d = new AkVideoPacketPrivate();
-    this->d->m_caps = other.caps();
-    this->d->m_buffer = other.buffer();
-    this->d->m_pts = other.pts();
-    this->d->m_timeBase = other.timeBase();
-    this->d->m_index = other.index();
-    this->d->m_id = other.id();
+        this->d->m_align = data->d->m_align;
+        this->d->updatePlanes();
+    }
 }
 
 AkVideoPacket::AkVideoPacket(const AkVideoPacket &other):
-    QObject()
+    AkPacketBase(other)
 {
-    this->d = new AkVideoPacketPrivate();
+    this->d = new AkVideoPacketPrivate;
     this->d->m_caps = other.d->m_caps;
     this->d->m_buffer = other.d->m_buffer;
-    this->d->m_pts = other.d->m_pts;
-    this->d->m_timeBase = other.d->m_timeBase;
-    this->d->m_index = other.d->m_index;
-    this->d->m_id = other.d->m_id;
+    this->d->m_size = other.d->m_size;
+    this->d->m_nPlanes = other.d->m_nPlanes;
+
+    if (this->d->m_nPlanes > 0) {
+        const size_t dataSize = MAX_PLANES * sizeof(size_t);
+        memcpy(this->d->m_planeSize, other.d->m_planeSize, dataSize);
+        memcpy(this->d->m_planeOffset, other.d->m_planeOffset, dataSize);
+        memcpy(this->d->m_lineSize, other.d->m_lineSize, dataSize);
+        memcpy(this->d->m_bytesUsed, other.d->m_bytesUsed, dataSize);
+        memcpy(this->d->m_widthDiv, other.d->m_widthDiv, dataSize);
+        memcpy(this->d->m_heightDiv, other.d->m_heightDiv, dataSize);
+    }
+
+    this->d->m_align = other.d->m_align;
+    this->d->updatePlanes();
 }
 
 AkVideoPacket::~AkVideoPacket()
@@ -310,12 +137,34 @@ AkVideoPacket::~AkVideoPacket()
 
 AkVideoPacket &AkVideoPacket::operator =(const AkPacket &other)
 {
-    this->d->m_caps = other.caps();
-    this->d->m_buffer = other.buffer();
-    this->d->m_pts = other.pts();
-    this->d->m_timeBase = other.timeBase();
-    this->d->m_index = other.index();
-    this->d->m_id = other.id();
+    if (other.type() == AkPacket::PacketVideo) {
+        auto data = reinterpret_cast<AkVideoPacket *>(other.privateData());
+        this->d->m_caps = data->d->m_caps;
+        this->d->m_buffer = data->d->m_buffer;
+        this->d->m_size = data->d->m_size;
+        this->d->m_nPlanes = data->d->m_nPlanes;
+
+        if (this->d->m_nPlanes > 0) {
+            const size_t dataSize = MAX_PLANES * sizeof(size_t);
+            memcpy(this->d->m_planeSize, data->d->m_planeSize, dataSize);
+            memcpy(this->d->m_planeOffset, data->d->m_planeOffset, dataSize);
+            memcpy(this->d->m_lineSize, data->d->m_lineSize, dataSize);
+            memcpy(this->d->m_bytesUsed, data->d->m_bytesUsed, dataSize);
+            memcpy(this->d->m_widthDiv, data->d->m_widthDiv, dataSize);
+            memcpy(this->d->m_heightDiv, data->d->m_heightDiv, dataSize);
+        }
+
+        this->d->m_align = data->d->m_align;
+        this->d->updatePlanes();
+    } else {
+        this->d->m_caps = AkVideoCaps();
+        this->d->m_buffer.clear();
+        this->d->m_size = 0;
+        this->d->m_nPlanes = 0;
+        this->d->m_align = 32;
+    }
+
+    this->copyMetadata(other);
 
     return *this;
 }
@@ -325,25 +174,24 @@ AkVideoPacket &AkVideoPacket::operator =
     if (this != &other) {
         this->d->m_caps = other.d->m_caps;
         this->d->m_buffer = other.d->m_buffer;
-        this->d->m_pts = other.d->m_pts;
-        this->d->m_timeBase = other.d->m_timeBase;
-        this->d->m_index = other.d->m_index;
-        this->d->m_id = other.d->m_id;
-    }
+        this->d->m_size = other.d->m_size;
+        this->d->m_nPlanes = other.d->m_nPlanes;
 
-    return *this;
-}
+        if (this->d->m_nPlanes > 0) {
+            memcpy(this->d->m_planeSize, other.d->m_planeSize, this->d->m_nPlanes * sizeof(size_t));
+            memcpy(this->d->m_planeOffset, other.d->m_planeOffset, this->d->m_nPlanes * sizeof(size_t));
+            memcpy(this->d->m_lineSize, other.d->m_lineSize, this->d->m_nPlanes * sizeof(size_t));
+            memcpy(this->d->m_bytesUsed, other.d->m_bytesUsed, this->d->m_nPlanes * sizeof(size_t));
+            memcpy(this->d->m_widthDiv, other.d->m_widthDiv, this->d->m_nPlanes * sizeof(size_t));
+            memcpy(this->d->m_heightDiv, other.d->m_heightDiv, this->d->m_nPlanes * sizeof(size_t));
+        }
 
-AkVideoPacket::operator AkPacket() const
-{
-    AkPacket packet(this->d->m_caps);
-    packet.buffer() = this->d->m_buffer;
-    packet.pts() = this->d->m_pts;
-    packet.timeBase() = this->d->m_timeBase;
-    packet.index() = this->d->m_index;
-    packet.id() = this->d->m_id;
+        this->copyMetadata(other);
+        this->d->m_align = other.d->m_align;
+        this->d->updatePlanes();
+    }
 
-    return packet;
+    return *this;
 }
 
 AkVideoPacket::operator bool() const
@@ -351,305 +199,136 @@ AkVideoPacket::operator bool() const
     return this->d->m_caps && !this->d->m_buffer.isEmpty();
 }
 
-AkVideoCaps AkVideoPacket::caps() const
+AkVideoPacket::operator AkPacket() const
 {
-    return this->d->m_caps;
+    AkPacket packet;
+    packet.setType(AkPacket::PacketVideo);
+    packet.setPrivateData(new AkVideoPacket(*this),
+                          [] (void *data) -> void * {
+                              return new AkVideoPacket(*reinterpret_cast<AkVideoPacket *>(data));
+                          },
+                          [] (void *data) {
+                              delete reinterpret_cast<AkVideoPacket *>(data);
+                          });
+    packet.copyMetadata(*this);
+
+    return packet;
 }
 
-AkVideoCaps &AkVideoPacket::caps()
+const AkVideoCaps &AkVideoPacket::caps() const
 {
     return this->d->m_caps;
 }
 
-QByteArray AkVideoPacket::buffer() const
+size_t AkVideoPacket::size() const
 {
-    return this->d->m_buffer;
+    return this->d->m_size;
 }
 
-QByteArray &AkVideoPacket::buffer()
+size_t AkVideoPacket::planes() const
 {
-    return this->d->m_buffer;
+    return this->d->m_nPlanes;
 }
 
-qint64 AkVideoPacket::id() const
+size_t AkVideoPacket::planeSize(int plane) const
 {
-    return this->d->m_id;
+    return this->d->m_planeSize[plane];
 }
 
-qint64 &AkVideoPacket::id()
+size_t AkVideoPacket::lineSize(int plane) const
 {
-    return this->d->m_id;
+    return this->d->m_lineSize[plane];
 }
 
-qint64 AkVideoPacket::pts() const
+size_t AkVideoPacket::bytesUsed(int plane) const
 {
-    return this->d->m_pts;
+    return this->d->m_bytesUsed[plane];
 }
 
-qint64 &AkVideoPacket::pts()
+size_t AkVideoPacket::widthDiv(int plane) const
 {
-    return this->d->m_pts;
+    return this->d->m_widthDiv[plane];
 }
 
-AkFrac AkVideoPacket::timeBase() const
+size_t AkVideoPacket::heightDiv(int plane) const
 {
-    return this->d->m_timeBase;
+    return this->d->m_heightDiv[plane];
 }
 
-AkFrac &AkVideoPacket::timeBase()
+const char *AkVideoPacket::constData() const
 {
-    return this->d->m_timeBase;
+    return reinterpret_cast<char *>(this->d->m_planes[0]);
 }
 
-int AkVideoPacket::index() const
+char *AkVideoPacket::data()
 {
-    return this->d->m_index;
+    return reinterpret_cast<char *>(this->d->m_planes[0]);
 }
 
-int &AkVideoPacket::index()
+const quint8 *AkVideoPacket::constPlane(int plane) const
 {
-    return this->d->m_index;
+    return this->d->m_planes[plane];
 }
 
-void AkVideoPacket::copyMetadata(const AkVideoPacket &other)
+quint8 *AkVideoPacket::plane(int plane)
 {
-    this->d->m_pts = other.d->m_pts;
-    this->d->m_timeBase = other.d->m_timeBase;
-    this->d->m_index = other.d->m_index;
-    this->d->m_id = other.d->m_id;
+    return this->d->m_planes[plane];
 }
 
 const quint8 *AkVideoPacket::constLine(int plane, int y) const
 {
-    return reinterpret_cast<const quint8 *>(this->d->m_buffer.constData())
-            + this->d->m_caps.lineOffset(plane, y);
+    return this->d->m_planes[plane]
+            + size_t(y >> this->d->m_heightDiv[plane])
+            * this->d->m_lineSize[plane];
 }
 
 quint8 *AkVideoPacket::line(int plane, int y)
 {
-    return reinterpret_cast<quint8 *>(this->d->m_buffer.data())
-            + this->d->m_caps.lineOffset(plane, y);
-}
-
-QImage AkVideoPacket::toImage() const
-{
-    if (!this->d->m_caps)
-        return {};
-
-    if (!AkImageToFormat->values().contains(this->d->m_caps.format()))
-        return {};
-
-    QImage image(this->d->m_caps.width(),
-                 this->d->m_caps.height(),
-                 AkImageToFormat->key(this->d->m_caps.format()));
-    auto size = qMin(size_t(this->d->m_buffer.size()),
-                     size_t(image.bytesPerLine()) * size_t(image.height()));
-
-    if (size > 0)
-        memcpy(image.bits(), this->d->m_buffer.constData(), size);
-
-    if (this->d->m_caps.format() == AkVideoCaps::Format_gray)
-        for (int i = 0; i < 256; i++)
-            image.setColor(i, QRgb(i));
-
-    return image;
-}
-
-AkVideoPacket AkVideoPacket::fromImage(const QImage &image,
-                                       const AkVideoPacket &defaultPacket)
-{
-    if (!AkImageToFormat->contains(image.format()))
-        return AkVideoPacket();
-
-    auto imageSize = image.bytesPerLine() * image.height();
-    QByteArray oBuffer(imageSize, Qt::Uninitialized);
-    memcpy(oBuffer.data(), image.constBits(), size_t(imageSize));
-
-    AkVideoPacket packet;
-    packet.d->m_caps = {AkImageToFormat->value(image.format()),
-                        image.width(),
-                        image.height(),
-                        defaultPacket.caps().fps()};
-    packet.d->m_buffer = oBuffer;
-    packet.copyMetadata(defaultPacket);
-
-    return packet;
-}
-
-bool AkVideoPacket::canConvert(AkVideoCaps::PixelFormat input,
-                               AkVideoCaps::PixelFormat output)
-{
-    if (input == output)
-        return true;
-
-    for (auto &convert: *videoConvert)
-        if (convert.from == input
-            && convert.to == output) {
-            return true;
-        }
-
-    auto values = AkImageToFormat->values();
-
-    if (values.contains(input) && values.contains(output))
-        return true;
-
-    return false;
-}
-
-bool AkVideoPacket::canConvert(AkVideoCaps::PixelFormat output) const
-{
-    return AkVideoPacket::canConvert(this->d->m_caps.format(), output);
-}
-
-AkVideoPacket AkVideoPacket::convert(AkVideoCaps::PixelFormat format) const
-{
-    return this->convert(format, this->d->m_caps.align());
-}
-
-AkVideoPacket AkVideoPacket::convert(AkVideoCaps::PixelFormat format,
-                                     int align) const
-{
-    if (this->d->m_caps.format() == format) {
-        if (this->d->m_caps.align() != align)
-            return this->realign(align);
-
-        return *this;
-    }
-
-    for (auto &convert: *videoConvert)
-        if (convert.from == this->d->m_caps.format()
-            && convert.to == format) {
-            return convert.convert(this, align);
-        }
-
-    if (!AkImageToFormat->values().contains(format))
-        return {};
-
-    auto frame = this->toImage();
-
-    if (frame.isNull())
-        return *this;
-
-    auto convertedFrame = frame.convertToFormat(AkImageToFormat->key(format));
-
-    return AkVideoPacket::fromImage(convertedFrame, *this);
-}
-
-AkVideoPacket AkVideoPacket::scaled(int width, int height) const
-{
-    return AkVideoPacket::fromImage(this->toImage().scaled(width, height),
-                                    *this);
+    return this->d->m_planes[plane]
+            + size_t(y >> this->d->m_heightDiv[plane])
+            * this->d->m_lineSize[plane];
 }
 
-AkVideoPacket AkVideoPacket::realign(int align) const
+AkVideoPacket AkVideoPacket::copy(int x, int y, int width, int height) const
 {
-    if (this->d->m_caps.align() == align)
-        return *this;
-
-    auto caps = this->d->m_caps;
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
+    auto ocaps = this->d->m_caps;
+    ocaps.setWidth(width);
+    ocaps.setHeight(height);
+    AkVideoPacket dst(ocaps, true);
     dst.copyMetadata(*this);
-    auto height = caps.height();
 
-    for (int plane = 0; plane < caps.planes(); plane++) {
-        auto bypl = qMin(caps.bytesPerLine(plane),
-                         this->d->m_caps.bytesPerLine(plane));
-
-        for (int y = 0; y < height; y++) {
-            auto src_line = this->constLine(plane, y);
-            auto dst_line = dst.line(plane, y);
-            memcpy(dst_line, src_line, bypl);
+    auto maxX = qMin(x + width, this->d->m_caps.width());
+    auto maxY = qMin(y + height, this->d->m_caps.height());
+    auto copyWidth = qMax(maxX - x, 0);
+
+    if (copyWidth < 1)
+        return dst;
+
+    auto diffY = maxY - y;
+
+    for (int plane = 0; plane < this->d->m_nPlanes; plane++) {
+        size_t offset = x
+                        * this->d->m_bytesUsed[plane]
+                        / this->d->m_caps.width();
+        size_t copyBytes = copyWidth
+                           * this->d->m_bytesUsed[plane]
+                           / this->d->m_caps.width();
+        auto srcLineOffset = this->d->m_lineSize[plane];
+        auto dstLineOffset = dst.d->m_lineSize[plane];
+        auto srcLine = this->constLine(plane, y) + offset;
+        auto dstLine = dst.d->m_planes[plane];
+        auto maxY = diffY >> this->d->m_heightDiv[plane];
+
+        for (int y = 0; y < maxY; y++) {
+            memcpy(dstLine, srcLine, copyBytes);
+            srcLine += srcLineOffset;
+            dstLine += dstLineOffset;
         }
     }
 
     return dst;
 }
 
-void AkVideoPacket::setCaps(const AkVideoCaps &caps)
-{
-    if (this->d->m_caps == caps)
-        return;
-
-    this->d->m_caps = caps;
-    emit this->capsChanged(caps);
-}
-
-void AkVideoPacket::setBuffer(const QByteArray &buffer)
-{
-    if (this->d->m_buffer == buffer)
-        return;
-
-    this->d->m_buffer = buffer;
-    emit this->bufferChanged(buffer);
-}
-
-void AkVideoPacket::setId(qint64 id)
-{
-    if (this->d->m_id == id)
-        return;
-
-    this->d->m_id = id;
-    emit this->idChanged(id);
-}
-
-void AkVideoPacket::setPts(qint64 pts)
-{
-    if (this->d->m_pts == pts)
-        return;
-
-    this->d->m_pts = pts;
-    emit this->ptsChanged(pts);
-}
-
-void AkVideoPacket::setTimeBase(const AkFrac &timeBase)
-{
-    if (this->d->m_timeBase == timeBase)
-        return;
-
-    this->d->m_timeBase = timeBase;
-    emit this->timeBaseChanged(timeBase);
-}
-
-void AkVideoPacket::setIndex(int index)
-{
-    if (this->d->m_index == index)
-        return;
-
-    this->d->m_index = index;
-    emit this->indexChanged(index);
-}
-
-void AkVideoPacket::resetCaps()
-{
-    this->setCaps(AkVideoCaps());
-}
-
-void AkVideoPacket::resetBuffer()
-{
-    this->setBuffer({});
-}
-
-void AkVideoPacket::resetId()
-{
-    this->setId(-1);
-}
-
-void AkVideoPacket::resetPts()
-{
-    this->setPts(0);
-}
-
-void AkVideoPacket::resetTimeBase()
-{
-    this->setTimeBase({});
-}
-
-void AkVideoPacket::resetIndex()
-{
-    this->setIndex(-1);
-}
-
 void AkVideoPacket::registerTypes()
 {
     qRegisterMetaType<AkVideoPacket>("AkVideoPacket");
@@ -668,8 +347,8 @@ QDebug operator <<(QDebug debug, const A
     debug.nospace() << "AkVideoPacket("
                     << "caps="
                     << packet.caps()
-                    << ",bufferSize="
-                    << packet.buffer().size()
+                    << ",dataSize="
+                    << packet.size()
                     << ",id="
                     << packet.id()
                     << ",pts="
@@ -686,1032 +365,42 @@ QDebug operator <<(QDebug debug, const A
     return debug.space();
 }
 
-uint8_t AkVideoPacketPrivate::rgb_y(int r, int g, int b)
-{
-    return uint8_t(((66 * r + 129 * g + 25 * b + 128) >> 8) + 16);
-}
-
-uint8_t AkVideoPacketPrivate::rgb_u(int r, int g, int b)
-{
-    return uint8_t(((-38 * r - 74 * g + 112 * b + 128) >> 8) + 128);
-}
-
-uint8_t AkVideoPacketPrivate::rgb_v(int r, int g, int b)
-{
-    return uint8_t(((112 * r - 94 * g - 18 * b + 128) >> 8) + 128);
-}
-
-uint8_t AkVideoPacketPrivate::yuv_r(int y, int u, int v)
-{
-    Q_UNUSED(u)
-    int r = (298 * (y - 16) + 409 * (v - 128) + 128) >> 8;
-
-    return uint8_t(qBound(0, r, 255));
-}
-
-uint8_t AkVideoPacketPrivate::yuv_g(int y, int u, int v)
-{
-    int g = (298 * (y - 16) - 100 * (u - 128) - 208 * (v - 128) + 128) >> 8;
-
-    return uint8_t(qBound(0, g, 255));
-}
-
-uint8_t AkVideoPacketPrivate::yuv_b(int y, int u, int v)
-{
-    Q_UNUSED(v)
-    int b = (298 * (y - 16) + 516 * (u - 128) + 128) >> 8;
-
-    return uint8_t(qBound(0, b, 255));
-}
-
-AkVideoPacket AkVideoPacketPrivate::bgr24_to_0rgb(const AkVideoPacket *src,
-                                                  int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_0rgb);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const BGR24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<RGBX *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].x = 255;
-            dst_line[x].r = src_line[x].r;
-            dst_line[x].g = src_line[x].g;
-            dst_line[x].b = src_line[x].b;
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::bgr24_to_rgb24(const AkVideoPacket *src,
-                                                   int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_rgb24);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const BGR24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<RGB24 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].r = src_line[x].r;
-            dst_line[x].g = src_line[x].g;
-            dst_line[x].b = src_line[x].b;
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::bgr24_to_rgb565le(const AkVideoPacket *src,
-                                                      int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_rgb565le);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const BGR24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<RGB16 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].r = src_line[x].r >> 3;
-            dst_line[x].g = src_line[x].g >> 2;
-            dst_line[x].b = src_line[x].b >> 3;
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::bgr24_to_rgb555le(const AkVideoPacket *src,
-                                                      int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_rgb555le);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const BGR24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<RGB15 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].x = 1;
-            dst_line[x].r = src_line[x].r >> 3;
-            dst_line[x].g = src_line[x].g >> 3;
-            dst_line[x].b = src_line[x].b >> 3;
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::bgr24_to_0bgr(const AkVideoPacket *src,
-                                                  int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_0bgr);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const BGR24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<XBGR *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].x = 255;
-            dst_line[x].r = src_line[x].r;
-            dst_line[x].g = src_line[x].g;
-            dst_line[x].b = src_line[x].b;
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::bgr24_to_bgr565le(const AkVideoPacket *src,
-                                                      int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_bgr565le);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const BGR24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<BGR16 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].r = src_line[x].r >> 3;
-            dst_line[x].g = src_line[x].g >> 2;
-            dst_line[x].b = src_line[x].b >> 3;
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::bgr24_to_bgr555le(const AkVideoPacket *src,
-                                                      int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_bgr555le);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const BGR24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<BGR15 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].x = 1;
-            dst_line[x].r = src_line[x].r >> 3;
-            dst_line[x].g = src_line[x].g >> 3;
-            dst_line[x].b = src_line[x].b >> 3;
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::bgr24_to_uyvy422(const AkVideoPacket *src,
-                                                     int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_uyvy422);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const BGR24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<UYVY *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            auto x_yuv = x / 2;
-
-            auto r0 = src_line[x].r;
-            auto g0 = src_line[x].g;
-            auto b0 = src_line[x].b;
-
-            x++;
-
-            int r1 = src_line[x].r;
-            int g1 = src_line[x].g;
-            int b1 = src_line[x].b;
-
-            dst_line[x_yuv].u0 = rgb_u(r0, g0, b0);
-            dst_line[x_yuv].y0 = rgb_y(r0, g0, b0);
-            dst_line[x_yuv].v0 = rgb_v(r0, g0, b0);
-            dst_line[x_yuv].y1 = rgb_y(r1, g1, b1);
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::bgr24_to_yuyv422(const AkVideoPacket *src,
-                                                     int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_yuyv422);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const BGR24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<YUY2 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            auto x_yuv = x / 2;
-
-            auto r0 = src_line[x].r;
-            auto g0 = src_line[x].g;
-            auto b0 = src_line[x].b;
-
-            x++;
-
-            auto r1 = src_line[x].r;
-            auto g1 = src_line[x].g;
-            auto b1 = src_line[x].b;
-
-            dst_line[x_yuv].y0 = rgb_y(r0, g0, b0);
-            dst_line[x_yuv].u0 = rgb_u(r0, g0, b0);
-            dst_line[x_yuv].y1 = rgb_y(r1, g1, b1);
-            dst_line[x_yuv].v0 = rgb_v(r0, g0, b0);
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::bgr24_to_nv12(const AkVideoPacket *src,
-                                                  int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_nv12);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const BGR24 *>(src->constLine(0, y));
-        auto dst_line_y = dst.line(0, y);
-        auto dst_line_vu = reinterpret_cast<VU *>(dst.line(1, y));
-
-        for (int x = 0; x < width; x++) {
-            auto x_yuv = x / 2;
-
-            auto r = src_line[x].r;
-            auto g = src_line[x].g;
-            auto b = src_line[x].b;
-
-            dst_line_y[y] = rgb_y(r, g, b);
-            dst_line_vu[x_yuv].v = rgb_v(r, g, b);
-            dst_line_vu[x_yuv].u = rgb_u(r, g, b);
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::bgr24_to_nv21(const AkVideoPacket *src,
-                                                  int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_nv21);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const BGR24 *>(src->constLine(0, y));
-        auto dst_line_y = dst.line(0, y);
-        auto dst_line_uv = reinterpret_cast<UV *>(dst.line(1, y));
-
-        for (int x = 0; x < width; x++) {
-            auto x_yuv = x / 2;
-
-            auto r = src_line[x].r;
-            auto g = src_line[x].g;
-            auto b = src_line[x].b;
-
-            dst_line_y[y] = rgb_y(r, g, b);
-            dst_line_uv[x_yuv].v = rgb_v(r, g, b);
-            dst_line_uv[x_yuv].u = rgb_u(r, g, b);
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::rgb24_to_0rgb(const AkVideoPacket *src,
-                                                  int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_0rgb);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const RGB24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<RGBX *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].x = 255;
-            dst_line[x].r = src_line[x].r;
-            dst_line[x].g = src_line[x].g;
-            dst_line[x].b = src_line[x].b;
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::rgb24_to_rgb565le(const AkVideoPacket *src,
-                                                      int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_rgb565le);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const RGB24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<RGB16 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].r = src_line[x].r >> 3;
-            dst_line[x].g = src_line[x].g >> 2;
-            dst_line[x].b = src_line[x].b >> 3;
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::rgb24_to_rgb555le(const AkVideoPacket *src,
-                                                      int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_rgb555le);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const RGB24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<RGB15 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].x = 1;
-            dst_line[x].r = src_line[x].r >> 3;
-            dst_line[x].g = src_line[x].g >> 3;
-            dst_line[x].b = src_line[x].b >> 3;
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::rgb24_to_0bgr(const AkVideoPacket *src,
-                                                  int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_0bgr);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const RGB24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<XBGR *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].x = 255;
-            dst_line[x].r = src_line[x].r;
-            dst_line[x].g = src_line[x].g;
-            dst_line[x].b = src_line[x].b;
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::rgb24_to_bgr24(const AkVideoPacket *src,
-                                                   int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_bgr24);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const RGB24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<BGR24 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].r = src_line[x].r;
-            dst_line[x].g = src_line[x].g;
-            dst_line[x].b = src_line[x].b;
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::rgb24_to_bgr565le(const AkVideoPacket *src,
-                                                      int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_bgr565le);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const RGB24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<BGR16 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].r = src_line[x].r >> 3;
-            dst_line[x].g = src_line[x].g >> 2;
-            dst_line[x].b = src_line[x].b >> 3;
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::rgb24_to_bgr555le(const AkVideoPacket *src,
-                                                      int align)
+void AkVideoPacketPrivate::updateParams(const AkVideoFormatSpec &specs)
 {
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_bgr555le);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const RGB24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<BGR15 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].x = 1;
-            dst_line[x].r = src_line[x].r >> 3;
-            dst_line[x].g = src_line[x].g >> 3;
-            dst_line[x].b = src_line[x].b >> 3;
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::rgb24_to_uyvy422(const AkVideoPacket *src,
-                                                     int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_uyvy422);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const RGB24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<UYVY *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            auto x_yuv = x / 2;
-
-            auto r0 = src_line[x].r;
-            auto g0 = src_line[x].g;
-            auto b0 = src_line[x].b;
-
-            x++;
-
-            int r1 = src_line[x].r;
-            int g1 = src_line[x].g;
-            int b1 = src_line[x].b;
-
-            dst_line[x_yuv].u0 = rgb_u(r0, g0, b0);
-            dst_line[x_yuv].y0 = rgb_y(r0, g0, b0);
-            dst_line[x_yuv].v0 = rgb_v(r0, g0, b0);
-            dst_line[x_yuv].y1 = rgb_y(r1, g1, b1);
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::rgb24_to_yuyv422(const AkVideoPacket *src,
-                                                     int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_yuyv422);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const RGB24 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<YUY2 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            auto x_yuv = x / 2;
-
-            auto r0 = src_line[x].r;
-            auto g0 = src_line[x].g;
-            auto b0 = src_line[x].b;
-
-            x++;
-
-            auto r1 = src_line[x].r;
-            auto g1 = src_line[x].g;
-            auto b1 = src_line[x].b;
-
-            dst_line[x_yuv].y0 = rgb_y(r0, g0, b0);
-            dst_line[x_yuv].u0 = rgb_u(r0, g0, b0);
-            dst_line[x_yuv].y1 = rgb_y(r1, g1, b1);
-            dst_line[x_yuv].v0 = rgb_v(r0, g0, b0);
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::rgb24_to_nv12(const AkVideoPacket *src,
-                                                  int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_nv12);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const RGB24 *>(src->constLine(0, y));
-        auto dst_line_y = dst.line(0, y);
-        auto dst_line_vu = reinterpret_cast<VU *>(dst.line(1, y));
-
-        for (int x = 0; x < width; x++) {
-            auto x_yuv = x / 2;
-
-            auto r = src_line[x].r;
-            auto g = src_line[x].g;
-            auto b = src_line[x].b;
-
-            dst_line_y[y] = rgb_y(r, g, b);
-            dst_line_vu[x_yuv].v = rgb_v(r, g, b);
-            dst_line_vu[x_yuv].u = rgb_u(r, g, b);
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::rgb24_to_nv21(const AkVideoPacket *src,
-                                                  int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_nv21);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const RGB24 *>(src->constLine(0, y));
-        auto dst_line_y = dst.line(0, y);
-        auto dst_line_uv = reinterpret_cast<UV *>(dst.line(1, y));
-
-        for (int x = 0; x < width; x++) {
-            auto x_yuv = x / 2;
-
-            auto r = src_line[x].r;
-            auto g = src_line[x].g;
-            auto b = src_line[x].b;
-
-            dst_line_y[y] = rgb_y(r, g, b);
-            dst_line_uv[x_yuv].v = rgb_v(r, g, b);
-            dst_line_uv[x_yuv].u = rgb_u(r, g, b);
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::rgb24_to_yuv420p(const AkVideoPacket *src,
-                                                     int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_yuv420p);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const RGB24 *>(src->constLine(0, y));
-        auto dst_line_y = reinterpret_cast<quint8 *>(dst.line(0, y));
-        auto dst_line_v = reinterpret_cast<quint8 *>(dst.line(1, y));
-        auto dst_line_u = reinterpret_cast<quint8 *>(dst.line(2, y));
-
-        for (int x = 0; x < width; x++) {
-            auto x_yuv = x / 2;
-
-            auto r = src_line[x].r;
-            auto g = src_line[x].g;
-            auto b = src_line[x].b;
-
-            dst_line_y[x] = rgb_y(r, g, b);
-            dst_line_u[x_yuv] = rgb_u(r, g, b);
-            dst_line_v[x_yuv] = rgb_v(r, g, b);
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::rgba_to_rgb24(const AkVideoPacket *src,
-                                                  int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_rgb24);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const XRGB *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<RGB24 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].r = src_line[x].x * src_line[x].r / 255;
-            dst_line[x].g = src_line[x].x * src_line[x].g / 255;
-            dst_line[x].b = src_line[x].x * src_line[x].b / 255;
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::rgb0_to_rgb24(const AkVideoPacket *src,
-                                                  int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_rgb24);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const XRGB *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<RGB24 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].r = src_line[x].r;
-            dst_line[x].g = src_line[x].g;
-            dst_line[x].b = src_line[x].b;
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::yuyv422_to_rgb24(const AkVideoPacket *src,
-                                                     int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_rgb24);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const YUY2 *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<RGB24 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            auto x_yuv = x / 2;
-
-            auto y0 = src_line[x_yuv].y0;
-            auto u0 = src_line[x_yuv].u0;
-            auto y1 = src_line[x_yuv].y1;
-            auto v0 = src_line[x_yuv].v0;
-
-            dst_line[x].r = yuv_r(y0, u0, v0);
-            dst_line[x].g = yuv_g(y0, u0, v0);
-            dst_line[x].b = yuv_b(y0, u0, v0);
-
-            x++;
-
-            dst_line[x].r = yuv_r(y1, u0, v0);
-            dst_line[x].g = yuv_g(y1, u0, v0);
-            dst_line[x].b = yuv_b(y1, u0, v0);
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::yuv420p_to_rgb24(const AkVideoPacket *src,
-                                                     int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_rgb24);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line_y = reinterpret_cast<const quint8 *>(src->constLine(0, y));
-        auto src_line_v = reinterpret_cast<const quint8 *>(src->constLine(1, y));
-        auto src_line_u = reinterpret_cast<const quint8 *>(src->constLine(2, y));
-        auto dst_line = reinterpret_cast<RGB24 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            auto x_yuv = x / 2;
-
-            auto y = src_line_y[x];
-            auto u = src_line_u[x_yuv];
-            auto v = src_line_v[x_yuv];
-
-            dst_line[x].r = yuv_r(y, u, v);
-            dst_line[x].g = yuv_g(y, u, v);
-            dst_line[x].b = yuv_b(y, u, v);
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::yvu420p_to_rgb24(const AkVideoPacket *src, int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_rgb24);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line_y = reinterpret_cast<const quint8 *>(src->constLine(0, y));
-        auto src_line_u = reinterpret_cast<const quint8 *>(src->constLine(1, y));
-        auto src_line_v = reinterpret_cast<const quint8 *>(src->constLine(2, y));
-        auto dst_line = reinterpret_cast<RGB24 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            auto x_yuv = x / 2;
-
-            auto y = src_line_y[x];
-            auto u = src_line_u[x_yuv];
-            auto v = src_line_v[x_yuv];
-
-            dst_line[x].r = yuv_r(y, u, v);
-            dst_line[x].g = yuv_g(y, u, v);
-            dst_line[x].b = yuv_b(y, u, v);
-        }
-    }
-
-    return dst;
-}
-
-AkVideoPacket AkVideoPacketPrivate::nv12_to_rgb24(const AkVideoPacket *src,
-                                                  int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_rgb24);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line_y = src->constLine(0, y);
-        auto src_line_vu = reinterpret_cast<const VU *>(src->constLine(1, y));
-        auto dst_line = reinterpret_cast<RGB24 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            auto x_yuv = x / 2;
-
-            auto y = src_line_y[x];
-            auto u = src_line_vu[x_yuv].u;
-            auto v = src_line_vu[x_yuv].v;
-
-            dst_line[x].r = yuv_r(y, u, v);
-            dst_line[x].g = yuv_g(y, u, v);
-            dst_line[x].b = yuv_b(y, u, v);
-        }
-    }
+    if (this->m_align < 1)
+        this->m_align = 32;
 
-    return dst;
-}
+    this->m_size = 0;
+    int i = 0;
 
-AkVideoPacket AkVideoPacketPrivate::nv21_to_rgb24(const AkVideoPacket *src,
-                                                  int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_rgb24);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line_y = src->constLine(0, y);
-        auto src_line_uv = reinterpret_cast<const UV *>(src->constLine(1, y));
-        auto dst_line = reinterpret_cast<RGB24 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            auto x_yuv = x / 2;
-
-            auto y = src_line_y[x];
-            auto u = src_line_uv[x_yuv].u;
-            auto v = src_line_uv[x_yuv].v;
-
-            dst_line[x].r = yuv_r(y, u, v);
-            dst_line[x].g = yuv_g(y, u, v);
-            dst_line[x].b = yuv_b(y, u, v);
-        }
-    }
+    for (size_t j = 0; j < specs.planes(); ++j) {
+        auto &plane = specs.plane(j);
+        size_t bytesUsed = plane.bitsSize() * this->m_caps.width() / 8;
+        size_t lineSize =
+                AkVideoPacketPrivate::alignUp(bytesUsed, size_t(this->m_align));
 
-    return dst;
-}
+        this->m_lineSize[i] = lineSize;
+        this->m_bytesUsed[i] = bytesUsed;
 
-AkVideoPacket AkVideoPacketPrivate::rgbap_to_rgb24(const AkVideoPacket *src,
-                                                   int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_rgb24);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line_r = reinterpret_cast<const quint8 *>(src->constLine(0, y));
-        auto src_line_g = reinterpret_cast<const quint8 *>(src->constLine(1, y));
-        auto src_line_b = reinterpret_cast<const quint8 *>(src->constLine(2, y));
-        auto src_line_a = reinterpret_cast<const quint8 *>(src->constLine(3, y));
-        auto dst_line = reinterpret_cast<RGB24 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].r = src_line_a[x] * src_line_r[x] / 255;
-            dst_line[x].g = src_line_a[x] * src_line_g[x] / 255;
-            dst_line[x].b = src_line_a[x] * src_line_b[x] / 255;
-        }
-    }
+        size_t planeSize = (lineSize * this->m_caps.height()) >> plane.heightDiv();
 
-    return dst;
-}
+        this->m_planeSize[i] = planeSize;
+        this->m_planeOffset[i] = this->m_size;
 
-AkVideoPacket AkVideoPacketPrivate::_0bgr_to_rgb24(const AkVideoPacket *src,
-                                                   int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_rgb24);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const XRGB *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<RGB24 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].r = src_line[x].r;
-            dst_line[x].g = src_line[x].g;
-            dst_line[x].b = src_line[x].b;
-        }
-    }
+        this->m_size += planeSize;
 
-    return dst;
-}
+        this->m_widthDiv[i] = plane.widthDiv();
+        this->m_heightDiv[i] = plane.heightDiv();
 
-AkVideoPacket AkVideoPacketPrivate::bgr0_to_rgb24(const AkVideoPacket *src, int align)
-{
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_rgb24);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const XRGB *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<RGB24 *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].r = src_line[x].r;
-            dst_line[x].g = src_line[x].g;
-            dst_line[x].b = src_line[x].b;
-        }
+        i++;
     }
-
-    return dst;
 }
 
-AkVideoPacket AkVideoPacketPrivate::bgr0_to_0rgb(const AkVideoPacket *src, int align)
+void AkVideoPacketPrivate::updatePlanes()
 {
-    auto caps = src->caps();
-    caps.setFormat(AkVideoCaps::Format_0rgb);
-    caps.setAlign(align);
-    AkVideoPacket dst(caps);
-    dst.copyMetadata(*src);
-    auto width = src->caps().width();
-    auto height = src->caps().height();
-
-    for (int y = 0; y < height; y++) {
-        auto src_line = reinterpret_cast<const XRGB *>(src->constLine(0, y));
-        auto dst_line = reinterpret_cast<RGBX *>(dst.line(0, y));
-
-        for (int x = 0; x < width; x++) {
-            dst_line[x].x = src_line[x].x;
-            dst_line[x].r = src_line[x].r;
-            dst_line[x].g = src_line[x].g;
-            dst_line[x].b = src_line[x].b;
-        }
-    }
-
-    return dst;
+    for (int i = 0; i < this->m_nPlanes; ++i)
+        this->m_planes[i] = reinterpret_cast<quint8 *>(this->m_buffer.data())
+                            + this->m_planeOffset[i];
 }
 
 #include "moc_akvideopacket.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/akvideopacket.h
+++ webcamoid-9.0.0/libAvKys/Lib/src/akvideopacket.h
@@ -20,48 +20,62 @@
 #ifndef AKVIDEOPACKET_H
 #define AKVIDEOPACKET_H
 
+#include "akpacketbase.h"
 #include "akvideocaps.h"
 
+using AkYuv = quint32;
+
+inline int akCompY(AkYuv yuv)
+{
+    return (yuv >> 16) & 0xff;
+}
+
+inline int akCompU(AkYuv yuv)
+{
+    return (yuv >> 8) & 0xff;
+}
+
+inline int akCompV(AkYuv yuv)
+{
+    return yuv & 0xff;
+}
+
+inline int akCompA(AkYuv yuv)
+{
+    return yuv >> 24;
+}
+
+inline AkYuv akYuv(int y, int u, int v, int a)
+{
+    return ((a & 0xff) << 24) | ((y & 0xff) << 16) | ((u & 0xff) << 8) | (v & 0xff);
+}
+
+inline AkYuv akYuv(int y, int u, int v)
+{
+    return akYuv(y, v, u, 255);
+}
+
 class AkVideoPacketPrivate;
 class AkPacket;
 
-class AKCOMMONS_EXPORT AkVideoPacket: public QObject
+class AKCOMMONS_EXPORT AkVideoPacket: public AkPacketBase
 {
     Q_OBJECT
     Q_PROPERTY(AkVideoCaps caps
                READ caps
-               WRITE setCaps
-               RESET resetCaps
-               NOTIFY capsChanged)
-    Q_PROPERTY(QByteArray buffer
-               READ buffer
-               WRITE setBuffer
-               RESET resetBuffer
-               NOTIFY bufferChanged)
-    Q_PROPERTY(qint64 id
-               READ id
-               WRITE setId
-               RESET resetId
-               NOTIFY idChanged)
-    Q_PROPERTY(qint64 pts
-               READ pts
-               WRITE setPts
-               RESET resetPts
-               NOTIFY ptsChanged)
-    Q_PROPERTY(AkFrac timeBase
-               READ timeBase
-               WRITE setTimeBase
-               RESET resetTimeBase
-               NOTIFY timeBaseChanged)
-    Q_PROPERTY(int index
-               READ index
-               WRITE setIndex
-               RESET resetIndex
-               NOTIFY indexChanged)
+               CONSTANT)
+    Q_PROPERTY(size_t size
+               READ size
+               CONSTANT)
+    Q_PROPERTY(size_t planes
+               READ planes
+               CONSTANT)
 
     public:
         AkVideoPacket(QObject *parent=nullptr);
-        AkVideoPacket(const AkVideoCaps &caps);
+        AkVideoPacket(const AkVideoCaps &caps,
+                      bool initialized=false,
+                      size_t align=32);
         AkVideoPacket(const AkPacket &other);
         AkVideoPacket(const AkVideoPacket &other);
         ~AkVideoPacket();
@@ -70,58 +84,68 @@ class AKCOMMONS_EXPORT AkVideoPacket: pu
         operator bool() const;
         operator AkPacket() const;
 
-        Q_INVOKABLE AkVideoCaps caps() const;
-        Q_INVOKABLE AkVideoCaps &caps();
-        Q_INVOKABLE QByteArray buffer() const;
-        Q_INVOKABLE QByteArray &buffer();
-        Q_INVOKABLE qint64 id() const;
-        Q_INVOKABLE qint64 &id();
-        Q_INVOKABLE qint64 pts() const;
-        Q_INVOKABLE qint64 &pts();
-        Q_INVOKABLE AkFrac timeBase() const;
-        Q_INVOKABLE AkFrac &timeBase();
-        Q_INVOKABLE int index() const;
-        Q_INVOKABLE int &index();
-        Q_INVOKABLE void copyMetadata(const AkVideoPacket &other);
-
+        Q_INVOKABLE const AkVideoCaps &caps() const;
+        Q_INVOKABLE size_t size() const;
+        Q_INVOKABLE size_t planes() const;
+        Q_INVOKABLE size_t planeSize(int plane) const;
+        Q_INVOKABLE size_t lineSize(int plane) const;
+        Q_INVOKABLE size_t bytesUsed(int plane) const;
+        Q_INVOKABLE size_t widthDiv(int plane) const;
+        Q_INVOKABLE size_t heightDiv(int plane) const;
+        Q_INVOKABLE const char *constData() const;
+        Q_INVOKABLE char *data();
+        Q_INVOKABLE const quint8 *constPlane(int plane) const;
+        Q_INVOKABLE quint8 *plane(int plane);
         Q_INVOKABLE const quint8 *constLine(int plane, int y) const;
         Q_INVOKABLE quint8 *line(int plane, int y);
-        Q_INVOKABLE QImage toImage() const;
-        Q_INVOKABLE static AkVideoPacket fromImage(const QImage &image,
-                                                   const AkVideoPacket &defaultPacket);
-        Q_INVOKABLE static bool canConvert(AkVideoCaps::PixelFormat input,
-                                           AkVideoCaps::PixelFormat output);
-        Q_INVOKABLE bool canConvert(AkVideoCaps::PixelFormat output) const;
-        Q_INVOKABLE AkVideoPacket convert(AkVideoCaps::PixelFormat format) const;
-        Q_INVOKABLE AkVideoPacket convert(AkVideoCaps::PixelFormat format,
-                                          int align) const;
-        Q_INVOKABLE AkVideoPacket scaled(int width, int height) const;
-        Q_INVOKABLE AkVideoPacket realign(int align) const;
+        Q_INVOKABLE AkVideoPacket copy(int x,
+                                       int y,
+                                       int width,
+                                       int height) const;
+
+        template <typename T>
+        inline T pixel(int plane, int x, int y) const
+        {
+            auto line = reinterpret_cast<const T *>(this->constLine(plane, y));
+
+            return line[x >> this->widthDiv(plane)];
+        }
+
+        template <typename T>
+        inline void setPixel(int plane, int x, int y, T value)
+        {
+            auto line = reinterpret_cast<T *>(this->line(plane, y));
+            line[x >> this->widthDiv(plane)] = value;
+        }
+
+        template <typename T>
+        inline void fill(int plane, T value)
+        {
+            int width = this->caps().width() >> this->widthDiv(plane);
+            auto line = new T [width];
+
+            for (int x = 0; x < width; x++)
+                line[x] = value;
+
+            size_t lineSize = width * sizeof(T);
+
+            for (int y = 0; y < this->caps().height(); y++)
+                memcpy(this->line(plane, y), line, lineSize);
+
+            delete [] line;
+        }
+
+        template <typename T>
+        inline void fill(T value)
+        {
+            for (size_t plane = 0; plane < this->planes(); plane++)
+                this->fill(plane, value);
+        }
 
     private:
         AkVideoPacketPrivate *d;
 
-    Q_SIGNALS:
-        void capsChanged(const AkVideoCaps &caps);
-        void bufferChanged(const QByteArray &buffer);
-        void idChanged(qint64 id);
-        void ptsChanged(qint64 pts);
-        void timeBaseChanged(const AkFrac &timeBase);
-        void indexChanged(int index);
-
     public Q_SLOTS:
-        void setCaps(const AkVideoCaps &caps);
-        void setBuffer(const QByteArray &buffer);
-        void setId(qint64 id);
-        void setPts(qint64 pts);
-        void setTimeBase(const AkFrac &timeBase);
-        void setIndex(int index);
-        void resetCaps();
-        void resetBuffer();
-        void resetId();
-        void resetPts();
-        void resetTimeBase();
-        void resetIndex();
         static void registerTypes();
 };
 
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/qml/akcolorizedimage.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/qml/akcolorizedimage.cpp
@@ -46,6 +46,7 @@ class AkColorizedImagePrivate
         AkColorizedImage::VerticalAlignment m_verticalAlignment {AkColorizedImage::AlignVCenter};
         AkColorizedImage::Status m_status {AkColorizedImage::Null};
         qreal m_progress {0.0};
+        bool m_colorize {true};
         bool m_mirror {false};
         bool m_cache {true};
         bool m_asynchronous {false};
@@ -124,6 +125,11 @@ AkColorizedImage::Status AkColorizedImag
     return this->d->m_status;
 }
 
+bool AkColorizedImage::colorize() const
+{
+    return this->d->m_colorize;
+}
+
 bool AkColorizedImage::mirror() const
 {
     return this->d->m_mirror;
@@ -155,7 +161,9 @@ QSGNode *AkColorizedImage::updatePaintNo
     if (!this->d->load())
         return nullptr;
 
-    auto image = this->d->colorizeImage(this->d->m_image);
+    auto image = this->d->m_colorize?
+                     this->d->colorizeImage(this->d->m_image):
+                     this->d->m_image.copy();
 
     if (image.isNull())
         return nullptr;
@@ -171,11 +179,12 @@ QSGNode *AkColorizedImage::updatePaintNo
         return nullptr;
     }
 
-    if (this->smooth())
-        videoFrame->setFiltering(QSGTexture::Linear);
-
-    if (this->d->m_mipmap)
-        videoFrame->setMipmapFiltering(QSGTexture::Nearest);
+    videoFrame->setFiltering(this->smooth()?
+                                 QSGTexture::Linear:
+                                 QSGTexture::Nearest);
+    videoFrame->setMipmapFiltering(this->d->m_mipmap?
+                                       QSGTexture::Linear:
+                                       QSGTexture::Nearest);
 
     QSGSimpleTextureNode *node = nullptr;
 
@@ -199,8 +208,9 @@ QSGNode *AkColorizedImage::updatePaintNo
         emit this->paintedGeometryChanged();
     }
 
-    if (this->smooth())
-        node->setFiltering(QSGTexture::Linear);
+    node->setFiltering(this->smooth()?
+                           QSGTexture::Linear:
+                           QSGTexture::Nearest);
 
     if (this->d->m_mirror)
         node->setTextureCoordinatesTransform(QSGSimpleTextureNode::MirrorHorizontally);
@@ -291,6 +301,17 @@ void AkColorizedImage::setVerticalAlignm
     QMetaObject::invokeMethod(this, "update");
 }
 
+void AkColorizedImage::setColorize(bool colorize)
+{
+    if (this->d->m_colorize == colorize)
+        return;
+
+    this->d->m_colorize = colorize;
+    emit this->colorizeChanged(this->d->m_colorize);
+
+    QMetaObject::invokeMethod(this, "update");
+}
+
 void AkColorizedImage::setMirror(bool mirror)
 {
     if (this->d->m_mirror == mirror)
@@ -357,6 +378,11 @@ void AkColorizedImage::resetVerticalAlig
     this->setVerticalAlignment(AlignVCenter);
 }
 
+void AkColorizedImage::resetColorize()
+{
+    this->setColorize(true);
+}
+
 void AkColorizedImage::resetMirror()
 {
     this->setMirror(false);
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/qml/akcolorizedimage.h
+++ webcamoid-9.0.0/libAvKys/Lib/src/qml/akcolorizedimage.h
@@ -78,6 +78,11 @@ class AKCOMMONS_EXPORT AkColorizedImage:
     Q_PROPERTY(Status status
                READ status
                NOTIFY statusChanged)
+    Q_PROPERTY(bool colorize
+               READ colorize
+               WRITE setColorize
+               RESET resetColorize
+               NOTIFY colorizeChanged)
     Q_PROPERTY(bool mirror
                READ mirror
                WRITE setMirror
@@ -130,13 +135,14 @@ class AKCOMMONS_EXPORT AkColorizedImage:
         Q_INVOKABLE QString source() const;
         Q_INVOKABLE bool cache() const;
         Q_INVOKABLE QColor color() const;
-        Q_INVOKABLE FillMode fillMode() const;
+        Q_INVOKABLE AkColorizedImage::FillMode fillMode() const;
         Q_INVOKABLE QSize sourceSize() const;
         Q_INVOKABLE qreal paintedWidth() const;
         Q_INVOKABLE qreal paintedHeight() const;
-        Q_INVOKABLE HorizontalAlignment horizontalAlignment() const;
-        Q_INVOKABLE VerticalAlignment verticalAlignment() const;
-        Q_INVOKABLE Status status() const;
+        Q_INVOKABLE AkColorizedImage::HorizontalAlignment horizontalAlignment() const;
+        Q_INVOKABLE AkColorizedImage::VerticalAlignment verticalAlignment() const;
+        Q_INVOKABLE AkColorizedImage::Status status() const;
+        Q_INVOKABLE bool colorize() const;
         Q_INVOKABLE bool mirror() const;
         Q_INVOKABLE bool asynchronous() const;
         Q_INVOKABLE bool mipmap() const;
@@ -154,12 +160,13 @@ class AKCOMMONS_EXPORT AkColorizedImage:
         void sourceChanged(const QString &source);
         void cacheChanged(bool cache);
         void colorChanged(const QColor &color);
-        void fillModeChanged(FillMode fillMode);
+        void fillModeChanged(AkColorizedImage::FillMode fillMode);
         void sourceSizeChanged(const QSize &sourceSize);
         void paintedGeometryChanged();
-        void horizontalAlignmentChanged(HorizontalAlignment horizontalAlignment);
-        void verticalAlignmentChanged(VerticalAlignment verticalAlignment);
-        void statusChanged(Status status);
+        void horizontalAlignmentChanged(AkColorizedImage::HorizontalAlignment horizontalAlignment);
+        void verticalAlignmentChanged(AkColorizedImage::VerticalAlignment verticalAlignment);
+        void statusChanged(AkColorizedImage::Status status);
+        void colorizeChanged(bool colorize);
         void mirrorChanged(bool mirror);
         void asynchronousChanged(bool asynchronous);
         void mipmapChanged(bool mipmap);
@@ -169,10 +176,11 @@ class AKCOMMONS_EXPORT AkColorizedImage:
         void setSource(const QString &source);
         void setCache(bool cache);
         void setColor(const QColor &color);
-        void setFillMode(FillMode fillMode);
+        void setFillMode(AkColorizedImage::FillMode fillMode);
         void setSourceSize(const QSize &sourceSize);
-        void setHorizontalAlignment(HorizontalAlignment horizontalAlignment);
-        void setVerticalAlignment(VerticalAlignment verticalAlignment);
+        void setHorizontalAlignment(AkColorizedImage::HorizontalAlignment horizontalAlignment);
+        void setVerticalAlignment(AkColorizedImage::VerticalAlignment verticalAlignment);
+        void setColorize(bool colorize);
         void setMirror(bool mirror);
         void setAsynchronous(bool asynchronous);
         void setMipmap(bool mipmap);
@@ -183,6 +191,7 @@ class AKCOMMONS_EXPORT AkColorizedImage:
         void resetSourceSize();
         void resetHorizontalAlignment();
         void resetVerticalAlignment();
+        void resetColorize();
         void resetMirror();
         void resetAsynchronous();
         void resetMipmap();
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/qml/aktheme.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/qml/aktheme.cpp
@@ -22,12 +22,30 @@
 #include "aktheme.h"
 #include "akpalette.h"
 
+class AkThemeGlobalPrivate: public QObject
+{
+    Q_OBJECT
+
+    public:
+        qreal m_controlScale {1.6};
+
+        explicit AkThemeGlobalPrivate(QObject *parent=nullptr);
+        qreal controlScale() const;
+
+    signals:
+        void controlScaleChanged(qreal controlScale);
+
+    public slots:
+        void setControlScale(qreal controlScale);
+};
+
+Q_GLOBAL_STATIC(AkThemeGlobalPrivate, akThemeGlobalPrivate)
+
 class AkThemePrivate
 {
     public:
         AkTheme *self;
         AkPalette m_palette;
-        qreal m_controlScale {1.6};
 
         explicit AkThemePrivate(AkTheme *self);
 };
@@ -36,6 +54,10 @@ AkTheme::AkTheme(QObject *parent):
     QObject(parent)
 {
     this->d = new AkThemePrivate(this);
+    QObject::connect(akThemeGlobalPrivate,
+                     &AkThemeGlobalPrivate::controlScaleChanged,
+                     this,
+                     &AkTheme::controlScaleChanged);
 }
 
 AkTheme::~AkTheme()
@@ -55,7 +77,7 @@ AkPalette *AkTheme::palette() const
 
 qreal AkTheme::controlScale() const
 {
-    return this->d->m_controlScale;
+    return akThemeGlobalPrivate->controlScale();
 }
 
 QColor AkTheme::contrast(const QColor &color, qreal value) const
@@ -99,16 +121,15 @@ QColor AkTheme::shade(const QColor &colo
 
 void AkTheme::setControlScale(qreal controlScale)
 {
-    if (qFuzzyCompare(this->d->m_controlScale, controlScale))
-        return;
-
-    this->d->m_controlScale = controlScale;
-    emit this->controlScaleChanged(this->d->m_controlScale);
+    akThemeGlobalPrivate->setControlScale(controlScale);
 }
 
 void AkTheme::setPalette(const AkPalette *palette)
 {
-    if (!palette || this->d->m_palette == *palette)
+    if (!palette)
+        return;
+
+    if (this->d->m_palette == *palette)
         return;
 
     this->d->m_palette = *palette;
@@ -137,4 +158,24 @@ AkThemePrivate::AkThemePrivate(AkTheme *
 
 }
 
+AkThemeGlobalPrivate::AkThemeGlobalPrivate(QObject *parent):
+    QObject(parent)
+{
+}
+
+qreal AkThemeGlobalPrivate::controlScale() const
+{
+    return this->m_controlScale;
+}
+
+void AkThemeGlobalPrivate::setControlScale(qreal controlScale)
+{
+    if (qFuzzyCompare(controlScale, this->m_controlScale))
+        return;
+
+    this->m_controlScale = controlScale;
+    emit this->controlScaleChanged(controlScale);
+}
+
+#include "aktheme.moc"
 #include "moc_aktheme.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Lib/src/qml/akutils.cpp
+++ webcamoid-9.0.0/libAvKys/Lib/src/qml/akutils.cpp
@@ -36,7 +36,10 @@ AkUtils::AkUtils(const AkUtils &other):
 
 QColor AkUtils::fromRgba(QRgb color)
 {
-    return {color};
+    return {qRed(color),
+            qGreen(color),
+            qBlue(color),
+            qAlpha(color)};
 }
 
 QRgb AkUtils::toRgba(const QColor &color)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ACapsConvert/CMakeLists.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-# Webcamoid, webcam capture application.
-# Copyright (C) 2021  Gonzalo Exequiel Pedone
-#
-# Webcamoid is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Webcamoid is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
-#
-# Web-Site: http://webcamoid.github.io/
-
-cmake_minimum_required(VERSION 3.16)
-
-project(ACapsConvert LANGUAGES CXX)
-
-include(../../cmake/ProjectCommons.cmake)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-set(CMAKE_AUTOUIC ON)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-
-set(QT_COMPONENTS
-    Core)
-find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS
-             ${QT_COMPONENTS}
-             REQUIRED)
-find_package(Qt${QT_VERSION_MAJOR} ${QT_MINIMUM_VERSION} COMPONENTS
-             ${QT_COMPONENTS}
-             REQUIRED)
-add_library(ACapsConvert SHARED
-            src/acapsconvert.cpp
-            src/acapsconvert.h
-            src/acapsconvertelement.cpp
-            src/acapsconvertelement.h
-            pspec.json)
-
-if (WIN32)
-    set_target_properties(ACapsConvert PROPERTIES
-                          RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
-elseif (NOT ANDROID)
-    set_target_properties(ACapsConvert PROPERTIES
-                          LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
-endif ()
-
-add_dependencies(ACapsConvert avkys)
-target_include_directories(ACapsConvert
-                           PRIVATE ../../Lib/src)
-target_compile_definitions(ACapsConvert PRIVATE AVKYS_PLUGIN_ACAPSCONVERT)
-list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
-target_link_libraries(ACapsConvert avkys ${QT_LIBS})
-
-if (WIN32)
-    install(TARGETS ACapsConvert RUNTIME DESTINATION ${PLUGINSDIR})
-elseif (NOT ANDROID)
-    install(TARGETS ACapsConvert DESTINATION ${PLUGINSDIR})
-endif ()
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ACapsConvert/pspec.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-    "type": "WebcamoidPluginsCollection",
-    "plugins": [
-        {
-            "name": "AudioConvert",
-            "description": "Convert audio frames to different formats",
-            "id": "AudioFilter/AudioConvert",
-            "implements": ["Element"],
-            "type": "qtplugin"
-        }
-    ]
-}
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ACapsConvert/src/acapsconvert.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include "acapsconvert.h"
-#include "acapsconvertelement.h"
-
-QObject *ACapsConvert::create(const QString &key, const QString &specification)
-{
-    Q_UNUSED(specification)
-
-    return new ACapsConvertElement();
-}
-
-QStringList ACapsConvert::keys() const
-{
-    return {};
-}
-
-#include "moc_acapsconvert.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ACapsConvert/src/acapsconvert.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef ACAPSCONVERT_H
-#define ACAPSCONVERT_H
-
-#include <akplugin.h>
-
-class ACapsConvert: public QObject, public AkPlugin
-{
-    Q_OBJECT
-    Q_INTERFACES(AkPlugin)
-    Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "../pspec.json")
-
-    public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
-};
-
-#endif // ACAPSCONVERT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ACapsConvert/src/acapsconvertelement.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include <QMutex>
-#include <QSharedPointer>
-#include <akaudiocaps.h>
-#include <akaudioconverter.h>
-#include <akcaps.h>
-#include <akpacket.h>
-#include <akplugininfo.h>
-#include <akpluginmanager.h>
-
-#include "acapsconvertelement.h"
-
-class ACapsConvertElementPrivate
-{
-    public:
-        AkAudioConverter m_audioConvert;
-};
-
-ACapsConvertElement::ACapsConvertElement():
-    AkElement()
-{
-    this->d = new ACapsConvertElementPrivate;
-    QObject::connect(&this->d->m_audioConvert,
-                     &AkAudioConverter::outputCapsChanged,
-                     this,
-                     &ACapsConvertElement::capsChanged);
-}
-
-ACapsConvertElement::~ACapsConvertElement()
-{
-    delete this->d;
-}
-
-AkAudioCaps ACapsConvertElement::caps() const
-{
-    return this->d->m_audioConvert.outputCaps();
-}
-
-AkPacket ACapsConvertElement::iAudioStream(const AkAudioPacket &packet)
-{
-    AkPacket oPacket = this->d->m_audioConvert.convert(packet);
-
-    akSend(oPacket)
-}
-
-void ACapsConvertElement::setCaps(const AkAudioCaps &caps)
-{
-    this->d->m_audioConvert.setOutputCaps(caps);
-}
-
-void ACapsConvertElement::resetCaps()
-{
-    this->d->m_audioConvert.resetOutputCaps();
-}
-
-bool ACapsConvertElement::setState(AkElement::ElementState state)
-{
-    auto curState = this->state();
-
-    if (state == AkElement::ElementStatePlaying
-        && curState == AkElement::ElementStatePlaying)
-        this->d->m_audioConvert.reset();
-
-    return AkElement::setState(state);
-}
-
-#include "moc_acapsconvertelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ACapsConvert/src/acapsconvertelement.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef ACAPSCONVERTELEMENT_H
-#define ACAPSCONVERTELEMENT_H
-
-#include <akelement.h>
-
-class ACapsConvertElementPrivate;
-class AkAudioCaps;
-
-class ACapsConvertElement: public AkElement
-{
-    Q_OBJECT
-    Q_PROPERTY(AkAudioCaps caps
-               READ caps
-               WRITE setCaps
-               RESET resetCaps
-               NOTIFY capsChanged)
-
-    public:
-        ACapsConvertElement();
-        ~ACapsConvertElement();
-
-        Q_INVOKABLE AkAudioCaps caps() const;
-
-    private:
-        ACapsConvertElementPrivate *d;
-
-    protected:
-        AkPacket iAudioStream(const AkAudioPacket &packet);
-
-    signals:
-        void capsChanged(const AkAudioCaps &caps);
-
-    public slots:
-        void setCaps(const AkAudioCaps &caps);
-        void resetCaps();
-
-        bool setState(AkElement::ElementState state);
-};
-
-#endif // ACAPSCONVERTELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AdjustHSL/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/AdjustHSL/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(AdjustHSL
 target_compile_definitions(AdjustHSL PRIVATE AVKYS_PLUGIN_ADJUSTHSL)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(AdjustHSL avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS AdjustHSL RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AdjustHSL/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/AdjustHSL/share/qml/main.qml
@@ -48,6 +48,7 @@ GridLayout {
     }
 
     Label {
+        id: txtHue
         text: qsTr("Hue")
     }
     Slider {
@@ -57,6 +58,7 @@ GridLayout {
         from: -359
         to: 359
         Layout.fillWidth: true
+        Accessible.name: txtHue.text
 
         onValueChanged: AdjustHSL.hue = value
     }
@@ -67,10 +69,12 @@ GridLayout {
         to: sldHue.to
         stepSize: sldHue.stepSize
         editable: true
+        Accessible.name: txtHue.text
 
         onValueChanged: AdjustHSL.hue = Number(value)
     }
     Label {
+        id: txtSaturation
         text: qsTr("Saturation")
     }
     Slider {
@@ -80,6 +84,7 @@ GridLayout {
         from: -255
         to: 255
         Layout.fillWidth: true
+        Accessible.name: txtSaturation.text
 
         onValueChanged: AdjustHSL.saturation = value
     }
@@ -90,10 +95,12 @@ GridLayout {
         to: sldSaturation.to
         stepSize: sldSaturation.stepSize
         editable: true
+        Accessible.name: txtSaturation.text
 
         onValueChanged: AdjustHSL.saturation = Number(value)
     }
     Label {
+        id: txtLuminance
         text: qsTr("Luminance")
     }
     Slider {
@@ -103,6 +110,7 @@ GridLayout {
         from: -255
         to: 255
         Layout.fillWidth: true
+        Accessible.name: txtLuminance.text
 
         onValueChanged: AdjustHSL.luminance = value
     }
@@ -113,6 +121,7 @@ GridLayout {
         to: sldLuminance.to
         stepSize: sldLuminance.stepSize
         editable: true
+        Accessible.name: txtLuminance.text
 
         onValueChanged: AdjustHSL.luminance = Number(value)
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AdjustHSL/src/adjusthsl.h
+++ webcamoid-9.0.0/libAvKys/Plugins/AdjustHSL/src/adjusthsl.h
@@ -29,8 +29,8 @@ class AdjustHSL: public QObject, public
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // ADJUSTHSL_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AdjustHSL/src/adjusthslelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/AdjustHSL/src/adjusthslelement.cpp
@@ -17,10 +17,13 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QVariant>
-#include <QImage>
+#include <QColor>
 #include <QQmlContext>
+#include <QVariant>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "adjusthslelement.h"
@@ -31,6 +34,7 @@ class AdjustHSLElementPrivate
         int m_hue {0};
         int m_saturation {0};
         int m_luminance {0};
+        AkVideoConverter m_videoConverter {AkVideoCaps(AkVideoCaps::Format_argbpack, 0, 0, {})};
 
         template<typename T>
         inline T mod(T value, T mod)
@@ -91,43 +95,47 @@ AkPacket AdjustHSLElement::iVideoStream(
         return packet;
     }
 
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull()) {
+    if (!src) {
         if (packet)
             emit this->oStream(packet);
 
         return packet;
     }
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
+   auto hue = this->d->m_hue;
+   auto saturation = this->d->m_saturation;
+   auto luminance = this->d->m_luminance;
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    for (int y = 0; y < src.caps().height(); ++y) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
 
-    for (int y = 0; y < src.height(); y++) {
-        auto srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        auto dstLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++) {
+        for (int x = 0; x < src.caps().width(); ++x) {
             int h;
             int s;
             int l;
             int a;
             QColor(srcLine[x]).getHsl(&h, &s, &l, &a);
-            int ht = this->d->mod(h + this->d->m_hue, 360);
-            int st = qBound(0, s + this->d->m_saturation, 255);
-            int lt = qBound(0, l + this->d->m_luminance, 255);
+            int ht = this->d->mod(h + hue, 360);
+            int st = qBound(0, s + saturation, 255);
+            int lt = qBound(0, l + luminance, 255);
             QColor color;
             color.setHsl(ht, st, lt, a);
             dstLine[x] = color.rgba();
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-
-    if (oPacket)
-        emit this->oStream(oPacket);
+    if (dst)
+        emit this->oStream(dst);
 
-    return oPacket;
+    return dst;
 }
 
 void AdjustHSLElement::setHue(int hue)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AdjustHSL/src/adjusthslelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/AdjustHSL/src/adjusthslelement.h
@@ -55,10 +55,10 @@ class AdjustHSLElement: public AkElement
         AdjustHSLElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void hueChanged(int hue);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Aging/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Aging/CMakeLists.txt
@@ -60,7 +60,6 @@ target_include_directories(Aging
 target_compile_definitions(Aging PRIVATE AVKYS_PLUGIN_AGING)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Aging avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Aging RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Aging/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Aging/share/qml/main.qml
@@ -45,6 +45,7 @@ GridLayout {
         to: 255
         stepSize: 1
         Layout.fillWidth: true
+        Accessible.name: lblNScratches.text
 
         onValueChanged: Aging.nScratches = value
     }
@@ -54,12 +55,14 @@ GridLayout {
         to: sldNScratches.to
         stepSize: sldNScratches.stepSize
         editable: true
+        Accessible.name: lblNScratches.text
 
         onValueChanged: Aging.nScratches = Number(value)
     }
 
     // Aging mode.
     Label {
+        id: txtAddDust
         text: qsTr("Add dust")
     }
     RowLayout {
@@ -72,6 +75,7 @@ GridLayout {
         Switch {
             id: chkAddDust
             checked: Aging.addDust
+            Accessible.name: txtAddDust.text
 
             onCheckedChanged: Aging.addDust = checked
         }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Aging/src/aging.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Aging/src/aging.h
@@ -29,8 +29,8 @@ class Aging: public QObject, public AkPl
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // AGING_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Aging/src/agingelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Aging/src/agingelement.cpp
@@ -17,13 +17,16 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
-#include <QVector>
-#include <QTime>
 #include <QMutex>
 #include <QQmlContext>
 #include <QRandomGenerator>
+#include <QTime>
+#include <QVector>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "agingelement.h"
@@ -32,14 +35,15 @@
 class AgingElementPrivate
 {
     public:
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
         QVector<Scratch> m_scratches;
         QMutex m_mutex;
         bool m_addDust {true};
 
-        QImage colorAging(const QImage &src);
-        void scratching(QImage &dest);
-        void pits(QImage &dest);
-        void dusts(QImage &dest);
+        AkVideoPacket colorAging(const AkVideoPacket &src);
+        void scratching(AkVideoPacket &dst);
+        void pits(AkVideoPacket &dest);
+        void dusts(AkVideoPacket &dest);
 };
 
 AgingElement::AgingElement():
@@ -82,21 +86,24 @@ void AgingElement::controlInterfaceConfi
 
 AkPacket AgingElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    QImage oFrame = src.convertToFormat(QImage::Format_ARGB32);
-    oFrame = this->d->colorAging(oFrame);
-    this->d->scratching(oFrame);
-    this->d->pits(oFrame);
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    auto dst = this->d->colorAging(src);
+    this->d->scratching(dst);
+    this->d->pits(dst);
 
     if (this->d->m_addDust)
-        this->d->dusts(oFrame);
+        this->d->dusts(dst);
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void AgingElement::setNScratches(int nScratches)
@@ -129,16 +136,17 @@ void AgingElement::resetAddDust()
     this->setAddDust(true);
 }
 
-QImage AgingElementPrivate::colorAging(const QImage &src)
+AkVideoPacket AgingElementPrivate::colorAging(const AkVideoPacket &src)
 {
-    QImage dst(src.size(), src.format());
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
     int luma = QRandomGenerator::global()->bounded(-32, -25);
 
-    for (int y = 0; y < src.height(); y++) {
-        auto srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        auto dstLine = reinterpret_cast<QRgb *>(dst.scanLine(y));
+    for (int y = 0; y < src.caps().height(); ++y) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
 
-        for (int x = 0; x < src.width(); x++) {
+        for (int x = 0; x < src.caps().width(); ++x) {
             int c = QRandomGenerator::global()->bounded(24);
             int r = qRed(srcLine[x]) + luma + c;
             int g = qGreen(srcLine[x]) + luma + c;
@@ -155,7 +163,7 @@ QImage AgingElementPrivate::colorAging(c
     return dst;
 }
 
-void AgingElementPrivate::scratching(QImage &dest)
+void AgingElementPrivate::scratching(AkVideoPacket &dst)
 {
     QMutexLocker locker(&this->m_mutex);
 
@@ -164,16 +172,16 @@ void AgingElementPrivate::scratching(QIm
             if (QRandomGenerator::global()->bounded(RAND_MAX) <= 0.06 * RAND_MAX) {
                 scratch = Scratch(2.0, 33.0,
                                   1.0, 1.0,
-                                  0.0, dest.width() - 1,
+                                  0.0, dst.caps().width() - 1,
                                   0.0, 512.0,
-                                  0, dest.height() - 1);
+                                  0, dst.caps().height() - 1);
             } else {
                 continue;
             }
         }
 
-        if (scratch.x() < 0.0 || scratch.x() >= dest.width()) {
-            scratch++;
+        if (scratch.x() < 0.0 || scratch.x() >= dst.caps().width()) {
+            ++scratch;
 
             continue;
         }
@@ -183,11 +191,11 @@ void AgingElementPrivate::scratching(QIm
 
         int y1 = scratch.y();
         int y2 = scratch.isAboutToDie()?
-                     QRandomGenerator::global()->bounded(dest.height()):
-                     dest.height();
+                     QRandomGenerator::global()->bounded(dst.caps().height()):
+                     dst.caps().height();
 
-        for (int y = y1; y < y2; y++) {
-            QRgb *line = reinterpret_cast<QRgb *>(dest.scanLine(y));
+        for (int y = y1; y < y2; ++y) {
+            auto line = reinterpret_cast<QRgb *>(dst.line(0, y));
             int r = qRed(line[x]) + luma;
             int g = qGreen(line[x]) + luma;
             int b = qBlue(line[x]) + luma;
@@ -199,13 +207,14 @@ void AgingElementPrivate::scratching(QIm
             line[x] = qRgba(r, g, b, qAlpha(line[x]));
         }
 
-        scratch++;
+        ++scratch;
     }
 }
 
-void AgingElementPrivate::pits(QImage &dest)
+void AgingElementPrivate::pits(AkVideoPacket &dst)
 {
-    int pnumscale = qRound(0.03 * qMax(dest.width(), dest.height()));
+    int pnumscale = qRound(0.03 * qMax(dst.caps().width(),
+                                       dst.caps().height()));
     static int pitsInterval = 0;
     int pnum = QRandomGenerator::global()->bounded(pnumscale);
 
@@ -216,26 +225,26 @@ void AgingElementPrivate::pits(QImage &d
         pitsInterval = QRandomGenerator::global()->bounded(20, 36);
     }
 
-    for (int i = 0; i < pnum; i++) {
-        int x = QRandomGenerator::global()->bounded(dest.width());
-        int y = QRandomGenerator::global()->bounded(dest.height());
+    for (int i = 0; i < pnum; ++i) {
+        int x = QRandomGenerator::global()->bounded(dst.caps().width());
+        int y = QRandomGenerator::global()->bounded(dst.caps().height());
         int size = QRandomGenerator::global()->bounded(16);
 
-        for (int j = 0; j < size; j++) {
+        for (int j = 0; j < size; ++j) {
             x += QRandomGenerator::global()->bounded(-1, 2);
             y += QRandomGenerator::global()->bounded(-1, 2);
 
-            if (x < 0 || x >= dest.width()
-                || y < 0 || y >= dest.height())
+            if (x < 0 || x >= dst.caps().width()
+                || y < 0 || y >= dst.caps().height())
                 continue;
 
-            QRgb *line = reinterpret_cast<QRgb *>(dest.scanLine(y));
+            auto line = reinterpret_cast<QRgb *>(dst.line(0, y));
             line[x] = qRgb(192, 192, 192);
         }
     }
 }
 
-void AgingElementPrivate::dusts(QImage &dest)
+void AgingElementPrivate::dusts(AkVideoPacket &dst)
 {
     static int dustInterval = 0;
 
@@ -247,23 +256,24 @@ void AgingElementPrivate::dusts(QImage &
     }
 
     dustInterval--;
-    int areaScale = qRound(0.02 * qMax(dest.width(), dest.height()));
+    int areaScale = qRound(0.02 * qMax(dst.caps().width(),
+                                       dst.caps().height()));
     int dnum = 4 * areaScale + QRandomGenerator::global()->bounded(32);
 
-    for (int i = 0; i < dnum; i++) {
-        int x = QRandomGenerator::global()->bounded(dest.width());
-        int y = QRandomGenerator::global()->bounded(dest.height());
+    for (int i = 0; i < dnum; ++i) {
+        int x = QRandomGenerator::global()->bounded(dst.caps().width());
+        int y = QRandomGenerator::global()->bounded(dst.caps().height());
         int size = QRandomGenerator::global()->bounded(areaScale) + 5;
 
-        for (int j = 0; j < size; j++) {
+        for (int j = 0; j < size; ++j) {
             x += QRandomGenerator::global()->bounded(-1, 2);
             y += QRandomGenerator::global()->bounded(-1, 2);
 
-            if (x < 0 || x >= dest.width()
-                || y < 0 || y >= dest.height())
+            if (x < 0 || x >= dst.caps().width()
+                || y < 0 || y >= dst.caps().height())
                 continue;
 
-            QRgb *line = reinterpret_cast<QRgb *>(dest.scanLine(y));
+            auto line = reinterpret_cast<QRgb *>(dst.line(0, y));
             line[x] = qRgb(16, 16, 16);
         }
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Aging/src/agingelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Aging/src/agingelement.h
@@ -49,10 +49,10 @@ class AgingElement: public AkElement
         AgingElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void nScratchesChanged(int nScratches);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Aging/src/scratch.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Aging/src/scratch.cpp
@@ -96,6 +96,15 @@ Scratch &Scratch::operator =(const Scrat
 
 Scratch Scratch::operator ++(int)
 {
+    auto scratch = *this;
+    this->d->m_life -= this->d->m_dlife;
+    this->d->m_x += this->d->m_dx;
+
+    return scratch;
+}
+
+Scratch &Scratch::operator ++()
+{
     this->d->m_life -= this->d->m_dlife;
     this->d->m_x += this->d->m_dx;
 
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Aging/src/scratch.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Aging/src/scratch.h
@@ -37,6 +37,7 @@ class Scratch
         ~Scratch();
         Scratch &operator =(const Scratch &other);
         Scratch operator ++(int);
+        Scratch &operator ++();
 
         qreal life() const;
         qreal &life();
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/AnalogTV/AnalogTV.qrc
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/AnalogTV">
+        <file>share/qml/main.qml</file>
+    </qresource>
+</RCC>
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/AnalogTV/CMakeLists.txt
@@ -0,0 +1,67 @@
+# Webcamoid, webcam capture application.
+# Copyright (C) 2021  Gonzalo Exequiel Pedone
+#
+# Webcamoid is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Webcamoid is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+#
+# Web-Site: http://webcamoid.github.io/
+
+cmake_minimum_required(VERSION 3.16)
+
+project(AnalogTV LANGUAGES CXX)
+
+include(../../cmake/ProjectCommons.cmake)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+
+set(QT_COMPONENTS
+    Gui
+    Qml)
+find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS
+             ${QT_COMPONENTS}
+             REQUIRED)
+find_package(Qt${QT_VERSION_MAJOR} ${QT_MINIMUM_VERSION} COMPONENTS
+             ${QT_COMPONENTS}
+             REQUIRED)
+add_library(AnalogTV SHARED
+            src/analogtv.h
+            src/analogtvelement.h
+            src/analogtv.cpp
+            src/analogtvelement.cpp
+            AnalogTV.qrc
+            pspec.json)
+
+if (WIN32)
+    set_target_properties(AnalogTV PROPERTIES
+                          RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
+elseif (NOT ANDROID)
+    set_target_properties(AnalogTV PROPERTIES
+                          LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
+endif ()
+
+add_dependencies(AnalogTV avkys)
+target_include_directories(AnalogTV
+                           PRIVATE ../../Lib/src)
+target_compile_definitions(AnalogTV PRIVATE AVKYS_PLUGIN_ANALOGTV)
+list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
+target_link_libraries(AnalogTV avkys ${QT_LIBS})
+set(QML_IMPORT_PATH ../../Lib/share/qml)
+
+if (WIN32)
+    install(TARGETS AnalogTV RUNTIME DESTINATION ${PLUGINSDIR})
+elseif (NOT ANDROID)
+    install(TARGETS AnalogTV DESTINATION ${PLUGINSDIR})
+endif ()
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/AnalogTV/pspec.json
@@ -0,0 +1,12 @@
+{
+    "type": "WebcamoidPluginsCollection",
+    "plugins": [
+        {
+            "name": "AnalogTV",
+            "description": "Analog TV",
+            "id": "VideoFilter/AnalogTV",
+            "implements": ["Element", "VideoFilter"],
+            "type": "qtplugin"
+        }
+    ]
+}
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/AnalogTV/share/qml/main.qml
@@ -0,0 +1,273 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2016  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+import QtQuick 2.12
+import QtQuick.Controls 2.5
+import QtQuick.Layouts 1.3
+
+GridLayout {
+    columns: 3
+
+    Connections {
+        target: AnalogTV
+
+        function onVsyncChanged(vsync)
+        {
+            sldVSync.value = vsync
+            spbVSync.value = vsync * spbVSync.multiplier
+        }
+
+        function onXOffsetChanged(xOffset)
+        {
+            sldXOffset.value = xOffset
+            spbXOffset.value = xOffset
+        }
+
+        function onHsyncFactorChanged(hsyncFactor)
+        {
+            sldHSyncFactor.value = hsyncFactor
+            spbHSyncFactor.value = hsyncFactor * spbHSyncFactor.multiplier
+        }
+
+        function onHsyncSmoothnessChanged(hsyncSmoothness)
+        {
+            sldHSyncSmoothness.value = hsyncSmoothness
+            spbHSyncSmoothness.value = hsyncSmoothness
+        }
+
+        function onHueFactorChanged(hueFactor)
+        {
+            sldHueFactor.value = hueFactor
+            spbHueFactor.value = hueFactor * spbHueFactor.multiplier
+        }
+
+        function onNoiseChanged(noise)
+        {
+            sldNoise.value = noise
+            spbNoise.value = noise * spbNoise.multiplier
+        }
+    }
+
+    Label {
+        id: lblVSync
+        text: qsTr("Vertical sync")
+    }
+    Slider {
+        id: sldVSync
+        value: AnalogTV.vsync
+        stepSize: 0.01
+        from: -1
+        to: 1
+        Layout.fillWidth: true
+        Accessible.name: lblVSync.text
+
+        onValueChanged: AnalogTV.vsync = value
+    }
+    SpinBox {
+        id: spbVSync
+        value: multiplier * AnalogTV.vsync
+        from: multiplier * sldVSync.from
+        to: multiplier * sldVSync.to
+        stepSize: multiplier * sldVSync.stepSize
+        editable: true
+        Accessible.name: lblVSync.text
+
+        readonly property int decimals: 2
+        readonly property int multiplier: Math.pow(10, decimals)
+
+        validator: DoubleValidator {
+            bottom: Math.min(spbVSync.from, spbVSync.to)
+            top:  Math.max(spbVSync.from, spbVSync.to)
+        }
+        textFromValue: function(value, locale) {
+            return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
+        }
+        valueFromText: function(text, locale) {
+            return Number.fromLocaleString(locale, text) * multiplier
+        }
+        onValueModified: AnalogTV.vsync = value / multiplier
+    }
+    Label {
+        id: lblXOffset
+        text: qsTr("Horizontal offset")
+    }
+    Slider {
+        id: sldXOffset
+        value: AnalogTV.xOffset
+        stepSize: 1
+        from: -1024
+        to: 1024
+        Layout.fillWidth: true
+        Accessible.name: lblXOffset.text
+
+        onValueChanged: AnalogTV.xOffset = value
+    }
+    SpinBox {
+        id: spbXOffset
+        value: AnalogTV.xOffset
+        from: sldXOffset.from
+        to: sldXOffset.to
+        stepSize: sldXOffset.stepSize
+        editable: true
+        Accessible.name: lblXOffset.text
+
+        onValueChanged: AnalogTV.xOffset = Number(value)
+    }
+    Label {
+        id: lblHSyncFactor
+        text: qsTr("Horizontcal sync factor")
+    }
+    Slider {
+        id: sldHSyncFactor
+        value: AnalogTV.hsyncFactor
+        stepSize: 0.01
+        from: -20
+        to: 20
+        Layout.fillWidth: true
+        Accessible.name: lblHSyncFactor.text
+
+        onValueChanged: AnalogTV.hsyncFactor = value
+    }
+    SpinBox {
+        id: spbHSyncFactor
+        value: multiplier * AnalogTV.hsyncFactor
+        from: multiplier * sldHSyncFactor.from
+        to: multiplier * sldHSyncFactor.to
+        stepSize: multiplier * sldHSyncFactor.stepSize
+        editable: true
+        Accessible.name: lblHSyncFactor.text
+
+        readonly property int decimals: 2
+        readonly property int multiplier: Math.pow(10, decimals)
+
+        validator: DoubleValidator {
+            bottom: Math.min(spbHSyncFactor.from, spbHSyncFactor.to)
+            top:  Math.max(spbHSyncFactor.from, spbHSyncFactor.to)
+        }
+        textFromValue: function(value, locale) {
+            return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
+        }
+        valueFromText: function(text, locale) {
+            return Number.fromLocaleString(locale, text) * multiplier
+        }
+        onValueModified: AnalogTV.hsyncFactor = value / multiplier
+    }
+    Label {
+        id: lblHSyncSmoothness
+        text: qsTr("Horizontcal sync smoothness")
+    }
+    Slider {
+        id: sldHSyncSmoothness
+        value: AnalogTV.hsyncSmoothness
+        stepSize: 1
+        from: 0
+        to: 1024
+        Layout.fillWidth: true
+        Accessible.name: lblHSyncSmoothness.text
+
+        onValueChanged: AnalogTV.hsyncSmoothness = value
+    }
+    SpinBox {
+        id: spbHSyncSmoothness
+        value: AnalogTV.hsyncSmoothness
+        from: sldHSyncSmoothness.from
+        to: sldHSyncSmoothness.to
+        stepSize: sldHSyncSmoothness.stepSize
+        editable: true
+        Accessible.name: lblHSyncSmoothness.text
+
+        onValueChanged: AnalogTV.hsyncSmoothness = Number(value)
+    }
+    Label {
+        id: lblHueFactor
+        text: qsTr("Hue dephasing factor")
+    }
+    Slider {
+        id: sldHueFactor
+        value: AnalogTV.hueFactor
+        stepSize: 0.01
+        from: -2
+        to: 2
+        Layout.fillWidth: true
+        Accessible.name: lblHueFactor.text
+
+        onValueChanged: AnalogTV.hueFactor = value
+    }
+    SpinBox {
+        id: spbHueFactor
+        value: multiplier * AnalogTV.hueFactor
+        from: multiplier * sldHueFactor.from
+        to: multiplier * sldHueFactor.to
+        stepSize: multiplier * sldHueFactor.stepSize
+        editable: true
+        Accessible.name: lblHueFactor.text
+
+        readonly property int decimals: 2
+        readonly property int multiplier: Math.pow(10, decimals)
+
+        validator: DoubleValidator {
+            bottom: Math.min(spbHueFactor.from, spbHueFactor.to)
+            top:  Math.max(spbHueFactor.from, spbHueFactor.to)
+        }
+        textFromValue: function(value, locale) {
+            return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
+        }
+        valueFromText: function(text, locale) {
+            return Number.fromLocaleString(locale, text) * multiplier
+        }
+        onValueModified: AnalogTV.hueFactor = value / multiplier
+    }
+    Label {
+        id: lblNoise
+        text: qsTr("Noise")
+    }
+    Slider {
+        id: sldNoise
+        value: AnalogTV.noise
+        stepSize: 0.01
+        to: 1
+        Layout.fillWidth: true
+        Accessible.name: lblNoise.text
+
+        onValueChanged: AnalogTV.noise = value
+    }
+    SpinBox {
+        id: spbNoise
+        value: multiplier * AnalogTV.noise
+        to: multiplier * sldNoise.to
+        stepSize: multiplier * sldNoise.stepSize
+        editable: true
+        Accessible.name: lblNoise.text
+
+        readonly property int decimals: 2
+        readonly property int multiplier: Math.pow(10, decimals)
+
+        validator: DoubleValidator {
+            bottom: Math.min(spbNoise.from, spbNoise.to)
+            top:  Math.max(spbNoise.from, spbNoise.to)
+        }
+        textFromValue: function(value, locale) {
+            return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
+        }
+        valueFromText: function(text, locale) {
+            return Number.fromLocaleString(locale, text) * multiplier
+        }
+        onValueModified: AnalogTV.noise = value / multiplier
+    }
+}
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/AnalogTV/src/analogtv.cpp
@@ -0,0 +1,36 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2016  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include "analogtv.h"
+#include "analogtvelement.h"
+
+QObject *AnalogTV::create(const QString &key, const QString &specification)
+{
+    Q_UNUSED(key)
+    Q_UNUSED(specification)
+
+    return new AnalogTVElement();
+}
+
+QStringList AnalogTV::keys() const
+{
+    return {};
+}
+
+#include "moc_analogtv.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/AnalogTV/src/analogtv.h
@@ -0,0 +1,36 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2016  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef ANALOGTV_H
+#define ANALOGTV_H
+
+#include <akplugin.h>
+
+class AnalogTV: public QObject, public AkPlugin
+{
+    Q_OBJECT
+    Q_INTERFACES(AkPlugin)
+    Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
+
+    public:
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
+};
+
+#endif // ANALOGTV_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/AnalogTV/src/analogtvelement.cpp
@@ -0,0 +1,505 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2016  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QQmlContext>
+#include <QRandomGenerator>
+#include <QSize>
+#include <QtMath>
+#include <qrgb.h>
+#include <akfrac.h>
+#include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
+#include <akvideopacket.h>
+
+#include "analogtvelement.h"
+
+class AnalogTVElementPrivate
+{
+    public:
+        qreal m_vsync {0.02};
+        int m_xOffset {0};
+        qreal m_hsyncFactor {5.0};
+        int m_hsyncSmoothness {20};
+        qreal m_hueFactor {1.0};
+        qreal m_noise {0.1};
+        qreal m_yOffset {0.0};
+        qreal m_sign {1.0};
+        QSize m_curSize;
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+        qint64 *m_aiMultTable {nullptr};
+        qint64 *m_aoMultTable {nullptr};
+        qint64 *m_alphaDivTable {nullptr};
+
+        void createLumaOffset(const AkVideoPacket &src,
+                              qreal factor,
+                              int *lumaOffset) const;
+        void smoothLumaOffset(int *lumaOffset,
+                              int height,
+                              int smoothness) const;
+        AkVideoPacket applyVSync(const AkVideoPacket &src);
+        AkVideoPacket applyHSync(const AkVideoPacket &src,
+                                 const int *lumaOffset,
+                                 int xOffset);
+        inline void rotateHue(QRgb &pixel, int degrees) const;
+        void applyChromaDephasing(AkVideoPacket &src,
+                                  const int *lumaOffset,
+                                  qreal hueFactor) const;
+        void applyNoise(AkVideoPacket &src, qreal persent) const;
+
+        template<typename T>
+        inline T mod(T value, T mod) const
+        {
+            return (value % mod + mod) % mod;
+        }
+};
+
+AnalogTVElement::AnalogTVElement(): AkElement()
+{
+    this->d = new AnalogTVElementPrivate;
+
+    constexpr qint64 maxAi = 255;
+    qint64 maxAi2 = maxAi * maxAi;
+    constexpr qint64 alphaMult = 1 << 16;
+    this->d->m_aiMultTable = new qint64 [alphaMult];
+    this->d->m_aoMultTable = new qint64 [alphaMult];
+    this->d->m_alphaDivTable = new qint64 [alphaMult];
+
+    for (qint64 ai = 0; ai < 256; ai++)
+        for (qint64 ao = 0; ao < 256; ao++) {
+            auto alphaMask = (ai << 8) | ao;
+            auto a = maxAi2 - (maxAi - ai) * (maxAi - ao);
+            this->d->m_aiMultTable[alphaMask] = a? alphaMult * ai * maxAi / a: 0;
+            this->d->m_aoMultTable[alphaMask] = a? alphaMult * ao * (maxAi - ai) / a: 0;
+            this->d->m_alphaDivTable[alphaMask] = a / maxAi;
+        }
+}
+
+AnalogTVElement::~AnalogTVElement()
+{
+    delete [] this->d->m_aiMultTable;
+    delete [] this->d->m_aoMultTable;
+    delete [] this->d->m_alphaDivTable;
+    delete this->d;
+}
+
+qreal AnalogTVElement::vsync() const
+{
+    return this->d->m_vsync;
+}
+
+int AnalogTVElement::xOffset() const
+{
+    return this->d->m_xOffset;
+}
+
+qreal AnalogTVElement::hsyncFactor() const
+{
+    return this->d->m_hsyncFactor;
+}
+
+int AnalogTVElement::hsyncSmoothness() const
+{
+    return this->d->m_hsyncSmoothness;
+}
+
+qreal AnalogTVElement::hueFactor() const
+{
+    return this->d->m_hueFactor;
+}
+
+qreal AnalogTVElement::noise() const
+{
+    return this->d->m_noise;
+}
+
+QString AnalogTVElement::controlInterfaceProvide(const QString &controlId) const
+{
+    Q_UNUSED(controlId)
+
+    return QString("qrc:/AnalogTV/share/qml/main.qml");
+}
+
+void AnalogTVElement::controlInterfaceConfigure(QQmlContext *context,
+                                              const QString &controlId) const
+{
+    Q_UNUSED(controlId)
+
+    context->setContextProperty("AnalogTV", const_cast<QObject *>(qobject_cast<const QObject *>(this)));
+    context->setContextProperty("controlId", this->objectName());
+}
+
+AkPacket AnalogTVElement::iVideoStream(const AkVideoPacket &packet)
+{
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    QSize frameSize(src.caps().width(), src.caps().height());
+
+    if (frameSize != this->d->m_curSize) {
+        this->d->m_yOffset = 0.0;
+        this->d->m_curSize = frameSize;
+    }
+
+    auto lumaOffset = new int [src.caps().height()];
+    this->d->createLumaOffset(src, this->d->m_hsyncFactor, lumaOffset);
+    this->d->smoothLumaOffset(lumaOffset,
+                              src.caps().height(),
+                              this->d->m_hsyncSmoothness);
+    auto dst = this->d->applyHSync(src, lumaOffset, this->d->m_xOffset);
+    this->d->applyChromaDephasing(dst, lumaOffset, this->d->m_hueFactor);
+    delete [] lumaOffset;
+    this->d->applyNoise(dst, this->d->m_noise);
+    dst = this->d->applyVSync(dst);
+
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
+}
+
+void AnalogTVElement::setVSync(qreal vsync)
+{
+    if (qFuzzyCompare(vsync, this->d->m_vsync))
+        return;
+
+    this->d->m_vsync = vsync;
+    emit this->vsyncChanged(vsync);
+}
+
+void AnalogTVElement::setXOffset(int xOffset)
+{
+    if (xOffset == this->d->m_xOffset)
+        return;
+
+    this->d->m_xOffset = xOffset;
+    emit this->xOffsetChanged(xOffset);
+}
+
+void AnalogTVElement::setHSyncFactor(qreal hsyncFactor)
+{
+    if (qFuzzyCompare(hsyncFactor, this->d->m_hsyncFactor))
+        return;
+
+    this->d->m_hsyncFactor = hsyncFactor;
+    emit this->hsyncFactorChanged(hsyncFactor);
+}
+
+void AnalogTVElement::setHSyncSmoothness(int hsyncSmoothness)
+{
+    if (hsyncSmoothness == this->d->m_hsyncSmoothness)
+        return;
+
+    this->d->m_hsyncSmoothness = hsyncSmoothness;
+    emit this->hsyncSmoothnessChanged(hsyncSmoothness);
+}
+
+void AnalogTVElement::setHueFactor(qreal hueFactor)
+{
+    if (qFuzzyCompare(hueFactor, this->d->m_hueFactor))
+        return;
+
+    this->d->m_hueFactor = hueFactor;
+    emit this->hueFactorChanged(hueFactor);
+}
+
+void AnalogTVElement::setNoise(qreal noise)
+{
+    if (qFuzzyCompare(this->d->m_noise, noise))
+        return;
+
+    this->d->m_noise = noise;
+    emit this->noiseChanged(noise);
+}
+
+void AnalogTVElement::resetVSync()
+{
+    this->setVSync(0.02);
+}
+
+void AnalogTVElement::resetXOffset()
+{
+    this->setXOffset(0);
+}
+
+void AnalogTVElement::resetHSyncFactor()
+{
+    this->setHSyncFactor(5.0);
+}
+
+void AnalogTVElement::resetHSyncSmoothness()
+{
+    this->setHSyncSmoothness(20);
+}
+
+void AnalogTVElement::resetHueFactor()
+{
+    this->setHueFactor(1.0);
+}
+
+void AnalogTVElement::resetNoise()
+{
+    this->setNoise(0.1);
+}
+
+void AnalogTVElementPrivate::createLumaOffset(const AkVideoPacket &src,
+                                            qreal factor,
+                                            int *lumaOffset) const
+{
+    auto heightLuma = new quint8 [src.caps().height()];
+    quint64 avgLuma = 0;
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto line = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        quint64 avgLineLuma = 0;
+
+        for (int x = 0; x < src.caps().height(); x++) {
+            auto luma = qGray(line[x]);
+            avgLuma += luma;
+            avgLineLuma += luma;
+        }
+
+        heightLuma[y] = quint8(avgLineLuma / src.caps().height());
+    }
+
+    avgLuma /= size_t(src.caps().width()) * size_t(src.caps().height());
+
+    for (int y = 0; y < src.caps().height(); y++)
+        lumaOffset[y] = qRound(factor * (int(avgLuma) - int(heightLuma[y])));
+
+    delete [] heightLuma;
+}
+
+void AnalogTVElementPrivate::smoothLumaOffset(int *lumaOffset,
+                                            int height,
+                                            int smoothness) const
+{
+    auto sumLumaOffset = new qint64 [height + 1];
+    sumLumaOffset[0] = 0;
+
+    for (int y = 0; y < height; y++)
+        sumLumaOffset[y + 1] = lumaOffset[y] + sumLumaOffset[y];
+
+    smoothness = qMax(smoothness, 0);
+
+    for (int y = 0; y < height; y++) {
+        int y2 = y << 1;
+        int minY = (y2 - smoothness) >> 1;
+        int maxY = ((y2 + smoothness) >> 1) + 1;
+        minY = qMax(minY, 0);
+        maxY = qMin(maxY, height);
+        int n = maxY - minY;
+
+        if (n != 0)
+            lumaOffset[y] = (sumLumaOffset[maxY] - sumLumaOffset[minY]) / n;
+    }
+
+    delete [] sumLumaOffset;
+}
+
+AkVideoPacket AnalogTVElementPrivate::applyVSync(const AkVideoPacket &src)
+{
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    int offset = int(this->m_yOffset);
+
+    memcpy(dst.line(0, 0),
+           src.constLine(0, src.caps().height() - offset - 1),
+           size_t(src.lineSize(0) * offset));
+    memcpy(dst.line(0, offset),
+           src.constLine(0, 0),
+           size_t(src.lineSize(0) * (src.caps().height() - offset)));
+
+    auto vsync = this->m_vsync;
+
+    if (!qFuzzyCompare(this->m_yOffset, 0.0) && qFuzzyCompare(vsync, 0.0)) {
+        auto yOffset = this->m_sign > 0.0?
+                           this->m_yOffset:
+                           src.caps().height() - this->m_yOffset;
+        vsync = 0.1 * this->m_sign * yOffset / src.caps().height();
+    }
+
+    this->m_yOffset += vsync * dst.caps().height();
+    this->m_sign = vsync < 0.0? -1.0: 1.0;
+
+    if (int(this->m_yOffset) == 0 && qFuzzyCompare(this->m_vsync, 0.0))
+        this->m_yOffset = 0.0;
+
+    if (this->m_yOffset >= qreal(src.caps().height()))
+        this->m_yOffset = 0.0;
+    else if (this->m_yOffset < 0.0)
+        this->m_yOffset = src.caps().height();
+
+    return dst;
+}
+
+AkVideoPacket AnalogTVElementPrivate::applyHSync(const AkVideoPacket &src,
+                                               const int *lumaOffset,
+                                               int xOffset)
+{
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        int offset = (lumaOffset[y] + xOffset) % src.caps().width();
+
+        if (offset < 0) {
+            memcpy(dst.line(0, y),
+                   src.constLine(0, y) - offset * sizeof(QRgb),
+                   (src.caps().width() + offset) * sizeof(QRgb));
+            memcpy(dst.line(0, y) + (src.caps().width() + offset) * sizeof(QRgb),
+                   src.constLine(0, y),
+                   -offset * sizeof(QRgb));
+        } else {
+            memcpy(dst.line(0, y),
+                   src.constLine(0, y) + (src.caps().width() - offset) * sizeof(QRgb),
+                   offset * sizeof(QRgb));
+            memcpy(dst.line(0, y) + offset * sizeof(QRgb),
+                   src.constLine(0, y),
+                   (src.caps().width() - offset) * sizeof(QRgb));
+        }
+    }
+
+    return dst;
+}
+
+void AnalogTVElementPrivate::rotateHue(QRgb &pixel, int degrees) const
+{
+    if (degrees == 0)
+        return;
+
+    int r = qRed(pixel);
+    int g = qGreen(pixel);
+    int b = qBlue(pixel);
+    int a = qAlpha(pixel);
+
+    int max = qMax(r, qMax(g, b));
+    int min = qMin(r, qMin(g, b));
+
+    if (min == max) {
+        pixel = qRgba(min, min, min, a);
+    } else {
+        // Ccalculate hue
+
+        int c = max - min;
+        int h = 0;
+
+        if (max == r)
+            h = this->mod(g - b, 6 * c);
+        else if (max == g)
+            h = b - r + 2 * c;
+        else
+            h = r - g + 4 * c;
+
+        h = 60 * h / c;
+
+        // Dephase hue
+
+        h = qAbs((h + degrees) % 360);
+
+        // Convert HSL to RGB
+
+        int cc = c * (60 - qAbs((h % 120) - 60)) / 60;
+
+        if (h >= 0 && h < 60) {
+            r = c;
+            g = cc;
+            b = 0;
+        } else if (h >= 60 && h < 120) {
+            r = cc;
+            g = c;
+            b = 0;
+        } else if (h >= 120 && h < 180) {
+            r = 0;
+            g = c;
+            b = cc;
+        } else if (h >= 180 && h < 240) {
+            r = 0;
+            g = cc;
+            b = c;
+        } else if (h >= 240 && h < 300) {
+            r = cc;
+            g = 0;
+            b = c;
+        } else if (h >= 300 && h < 360) {
+            r = c;
+            g = 0;
+            b = cc;
+        } else {
+            r = 0;
+            g = 0;
+            b = 0;
+        }
+
+        r = r + min;
+        g = g + min;
+        b = b + min;
+
+        // Write pixel
+
+        pixel = qRgba(r, g, b, a);
+    }
+}
+
+void AnalogTVElementPrivate::applyChromaDephasing(AkVideoPacket &src,
+                                                const int *lumaOffset,
+                                                qreal hueFactor) const
+{
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto line = reinterpret_cast<QRgb *>(src.line(0, y));
+        auto hueOffset = qRound(hueFactor * lumaOffset[y]);
+
+        for (int x = 0; x < src.caps().width(); x++)
+            this->rotateHue(line[x], hueOffset);
+    }
+}
+
+void AnalogTVElementPrivate::applyNoise(AkVideoPacket &src, qreal persent) const
+{
+    auto peper = qRound64(persent * src.caps().width() * src.caps().height());
+
+    for (size_t i = 0; i < peper; i++) {
+        int gray = QRandomGenerator::global()->bounded(256);
+        int alpha = QRandomGenerator::global()->bounded(256);
+        int x = QRandomGenerator::global()->bounded(src.caps().width());
+        int y = QRandomGenerator::global()->bounded(src.caps().height());
+        auto pixel = src.pixel<QRgb>(0, x, y);
+
+        qint64 ro = qRed(pixel);
+        qint64 go = qGreen(pixel);
+        qint64 bo = qBlue(pixel);
+        qint64 ao = qAlpha(pixel);
+
+        auto alphaMask = (alpha << 8) | ao;
+        auto graym = gray * this->m_aiMultTable[alphaMask];
+        qint64 rt = (graym + ro * this->m_aoMultTable[alphaMask]) >> 16;
+        qint64 gt = (graym + go * this->m_aoMultTable[alphaMask]) >> 16;
+        qint64 bt = (graym + bo * this->m_aoMultTable[alphaMask]) >> 16;
+        qint64 &at = this->m_alphaDivTable[alphaMask];
+
+        src.setPixel(0, x, y, qRgba(int(rt), int(gt), int(bt), int(at)));
+    }
+}
+
+#include "moc_analogtvelement.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/AnalogTV/src/analogtvelement.h
@@ -0,0 +1,104 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2016  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef ANALOGTVELEMENT_H
+#define ANALOGTVELEMENT_H
+
+#include <akelement.h>
+
+class AnalogTVElementPrivate;
+
+class AnalogTVElement: public AkElement
+{
+    Q_OBJECT
+    Q_PROPERTY(qreal vsync
+               READ vsync
+               WRITE setVSync
+               RESET resetVSync
+               NOTIFY vsyncChanged)
+    Q_PROPERTY(int xOffset
+               READ xOffset
+               WRITE setXOffset
+               RESET resetXOffset
+               NOTIFY xOffsetChanged)
+    Q_PROPERTY(qreal hsyncFactor
+               READ hsyncFactor
+               WRITE setHSyncFactor
+               RESET resetHSyncFactor
+               NOTIFY hsyncFactorChanged)
+    Q_PROPERTY(int hsyncSmoothness
+               READ hsyncSmoothness
+               WRITE setHSyncSmoothness
+               RESET resetHSyncSmoothness
+               NOTIFY hsyncSmoothnessChanged)
+    Q_PROPERTY(qreal hueFactor
+               READ hueFactor
+               WRITE setHueFactor
+               RESET resetHueFactor
+               NOTIFY hueFactorChanged)
+    Q_PROPERTY(qreal noise
+               READ noise
+               WRITE setNoise
+               RESET resetNoise
+               NOTIFY noiseChanged)
+
+    public:
+        AnalogTVElement();
+        ~AnalogTVElement();
+
+        Q_INVOKABLE qreal vsync() const;
+        Q_INVOKABLE int xOffset() const;
+        Q_INVOKABLE qreal hsyncFactor() const;
+        Q_INVOKABLE int hsyncSmoothness() const;
+        Q_INVOKABLE qreal hueFactor() const;
+        Q_INVOKABLE qreal noise() const;
+
+    private:
+        AnalogTVElementPrivate *d;
+
+    protected:
+        QString controlInterfaceProvide(const QString &controlId) const override;
+        void controlInterfaceConfigure(QQmlContext *context,
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
+
+    signals:
+        void vsyncChanged(qreal vsync);
+        void xOffsetChanged(int xOffset);
+        void hsyncFactorChanged(qreal hsyncFactor);
+        void hsyncSmoothnessChanged(int hsyncSmoothness);
+        void hueFactorChanged(qreal hueFactor);
+        void noiseChanged(qreal noise);
+
+    public slots:
+        void setVSync(qreal vsync);
+        void setXOffset(int xOffset);
+        void setHSyncFactor(qreal hsyncFactor);
+        void setHSyncSmoothness(int hsyncSmoothness);
+        void setHueFactor(qreal hueFactor);
+        void setNoise(qreal noise);
+        void resetVSync();
+        void resetXOffset();
+        void resetHSyncFactor();
+        void resetHSyncSmoothness();
+        void resetHueFactor();
+        void resetNoise();
+};
+
+#endif // ANALOGTVELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AspectRatio/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/AspectRatio/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(AspectRatio
 target_compile_definitions(AspectRatio PRIVATE AVKYS_PLUGIN_ASPECTRATIO)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(AspectRatio avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS AspectRatio RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AspectRatio/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/AspectRatio/share/qml/main.qml
@@ -25,11 +25,13 @@ GridLayout {
     columns: 2
 
     Label {
+        id: txtWidth
         text: qsTr("Width")
     }
     TextField {
         text: AspectRatio.width
         placeholderText: qsTr("Aspect ratio width")
+        Accessible.name: txtWidth.text
         selectByMouse: true
         validator: RegExpValidator {
             regExp: /[1-9][0-9]*/
@@ -39,11 +41,13 @@ GridLayout {
         onTextChanged: AspectRatio.width = Number(text)
     }
     Label {
+        id: txtHeight
         text: qsTr("Height")
     }
     TextField {
         text: AspectRatio.height
         placeholderText: qsTr("Aspect ratio height")
+        Accessible.name: txtHeight.text
         selectByMouse: true
         validator: RegExpValidator {
             regExp: /[1-9][0-9]*/
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AspectRatio/src/aspectratio.h
+++ webcamoid-9.0.0/libAvKys/Plugins/AspectRatio/src/aspectratio.h
@@ -29,8 +29,8 @@ class AspectRatio: public QObject, publi
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // ASPECTRATIO_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AspectRatio/src/aspectratioelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/AspectRatio/src/aspectratioelement.cpp
@@ -19,7 +19,10 @@
 
 #include <QImage>
 #include <QQmlContext>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "aspectratioelement.h"
@@ -29,11 +32,13 @@ class AspectRatioElementPrivate
     public:
         int m_width {16};
         int m_height {9};
+        AkVideoConverter m_videoConverter;
 };
 
 AspectRatioElement::AspectRatioElement(): AkElement()
 {
     this->d = new AspectRatioElementPrivate;
+    this->d->m_videoConverter.setAspectRatioMode(AkVideoConverter::AspectRatioMode_Expanding);
 }
 
 AspectRatioElement::~AspectRatioElement()
@@ -66,32 +71,34 @@ void AspectRatioElement::controlInterfac
     context->setContextProperty("AspectRatio", const_cast<QObject *>(qobject_cast<const QObject *>(this)));
     context->setContextProperty("controlId", this->objectName());
 }
-#include <QtDebug>
+
 AkPacket AspectRatioElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
+    if (!packet)
+        return {};
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    int oWidth = qRound(qreal(src.height())
+    int oWidth = qRound(qreal(packet.caps().height())
                          * qMax(this->d->m_width, 1)
                          / qMax(this->d->m_height, 1));
-    oWidth = qMin(oWidth, src.width());
-    int oHeight = qRound(qreal(src.width())
+    oWidth = qMin(oWidth, packet.caps().width());
+    int oHeight = qRound(qreal(packet.caps().width())
                          * qMax(this->d->m_height, 1)
                          / qMax(this->d->m_width, 1));
-    oHeight = qMin(oHeight, src.height());
-    int x = (src.width() - oWidth) / 2;
-    int y = (src.height() - oHeight) / 2;
-    auto oFrame = src.copy(x, y, oWidth, oHeight);
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
+    oHeight = qMin(oHeight, packet.caps().height());
+
+    AkVideoCaps oCaps(packet.caps());
+    oCaps.setWidth(oWidth);
+    oCaps.setHeight(oHeight);
+    this->d->m_videoConverter.setOutputCaps(oCaps);
+
+    this->d->m_videoConverter.begin();
+    auto dst = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (oPacket)
-        emit this->oStream(oPacket);
+    if (dst)
+        emit this->oStream(dst);
 
-    return oPacket;
+    return dst;
 }
 
 void AspectRatioElement::setWidth(int width)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AspectRatio/src/aspectratioelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/AspectRatio/src/aspectratioelement.h
@@ -49,10 +49,10 @@ class AspectRatioElement: public AkEleme
         AspectRatioElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void widthChanged(int width);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/alsa/src/audiodevalsa.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/alsa/src/audiodevalsa.cpp
@@ -18,11 +18,11 @@
  */
 
 #include <cstdarg>
+#include <QFileSystemWatcher>
 #include <QMap>
-#include <QVector>
-#include <QTimer>
 #include <QMutex>
-#include <QFileSystemWatcher>
+#include <QTimer>
+#include <QVector>
 #include <alsa/asoundlib.h>
 #include <alsa/error.h>
 #include <akaudiopacket.h>
@@ -34,14 +34,20 @@ using SampleFormatMap = QMap<AkAudioCaps
 inline const SampleFormatMap &sampleFormats()
 {
     static const SampleFormatMap sampleFormat {
-        {AkAudioCaps::SampleFormat_s8 , SND_PCM_FORMAT_S8     },
-        {AkAudioCaps::SampleFormat_u8 , SND_PCM_FORMAT_U8     },
-        {AkAudioCaps::SampleFormat_s16, SND_PCM_FORMAT_S16    },
-        {AkAudioCaps::SampleFormat_u16, SND_PCM_FORMAT_U16    },
-        {AkAudioCaps::SampleFormat_s32, SND_PCM_FORMAT_S32    },
-        {AkAudioCaps::SampleFormat_u32, SND_PCM_FORMAT_U32    },
-        {AkAudioCaps::SampleFormat_flt, SND_PCM_FORMAT_FLOAT  },
-        {AkAudioCaps::SampleFormat_dbl, SND_PCM_FORMAT_FLOAT64},
+        {AkAudioCaps::SampleFormat_s8   , SND_PCM_FORMAT_S8        },
+        {AkAudioCaps::SampleFormat_u8   , SND_PCM_FORMAT_U8        },
+        {AkAudioCaps::SampleFormat_s16be, SND_PCM_FORMAT_S16_BE    },
+        {AkAudioCaps::SampleFormat_s16le, SND_PCM_FORMAT_S16_LE    },
+        {AkAudioCaps::SampleFormat_u16be, SND_PCM_FORMAT_U16_BE    },
+        {AkAudioCaps::SampleFormat_u16le, SND_PCM_FORMAT_U16_LE    },
+        {AkAudioCaps::SampleFormat_s32be, SND_PCM_FORMAT_S32_BE    },
+        {AkAudioCaps::SampleFormat_s32le, SND_PCM_FORMAT_S32_LE    },
+        {AkAudioCaps::SampleFormat_u32be, SND_PCM_FORMAT_U32_BE    },
+        {AkAudioCaps::SampleFormat_u32le, SND_PCM_FORMAT_U32_LE    },
+        {AkAudioCaps::SampleFormat_fltbe, SND_PCM_FORMAT_FLOAT_BE  },
+        {AkAudioCaps::SampleFormat_fltle, SND_PCM_FORMAT_FLOAT_LE  },
+        {AkAudioCaps::SampleFormat_dblbe, SND_PCM_FORMAT_FLOAT64_BE},
+        {AkAudioCaps::SampleFormat_dblle, SND_PCM_FORMAT_FLOAT64_LE},
     };
 
     return sampleFormat;
@@ -67,10 +73,15 @@ class AudioDevAlsaPrivate
         int m_samples {0};
 
         explicit AudioDevAlsaPrivate(AudioDevAlsa *self);
-        void fillDeviceInfo(const QString &device,
+        QString deviceName(snd_ctl_t *ctlHnd,
+                           unsigned int device,
+                           snd_pcm_stream_t streamType) const;
+        bool fillDeviceInfo(const QString &deviceId,
+                            snd_pcm_stream_t streamType,
                             QList<AkAudioCaps::SampleFormat> *supportedFormats,
                             QList<AkAudioCaps::ChannelLayout> *supportedLayouts,
                             QList<int> *supportedSampleRates) const;
+        void updateDevices();
 };
 
 AudioDevAlsa::AudioDevAlsa(QObject *parent):
@@ -82,7 +93,9 @@ AudioDevAlsa::AudioDevAlsa(QObject *pare
     QObject::connect(&this->d->m_timer,
                      &QTimer::timeout,
                      this,
-                     &AudioDevAlsa::updateDevices);
+                     [this] () {
+                        this->d->updateDevices();
+                     });
 
 #if 1
     this->d->m_fsWatcher = new QFileSystemWatcher({"/dev/snd"}, this);
@@ -90,9 +103,11 @@ AudioDevAlsa::AudioDevAlsa(QObject *pare
     QObject::connect(this->d->m_fsWatcher,
                      &QFileSystemWatcher::directoryChanged,
                      this,
-                     &AudioDevAlsa::updateDevices);
+                     [this] () {
+                        this->d->updateDevices();
+                     });
 
-    this->updateDevices();
+    this->d->updateDevices();
 #else
     this->updateDevices();
     this->d->m_timer.start();
@@ -144,9 +159,11 @@ AkAudioCaps AudioDevAlsa::preferredForma
     return this->d->m_sinks.contains(device)?
                 AkAudioCaps(AkAudioCaps::SampleFormat_s32,
                             AkAudioCaps::Layout_stereo,
+                            false,
                             44100):
                 AkAudioCaps(AkAudioCaps::SampleFormat_u8,
                             AkAudioCaps::Layout_mono,
+                            false,
                             8000);
 }
 
@@ -167,7 +184,7 @@ QList<int> AudioDevAlsa::supportedSample
 
 bool AudioDevAlsa::init(const QString &device, const AkAudioCaps &caps)
 {
-    QMutexLocker mutexLockeer(&this->d->m_mutex);
+    this->d->m_mutex.lock();
 
     this->d->m_pcmHnd = nullptr;
     int error =
@@ -179,8 +196,16 @@ bool AudioDevAlsa::init(const QString &d
                              SND_PCM_STREAM_CAPTURE: SND_PCM_STREAM_PLAYBACK,
                          SND_PCM_NONBLOCK);
 
-    if (error < 0)
-        goto init_fail;
+    if (error < 0) {
+        snd_pcm_close(this->d->m_pcmHnd);
+        this->d->m_pcmHnd = nullptr;
+        this->d->m_mutex.unlock();
+
+        this->d->m_error = snd_strerror(error);
+        emit this->errorChanged(this->d->m_error);
+
+        return false;
+    }
 
     error = snd_pcm_set_params(this->d->m_pcmHnd,
                                sampleFormats().value(caps.format(),
@@ -191,19 +216,21 @@ bool AudioDevAlsa::init(const QString &d
                                1,
                                uint(1000 * this->latency()));
 
-    if (error < 0)
-        goto init_fail;
+    if (error < 0) {
+        snd_pcm_close(this->d->m_pcmHnd);
+        this->d->m_pcmHnd = nullptr;
+        this->d->m_mutex.unlock();
 
-    this->d->m_samples = qMax(this->latency() * caps.rate() / 1000, 1);
+        this->d->m_error = snd_strerror(error);
+        emit this->errorChanged(this->d->m_error);
 
-    return true;
+        return false;
+    }
 
-init_fail:
-    this->d->m_error = snd_strerror(error);
-    emit this->errorChanged(this->d->m_error);
-    this->uninit();
+    this->d->m_mutex.unlock();
+    this->d->m_samples = qMax(this->latency() * caps.rate() / 1000, 1);
 
-    return false;
+    return true;
 }
 
 QByteArray AudioDevAlsa::read()
@@ -246,9 +273,8 @@ bool AudioDevAlsa::write(const AkAudioPa
     if (!this->d->m_pcmHnd)
         return false;
 
-    auto buffer = packet.buffer();
-    auto data = buffer.constData();
-    int dataSize = buffer.size();
+    auto data = packet.constData();
+    int dataSize = packet.size();
 
     while (dataSize > 0) {
         auto samples = snd_pcm_bytes_to_frames(this->d->m_pcmHnd, dataSize);
@@ -280,6 +306,8 @@ bool AudioDevAlsa::write(const AkAudioPa
 
 bool AudioDevAlsa::uninit()
 {
+    QMutexLocker mutexLockeer(&this->d->m_mutex);
+
     if (this->d->m_pcmHnd) {
         snd_pcm_close(this->d->m_pcmHnd);
         this->d->m_pcmHnd = nullptr;
@@ -293,22 +321,39 @@ AudioDevAlsaPrivate::AudioDevAlsaPrivate
 {
 }
 
-void AudioDevAlsaPrivate::fillDeviceInfo(const QString &device,
+QString AudioDevAlsaPrivate::deviceName(snd_ctl_t *ctlHnd,
+                                        unsigned int device,
+                                        snd_pcm_stream_t streamType) const
+{
+    QString deviceName;
+    snd_pcm_info_t *deviceInfo = nullptr;
+    snd_pcm_info_malloc(&deviceInfo);
+    snd_pcm_info_set_device(deviceInfo, device);
+    snd_pcm_info_set_subdevice(deviceInfo, 0);
+    snd_pcm_info_set_stream(deviceInfo, streamType);
+
+    if (snd_ctl_pcm_info(ctlHnd, deviceInfo) >= 0)
+        deviceName = snd_pcm_info_get_name(deviceInfo);
+
+    snd_pcm_info_free(deviceInfo);
+
+    return deviceName;
+}
+
+bool AudioDevAlsaPrivate::fillDeviceInfo(const QString &deviceId,
+                                         snd_pcm_stream_t streamType,
                                          QList<AkAudioCaps::SampleFormat> *supportedFormats,
                                          QList<AkAudioCaps::ChannelLayout> *supportedLayouts,
                                          QList<int> *supportedSampleRates) const
 {
     snd_pcm_t *pcmHnd = nullptr;
     int error = snd_pcm_open(&pcmHnd,
-                             QString(device)
-                                 .remove(QRegExp(":Input$|:Output$"))
-                                 .toStdString().c_str(),
-                             device.endsWith(":Input")?
-                                 SND_PCM_STREAM_CAPTURE: SND_PCM_STREAM_PLAYBACK,
+                             deviceId.toStdString().c_str(),
+                             streamType,
                              SND_PCM_NONBLOCK);
 
     if (error < 0)
-        return;
+        return false;
 
     uint maxChannels = 0;
 
@@ -320,8 +365,14 @@ void AudioDevAlsaPrivate::fillDeviceInfo
 
     if (snd_pcm_hw_params_test_access(pcmHnd,
                                       hwParams,
-                                      SND_PCM_ACCESS_RW_INTERLEAVED) < 0)
-        goto deviceCaps_fail;
+                                      SND_PCM_ACCESS_RW_INTERLEAVED) < 0) {
+        snd_pcm_hw_params_free(hwParams);
+
+        if (pcmHnd)
+            snd_pcm_close(pcmHnd);
+
+        return false;
+    }
 
     static const QVector<snd_pcm_format_t> preferredFormats {
         SND_PCM_FORMAT_FLOAT,
@@ -360,122 +411,159 @@ void AudioDevAlsaPrivate::fillDeviceInfo
         if (snd_pcm_hw_params_test_rate(pcmHnd, hwParams, uint(rate), 0) >= 0)
             supportedSampleRates->append(rate);
 
-deviceCaps_fail:
     snd_pcm_hw_params_free(hwParams);
 
     if (pcmHnd)
         snd_pcm_close(pcmHnd);
+
+    return true;
 }
 
-void AudioDevAlsa::updateDevices()
+void AudioDevAlsaPrivate::updateDevices()
 {
-    decltype(this->d->m_sources) inputs;
-    decltype(this->d->m_sinks) outputs;
-    decltype(this->d->m_pinDescriptionMap) pinDescriptionMap;
-    decltype(this->d->m_supportedFormats) supportedFormats;
-    decltype(this->d->m_supportedLayouts) supportedChannels;
-    decltype(this->d->m_supportedSampleRates) supportedSampleRates;
+    decltype(this->m_sources) inputs;
+    decltype(this->m_sinks) outputs;
+    decltype(this->m_pinDescriptionMap) pinDescriptionMap;
+    decltype(this->m_supportedFormats) supportedFormats;
+    decltype(this->m_supportedLayouts) supportedChannels;
+    decltype(this->m_supportedSampleRates) supportedSampleRates;
+
+    // Add hardware audio devices.
+
+    // Read hardware devices first but put them after virtual devices.
+    decltype(this->m_sources) hwInputs;
+    decltype(this->m_sinks) hwOutputs;
+    decltype(this->m_pinDescriptionMap) hwPinDescriptionMap;
+    decltype(this->m_supportedFormats) hwSupportedFormats;
+    decltype(this->m_supportedLayouts) hwSupportedChannels;
+    decltype(this->m_supportedSampleRates) hwSupportedSampleRates;
 
+    QStringList cardIds;
+    QStringList deviceIds;
     int card = -1;
-    snd_ctl_card_info_t *ctlInfo = nullptr;
-    snd_ctl_card_info_malloc(&ctlInfo);
 
     while (snd_card_next(&card) >= 0 && card >= 0) {
-        char name[32];
-        sprintf(name, "hw:%d", card);
+        static const size_t nameSize = 32;
+        char name[nameSize];
+        snprintf(name, nameSize, "hw:%d", card);
         snd_ctl_t *ctlHnd = nullptr;
 
         if (snd_ctl_open(&ctlHnd, name, SND_PCM_NONBLOCK) < 0)
             continue;
 
-        if (snd_ctl_card_info(ctlHnd, ctlInfo) < 0) {
+        QString cardId;
+        QString cardName;
+        snd_ctl_card_info_t *cardInfo = nullptr;
+        snd_ctl_card_info_malloc(&cardInfo);
+
+        if (snd_ctl_card_info(ctlHnd, cardInfo) >= 0) {
+            cardId = snd_ctl_card_info_get_id(cardInfo);
+            cardName = snd_ctl_card_info_get_name(cardInfo);
+        }
+
+        snd_ctl_card_info_free(cardInfo);
+
+        if (cardId.isEmpty() || cardName.isEmpty()) {
             snd_ctl_close(ctlHnd);
 
             continue;
         }
 
+        auto cid = QString("CARD=%1").arg(cardId);
+
+        if (!cardIds.contains(cid))
+            cardIds << cid;
+
+        cid = QString("CARD=%1").arg(card);
+
+        if (!cardIds.contains(cid))
+            cardIds << cid;
+
         int device = -1;
 
-        if (snd_ctl_pcm_next_device(ctlHnd, &device) < 0
-            || device < 0) {
-            snd_ctl_close(ctlHnd);
+        while (snd_ctl_pcm_next_device(ctlHnd, &device) >= 0 && device >= 0) {
+            auto did = QString("CARD=%1,DEV=%2").arg(cardId).arg(device);
 
-            continue;
-        }
+            if (!deviceIds.contains(did))
+                deviceIds << did;
 
-        QString deviceId =
-                QString("plughw:CARD=%1,DEV=0")
-                    .arg(snd_ctl_card_info_get_id(ctlInfo));
-        QString description = snd_ctl_card_info_get_name(ctlInfo);
+            auto deviceId =
+                    QString("plughw:CARD=%1,DEV=%2").arg(cardId).arg(device);
+            QList<AkAudioCaps::SampleFormat> _supportedFormats;
+            QList<AkAudioCaps::ChannelLayout> _supportedLayouts;
+            QList<int> _supportedSampleRates;
 
-        snd_ctl_close(ctlHnd);
+            this->fillDeviceInfo(deviceId,
+                                 SND_PCM_STREAM_CAPTURE,
+                                 &_supportedFormats,
+                                 &_supportedLayouts,
+                                 &_supportedSampleRates);
+            auto input = deviceId + ":Input";
+
+            if (_supportedFormats.isEmpty())
+                _supportedFormats = this->m_supportedFormats.value(input);
+
+            if (_supportedLayouts.isEmpty())
+                _supportedLayouts = this->m_supportedLayouts.value(input);
+
+            if (_supportedSampleRates.isEmpty())
+                _supportedSampleRates = this->m_supportedSampleRates.value(input);
+
+            if (!_supportedFormats.isEmpty()
+                && !_supportedLayouts.isEmpty()
+                && !_supportedSampleRates.isEmpty()) {
+                hwInputs << input;
+                auto deviceName = this->deviceName(ctlHnd,
+                                                   device,
+                                                   SND_PCM_STREAM_CAPTURE);
+                hwPinDescriptionMap[input] =
+                        QString("%1 - %2").arg(cardName, deviceName);
+                hwSupportedFormats[input] = _supportedFormats;
+                hwSupportedChannels[input] = _supportedLayouts;
+                hwSupportedSampleRates[input] = _supportedSampleRates;
+            }
 
-        QList<AkAudioCaps::SampleFormat> _supportedFormats;
-        QList<AkAudioCaps::ChannelLayout> _supportedLayouts;
-        QList<int> _supportedSampleRates;
-
-        auto input = deviceId + ":Input";
-        this->d->fillDeviceInfo(input,
-                                &_supportedFormats,
-                                &_supportedLayouts,
-                                &_supportedSampleRates);
-
-        if (_supportedFormats.isEmpty())
-            _supportedFormats = this->d->m_supportedFormats.value(input);
-
-        if (_supportedLayouts.isEmpty())
-            _supportedLayouts = this->d->m_supportedLayouts.value(input);
-
-        if (_supportedSampleRates.isEmpty())
-            _supportedSampleRates = this->d->m_supportedSampleRates.value(input);
-
-        if (!_supportedFormats.isEmpty()
-            && !_supportedLayouts.isEmpty()
-            && !_supportedSampleRates.isEmpty()) {
-            inputs << input;
-            pinDescriptionMap[input] = description;
-            supportedFormats[input] = _supportedFormats;
-            supportedChannels[input] = _supportedLayouts;
-            supportedSampleRates[input] = _supportedSampleRates;
-        }
+            _supportedFormats.clear();
+            _supportedLayouts.clear();
+            _supportedSampleRates.clear();
 
-        _supportedFormats.clear();
-        _supportedLayouts.clear();
-        _supportedSampleRates.clear();
-
-        auto output = deviceId + ":Output";
-        this->d->fillDeviceInfo(output,
-                                &_supportedFormats,
-                                &_supportedLayouts,
-                                &_supportedSampleRates);
-
-        if (_supportedFormats.isEmpty())
-            _supportedFormats = this->d->m_supportedFormats.value(output);
-
-        if (_supportedLayouts.isEmpty())
-            _supportedLayouts = this->d->m_supportedLayouts.value(output);
-
-        if (_supportedSampleRates.isEmpty())
-            _supportedSampleRates = this->d->m_supportedSampleRates.value(output);
-
-        if (!_supportedFormats.isEmpty()
-            && !_supportedLayouts.isEmpty()
-            && !_supportedSampleRates.isEmpty()) {
-            outputs << output;
-            pinDescriptionMap[output] = description;
-            supportedFormats[output] = _supportedFormats;
-            supportedChannels[output] = _supportedLayouts;
-            supportedSampleRates[output] = _supportedSampleRates;
+            this->fillDeviceInfo(deviceId,
+                                 SND_PCM_STREAM_PLAYBACK,
+                                 &_supportedFormats,
+                                 &_supportedLayouts,
+                                 &_supportedSampleRates);
+            auto output = deviceId + ":Output";
+
+            if (_supportedFormats.isEmpty())
+                _supportedFormats = this->m_supportedFormats.value(output);
+
+            if (_supportedLayouts.isEmpty())
+                _supportedLayouts = this->m_supportedLayouts.value(output);
+
+            if (_supportedSampleRates.isEmpty())
+                _supportedSampleRates = this->m_supportedSampleRates.value(output);
+
+            if (!_supportedFormats.isEmpty()
+                && !_supportedLayouts.isEmpty()
+                && !_supportedSampleRates.isEmpty()) {
+                hwOutputs << output;
+                auto deviceName = this->deviceName(ctlHnd,
+                                                   device,
+                                                   SND_PCM_STREAM_PLAYBACK);
+                hwPinDescriptionMap[output] =
+                        QString("%1 - %2").arg(cardName, deviceName);
+                hwSupportedFormats[output] = _supportedFormats;
+                hwSupportedChannels[output] = _supportedLayouts;
+                hwSupportedSampleRates[output] = _supportedSampleRates;
+            }
         }
+
+        snd_ctl_close(ctlHnd);
     }
 
-    snd_ctl_card_info_free(ctlInfo);
+    // Add virtual audio devices.
 
-    // In case the first method for detecting the devices didn't worked,
-    // use hints to detect the devices.
     void **hints = nullptr;
-    bool fillInputs = inputs.isEmpty();
-    bool fillOuputs = outputs.isEmpty();
 
     if (snd_device_name_hint(-1, "pcm", &hints) >= 0) {
         for (auto hint = hints; *hint != nullptr; hint++) {
@@ -487,27 +575,34 @@ void AudioDevAlsa::updateDevices()
             QString description = snd_device_name_get_hint(*hint, "DESC");
             description.replace('\n', " - ");
             QString io = snd_device_name_get_hint(*hint, "IOID");
+            auto interfaceDevice = deviceId.split(":");
+
+            if (interfaceDevice.size() > 1
+                && (cardIds.contains(interfaceDevice[1])
+                    || deviceIds.contains(interfaceDevice[1]))) {
+                continue;
+            }
 
             QList<AkAudioCaps::SampleFormat> _supportedFormats;
             QList<AkAudioCaps::ChannelLayout> _supportedLayouts;
             QList<int> _supportedSampleRates;
 
-            if (fillInputs && (io.isEmpty() || io == "Input")) {
+            if (io.isEmpty() || io == "Input") {
+                this->fillDeviceInfo(deviceId,
+                                     SND_PCM_STREAM_CAPTURE,
+                                     &_supportedFormats,
+                                     &_supportedLayouts,
+                                     &_supportedSampleRates);
                 auto input = deviceId + ":Input";
 
-                this->d->fillDeviceInfo(input,
-                                        &_supportedFormats,
-                                        &_supportedLayouts,
-                                        &_supportedSampleRates);
-
                 if (_supportedFormats.isEmpty())
-                    _supportedFormats = this->d->m_supportedFormats.value(input);
+                    _supportedFormats = this->m_supportedFormats.value(input);
 
                 if (_supportedLayouts.isEmpty())
-                    _supportedLayouts = this->d->m_supportedLayouts.value(input);
+                    _supportedLayouts = this->m_supportedLayouts.value(input);
 
                 if (_supportedSampleRates.isEmpty())
-                    _supportedSampleRates = this->d->m_supportedSampleRates.value(input);
+                    _supportedSampleRates = this->m_supportedSampleRates.value(input);
 
                 if (!_supportedFormats.isEmpty()
                     && !_supportedLayouts.isEmpty()
@@ -524,22 +619,22 @@ void AudioDevAlsa::updateDevices()
             _supportedLayouts.clear();
             _supportedSampleRates.clear();
 
-            if (fillOuputs && (io.isEmpty() || io == "Output")) {
+            if (io.isEmpty() || io == "Output") {
+                this->fillDeviceInfo(deviceId,
+                                     SND_PCM_STREAM_PLAYBACK,
+                                     &_supportedFormats,
+                                     &_supportedLayouts,
+                                     &_supportedSampleRates);
                 auto output = deviceId + ":Output";
 
-                this->d->fillDeviceInfo(output,
-                                        &_supportedFormats,
-                                        &_supportedLayouts,
-                                        &_supportedSampleRates);
-
                 if (_supportedFormats.isEmpty())
-                    _supportedFormats = this->d->m_supportedFormats.value(output);
+                    _supportedFormats = this->m_supportedFormats.value(output);
 
                 if (_supportedLayouts.isEmpty())
-                    _supportedLayouts = this->d->m_supportedLayouts.value(output);
+                    _supportedLayouts = this->m_supportedLayouts.value(output);
 
                 if (_supportedSampleRates.isEmpty())
-                    _supportedSampleRates = this->d->m_supportedSampleRates.value(output);
+                    _supportedSampleRates = this->m_supportedSampleRates.value(output);
 
                 if (!_supportedFormats.isEmpty()
                     && !_supportedLayouts.isEmpty()
@@ -556,39 +651,52 @@ void AudioDevAlsa::updateDevices()
         snd_device_name_free_hint(hints);
     }
 
-    if (this->d->m_supportedFormats != supportedFormats)
-        this->d->m_supportedFormats = supportedFormats;
-
-    if (this->d->m_supportedLayouts != supportedChannels)
-        this->d->m_supportedLayouts = supportedChannels;
-
-    if (this->d->m_supportedSampleRates != supportedSampleRates)
-        this->d->m_supportedSampleRates = supportedSampleRates;
-
-    if (this->d->m_pinDescriptionMap != pinDescriptionMap)
-        this->d->m_pinDescriptionMap = pinDescriptionMap;
+    // Join virtual devices and hardware devices;
+    inputs << hwInputs;
+    outputs << hwOutputs;
+    auto devices = hwInputs + hwOutputs;
+
+    for (auto &device: devices) {
+        pinDescriptionMap[device] = hwPinDescriptionMap[device];
+        supportedFormats[device] = hwSupportedFormats[device];
+        supportedChannels[device] = hwSupportedChannels[device];
+        supportedSampleRates[device] = hwSupportedSampleRates[device];
+    }
 
-    if (this->d->m_sources != inputs) {
-        this->d->m_sources = inputs;
-        emit this->inputsChanged(inputs);
+    // Update devices
+    if (this->m_supportedFormats != supportedFormats)
+        this->m_supportedFormats = supportedFormats;
+
+    if (this->m_supportedLayouts != supportedChannels)
+        this->m_supportedLayouts = supportedChannels;
+
+    if (this->m_supportedSampleRates != supportedSampleRates)
+        this->m_supportedSampleRates = supportedSampleRates;
+
+    if (this->m_pinDescriptionMap != pinDescriptionMap)
+        this->m_pinDescriptionMap = pinDescriptionMap;
+
+    if (this->m_sources != inputs) {
+        this->m_sources = inputs;
+        emit self->inputsChanged(inputs);
     }
 
-    if (this->d->m_sinks != outputs) {
-        this->d->m_sinks = outputs;
-        emit this->outputsChanged(outputs);
+    if (this->m_sinks != outputs) {
+        this->m_sinks = outputs;
+        emit self->outputsChanged(outputs);
     }
 
     QString defaultOutput = outputs.isEmpty()? "": outputs.first();
     QString defaultInput = inputs.isEmpty()? "": inputs.first();
 
-    if (this->d->m_defaultSource != defaultInput) {
-        this->d->m_defaultSource = defaultInput;
-        emit this->defaultInputChanged(defaultInput);
+    if (this->m_defaultSource != defaultInput) {
+        this->m_defaultSource = defaultInput;
+        emit self->defaultInputChanged(defaultInput);
     }
 
-    if (this->d->m_defaultSink != defaultOutput) {
-        this->d->m_defaultSink = defaultOutput;
-        emit this->defaultOutputChanged(defaultOutput);
+    if (this->m_defaultSink != defaultOutput) {
+        this->m_defaultSink = defaultOutput;
+        emit self->defaultOutputChanged(defaultOutput);
     }
 }
 
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/alsa/src/audiodevalsa.h
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/alsa/src/audiodevalsa.h
@@ -32,26 +32,23 @@ class AudioDevAlsa: public AudioDev
         AudioDevAlsa(QObject *parent=nullptr);
         ~AudioDevAlsa();
 
-        Q_INVOKABLE QString error() const;
-        Q_INVOKABLE QString defaultInput();
-        Q_INVOKABLE QString defaultOutput();
-        Q_INVOKABLE QStringList inputs();
-        Q_INVOKABLE QStringList outputs();
-        Q_INVOKABLE QString description(const QString &device);
-        Q_INVOKABLE AkAudioCaps preferredFormat(const QString &device);
-        Q_INVOKABLE QList<AkAudioCaps::SampleFormat> supportedFormats(const QString &device);
-        Q_INVOKABLE QList<AkAudioCaps::ChannelLayout> supportedChannelLayouts(const QString &device);
-        Q_INVOKABLE QList<int> supportedSampleRates(const QString &device);
-        Q_INVOKABLE bool init(const QString &device, const AkAudioCaps &caps);
-        Q_INVOKABLE QByteArray read();
-        Q_INVOKABLE bool write(const AkAudioPacket &packet);
-        Q_INVOKABLE bool uninit();
+        Q_INVOKABLE QString error() const override;
+        Q_INVOKABLE QString defaultInput() override;
+        Q_INVOKABLE QString defaultOutput() override;
+        Q_INVOKABLE QStringList inputs() override;
+        Q_INVOKABLE QStringList outputs() override;
+        Q_INVOKABLE QString description(const QString &device) override;
+        Q_INVOKABLE AkAudioCaps preferredFormat(const QString &device) override;
+        Q_INVOKABLE QList<AkAudioCaps::SampleFormat> supportedFormats(const QString &device) override;
+        Q_INVOKABLE QList<AkAudioCaps::ChannelLayout> supportedChannelLayouts(const QString &device) override;
+        Q_INVOKABLE QList<int> supportedSampleRates(const QString &device) override;
+        Q_INVOKABLE bool init(const QString &device, const AkAudioCaps &caps) override;
+        Q_INVOKABLE QByteArray read() override;
+        Q_INVOKABLE bool write(const AkAudioPacket &packet) override;
+        Q_INVOKABLE bool uninit() override;
 
     private:
         AudioDevAlsaPrivate *d;
-
-    private slots:
-        void updateDevices();
 };
 
 #endif // AUDIODEVALSA_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/audiodevice.h
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/audiodevice.h
@@ -29,8 +29,8 @@ class AudioDevice: public QObject, publi
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "../pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // AUDIODEVICE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/audiodeviceelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/audiodeviceelement.cpp
@@ -36,10 +36,6 @@
 #define PAUSE_TIMEOUT 500
 #define DUMMY_OUTPUT_DEVICE ":dummyout:"
 
-#ifdef Q_OS_WIN32
-#include <combaseapi.h>
-#endif
-
 using AudioDevPtr = QSharedPointer<AudioDev>;
 
 class AudioDeviceElementPrivate
@@ -121,12 +117,12 @@ QString AudioDeviceElement::defaultInput
     QString defaultInput;
 
     this->d->m_mutexLib.lock();
-
-    if (this->d->m_audioDevice)
-        defaultInput = this->d->m_audioDevice->defaultInput();
-
+    auto audioDevice = this->d->m_audioDevice;
     this->d->m_mutexLib.unlock();
 
+    if (audioDevice)
+        defaultInput = audioDevice->defaultInput();
+
     return defaultInput;
 }
 
@@ -135,12 +131,12 @@ QString AudioDeviceElement::defaultOutpu
     QString defaultOutput;
 
     this->d->m_mutexLib.lock();
-
-    if (this->d->m_audioDevice)
-        defaultOutput = this->d->m_audioDevice->defaultOutput();
-
+    auto audioDevice = this->d->m_audioDevice;
     this->d->m_mutexLib.unlock();
 
+    if (audioDevice)
+        defaultOutput = audioDevice->defaultOutput();
+
     return defaultOutput;
 }
 
@@ -162,12 +158,12 @@ QString AudioDeviceElement::description(
     QString description;
 
     this->d->m_mutexLib.lock();
-
-    if (this->d->m_audioDevice)
-        description = this->d->m_audioDevice->description(device);
-
+    auto audioDevice = this->d->m_audioDevice;
     this->d->m_mutexLib.unlock();
 
+    if (audioDevice)
+        description = audioDevice->description(device);
+
     return description;
 }
 
@@ -178,8 +174,12 @@ QString AudioDeviceElement::device() con
 
 int AudioDeviceElement::latency() const
 {
-    if (this->d->m_audioDevice)
-        return  this->d->m_audioDevice->latency();
+    this->d->m_mutexLib.lock();
+    auto audioDevice = this->d->m_audioDevice;
+    this->d->m_mutexLib.unlock();
+
+    if (audioDevice)
+        return audioDevice->latency();
 
     return 25;
 }
@@ -194,17 +194,18 @@ AkAudioCaps AudioDeviceElement::preferre
     if (device == DUMMY_OUTPUT_DEVICE)
         return AkAudioCaps(AkAudioCaps::SampleFormat_s16,
                            AkAudioCaps::Layout_stereo,
+                           false,
                            44100);
 
     AkAudioCaps preferredFormat;
 
     this->d->m_mutexLib.lock();
-
-    if (this->d->m_audioDevice)
-        preferredFormat = this->d->m_audioDevice->preferredFormat(device);
-
+    auto audioDevice = this->d->m_audioDevice;
     this->d->m_mutexLib.unlock();
 
+    if (audioDevice)
+        preferredFormat = audioDevice->preferredFormat(device);
+
     return preferredFormat;
 }
 
@@ -221,12 +222,12 @@ QList<AkAudioCaps::SampleFormat> AudioDe
     QList<AkAudioCaps::SampleFormat> supportedFormats;
 
     this->d->m_mutexLib.lock();
-
-    if (this->d->m_audioDevice)
-        supportedFormats = this->d->m_audioDevice->supportedFormats(device);
-
+    auto audioDevice = this->d->m_audioDevice;
     this->d->m_mutexLib.unlock();
 
+    if (audioDevice)
+        supportedFormats = audioDevice->supportedFormats(device);
+
     return supportedFormats;
 }
 
@@ -241,13 +242,12 @@ QList<AkAudioCaps::ChannelLayout> AudioD
     QList<AkAudioCaps::ChannelLayout> supportedChannelLayouts;
 
     this->d->m_mutexLib.lock();
-
-    if (this->d->m_audioDevice)
-        supportedChannelLayouts =
-                this->d->m_audioDevice->supportedChannelLayouts(device);
-
+    auto audioDevice = this->d->m_audioDevice;
     this->d->m_mutexLib.unlock();
 
+    if (audioDevice)
+        supportedChannelLayouts = audioDevice->supportedChannelLayouts(device);
+
     return supportedChannelLayouts;
 }
 
@@ -259,12 +259,12 @@ QList<int> AudioDeviceElement::supported
     QList<int> supportedSampleRates;
 
     this->d->m_mutexLib.lock();
-
-    if (this->d->m_audioDevice)
-        supportedSampleRates = this->d->m_audioDevice->supportedSampleRates(device);
-
+    auto audioDevice = this->d->m_audioDevice;
     this->d->m_mutexLib.unlock();
 
+    if (audioDevice)
+        supportedSampleRates = audioDevice->supportedSampleRates(device);
+
     return supportedSampleRates;
 }
 
@@ -283,20 +283,19 @@ AudioDeviceElementPrivate::AudioDeviceEl
 
 void AudioDeviceElementPrivate::readFramesLoop()
 {
-    if (!this->m_audioDevice)
-        return;
+    this->m_mutexLib.lock();
+    auto audioDevice = this->m_audioDevice;
+    this->m_mutexLib.unlock();
 
-#ifdef Q_OS_WIN32
-    // Initialize the COM library in multithread mode.
-    CoInitializeEx(nullptr, COINIT_MULTITHREADED);
-#endif
+    if (!audioDevice)
+        return;
 
     QString device = this->m_device;
     AkAudioCaps caps(this->m_caps);
     qint64 streamId = Ak::id();
     AkFrac timeBase(1, caps.rate());
 
-    if (this->m_audioDevice->init(device, caps)) {
+    if (audioDevice->init(device, caps)) {
         while (this->m_readFramesLoop) {
             if (this->m_pause) {
                 QThread::msleep(PAUSE_TIMEOUT);
@@ -304,19 +303,18 @@ void AudioDeviceElementPrivate::readFram
                 continue;
             }
 
-            auto buffer = this->m_audioDevice->read();
+            auto buffer = audioDevice->read();
 
             if (buffer.isEmpty())
                 return;
 
-            QByteArray oBuffer(buffer.size(), 0);
-            memcpy(oBuffer.data(), buffer.constData(), size_t(buffer.size()));
+            size_t samples = 8 * buffer.size() / (caps.channels() * caps.bps());
+            AkAudioPacket packet(caps, samples);
+            memcpy(packet.data(),
+                   buffer.constData(),
+                   qMin<size_t>(packet.size(), buffer.size()));
             auto pts = qint64(QTime::currentTime().msecsSinceStartOfDay()
                               / timeBase.value() / 1e3);
-            caps.setSamples(8 * buffer.size() / (caps.channels() * caps.bps()));
-            AkAudioPacket packet;
-            packet.caps() = caps;
-            packet.buffer() = oBuffer;
             packet.setPts(pts);
             packet.setTimeBase(timeBase);
             packet.setIndex(0);
@@ -325,13 +323,8 @@ void AudioDeviceElementPrivate::readFram
             emit self->oStream(packet);
         }
 
-        this->m_audioDevice->uninit();
+        audioDevice->uninit();
     }
-
-#ifdef Q_OS_WIN32
-    // Close COM library.
-    CoUninitialize();
-#endif
 }
 
 void AudioDeviceElementPrivate::setInputs(const QStringList &inputs)
@@ -364,11 +357,15 @@ void AudioDeviceElementPrivate::linksCha
     bool isInput = this->m_inputs.contains(this->m_device);
 
     this->m_mutexLib.lock();
+    auto audioDevice = this->m_audioDevice;
+    this->m_mutexLib.unlock();
+
     int latency = 25;
 
-    if (this->m_audioDevice)
-        latency = this->m_audioDevice->latency();
+    if (audioDevice)
+        latency = audioDevice->latency();
 
+    this->m_mutexLib.lock();
     this->m_audioDevice =
             akPluginManager->create<AudioDev>("AudioSource/AudioDevice/Impl/*");
     this->m_mutexLib.unlock();
@@ -423,35 +420,39 @@ void AudioDeviceElementPrivate::linksCha
 
 AkPacket AudioDeviceElement::iAudioStream(const AkAudioPacket &packet)
 {
-    if (!this->d->m_audioDevice)
-        return AkPacket();
+    if (!packet)
+        return {};
+
+    this->d->m_mutexLib.lock();
+    auto audioDevice = this->d->m_audioDevice;
+    this->d->m_mutexLib.unlock();
+
+    if (!audioDevice)
+        return {};
 
     this->d->m_mutex.lock();
 
     if (this->state() != ElementStatePlaying) {
         this->d->m_mutex.unlock();
 
-        return AkPacket();
+        return {};
     }
 
     auto device = this->d->m_device;
     this->d->m_mutex.unlock();
 
-    if (device == DUMMY_OUTPUT_DEVICE)
+    if (device == DUMMY_OUTPUT_DEVICE) {
         QThread::usleep(ulong(1e6
-                              * packet.caps().samples()
+                              * packet.samples()
                               / packet.caps().rate()));
-    else {
-        AkPacket iPacket;
+    } else {
+        AkAudioPacket iPacket;
         this->d->m_mutex.lock();
         iPacket = this->d->m_audioConvert.convert(packet);
         this->d->m_mutex.unlock();
 
-        if (iPacket) {
-            this->d->m_mutexLib.lock();
-            this->d->m_audioDevice->write(iPacket);
-            this->d->m_mutexLib.unlock();
-        }
+        if (iPacket)
+            audioDevice->write(iPacket);
     }
 
     return AkPacket();
@@ -464,18 +465,27 @@ void AudioDeviceElement::setDevice(const
 
     this->d->m_device = device;
     emit this->deviceChanged(device);
+
+    this->d->m_mutexLib.lock();
+    auto audioDevice = this->d->m_audioDevice;
+    this->d->m_mutexLib.unlock();
+
     AkAudioCaps preferredFormat;
 
-    if (this->d->m_audioDevice)
-        preferredFormat = this->d->m_audioDevice->preferredFormat(device);
+    if (audioDevice)
+        preferredFormat = audioDevice->preferredFormat(device);
 
     this->setCaps(preferredFormat);
 }
 
 void AudioDeviceElement::setLatency(int latency)
 {
-    if (this->d->m_audioDevice)
-        this->d->m_audioDevice->setLatency(latency);
+    this->d->m_mutexLib.lock();
+    auto audioDevice = this->d->m_audioDevice;
+    this->d->m_mutexLib.unlock();
+
+    if (audioDevice)
+        audioDevice->setLatency(latency);
 }
 
 void AudioDeviceElement::setCaps(const AkAudioCaps &caps)
@@ -495,22 +505,27 @@ void AudioDeviceElement::resetDevice()
 
 void AudioDeviceElement::resetLatency()
 {
-    if (this->d->m_audioDevice)
-        this->d->m_audioDevice->resetLatency();
+    this->d->m_mutexLib.lock();
+    auto audioDevice = this->d->m_audioDevice;
+    this->d->m_mutexLib.unlock();
+
+    if (audioDevice)
+        audioDevice->resetLatency();
 }
 
 void AudioDeviceElement::resetCaps()
 {
-    this->d->m_mutexLib.lock();
     auto preferredFormat = this->preferredFormat(this->d->m_device);
-    this->d->m_mutexLib.unlock();
-
     this->setCaps(preferredFormat);
 }
 
 bool AudioDeviceElement::setState(AkElement::ElementState state)
 {
-    if (!this->d->m_audioDevice)
+    this->d->m_mutexLib.lock();
+    auto audioDevice = this->d->m_audioDevice;
+    this->d->m_mutexLib.unlock();
+
+    if (!audioDevice)
         return false;
 
     AkElement::ElementState curState = this->state();
@@ -545,10 +560,7 @@ bool AudioDeviceElement::setState(AkElem
                 this->d->m_audioConvert.reset();
                 QString device = this->d->m_device;
                 AkAudioCaps caps(this->d->m_caps);
-
-                this->d->m_mutexLib.lock();
-                auto isInit = this->d->m_audioDevice->init(device, caps);
-                this->d->m_mutexLib.unlock();
+                auto isInit = audioDevice->init(device, caps);
 
                 if (!isInit)
                     return false;
@@ -571,9 +583,7 @@ bool AudioDeviceElement::setState(AkElem
                 this->d->m_readFramesLoopResult.waitForFinished();
             } else if (this->d->m_device != DUMMY_OUTPUT_DEVICE
                        && this->d->m_outputs.contains(this->d->m_device)) {
-                this->d->m_mutexLib.lock();
-                this->d->m_audioDevice->uninit();
-                this->d->m_mutexLib.unlock();
+                audioDevice->uninit();
             }
 
             return AkElement::setState(state);
@@ -582,12 +592,8 @@ bool AudioDeviceElement::setState(AkElem
                 this->d->m_pause = false;
             } else if (this->d->m_device != DUMMY_OUTPUT_DEVICE
                        && this->d->m_outputs.contains(this->d->m_device)) {
-                QString device = this->d->m_device;
-                AkAudioCaps caps(this->d->m_caps);
-
-                this->d->m_mutexLib.lock();
-                auto isInit = this->d->m_audioDevice->init(device, caps);
-                this->d->m_mutexLib.unlock();
+                auto isInit = audioDevice->init(this->d->m_device,
+                                                this->d->m_caps);
 
                 if (!isInit)
                     return false;
@@ -609,9 +615,7 @@ bool AudioDeviceElement::setState(AkElem
                 this->d->m_readFramesLoopResult.waitForFinished();
             } else if (this->d->m_device != DUMMY_OUTPUT_DEVICE
                        && this->d->m_outputs.contains(this->d->m_device)) {
-                this->d->m_mutexLib.lock();
-                this->d->m_audioDevice->uninit();
-                this->d->m_mutexLib.unlock();
+                audioDevice->uninit();
             }
 
             return AkElement::setState(state);
@@ -620,9 +624,7 @@ bool AudioDeviceElement::setState(AkElem
                 this->d->m_pause = true;
             } else if (this->d->m_device != DUMMY_OUTPUT_DEVICE
                        && this->d->m_outputs.contains(this->d->m_device)) {
-                this->d->m_mutexLib.lock();
-                this->d->m_audioDevice->uninit();
-                this->d->m_mutexLib.unlock();
+                audioDevice->uninit();
             }
 
             return AkElement::setState(state);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/audiodeviceelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/audiodeviceelement.h
@@ -78,7 +78,7 @@ class AudioDeviceElement: public AkEleme
         AudioDeviceElementPrivate *d;
 
     protected:
-        AkPacket iAudioStream(const AkAudioPacket &packet);
+        AkPacket iAudioStream(const AkAudioPacket &packet) override;
 
     signals:
         void defaultInputChanged(const QString &defaultInput);
@@ -96,7 +96,7 @@ class AudioDeviceElement: public AkEleme
         void resetDevice();
         void resetLatency();
         void resetCaps();
-        bool setState(AkElement::ElementState state);
+        bool setState(AkElement::ElementState state) override;
 };
 
 #endif // AUDIODEVICEELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/coreaudio/src/audiodevcoreaudio.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/coreaudio/src/audiodevcoreaudio.cpp
@@ -18,6 +18,7 @@
  */
 
 #include <QMap>
+#include <QMutex>
 #include <QVector>
 #include <QWaitCondition>
 #include <akaudiocaps.h>
@@ -492,7 +493,7 @@ bool AudioDevCoreAudio::write(const AkAu
     if (this->d->m_buffer.size() >= this->d->m_maxBufferSize)
         this->d->m_canWrite.wait(&this->d->m_mutex);
 
-    this->d->m_buffer += packet.buffer();
+    this->d->m_buffer += {packet.constData(), int(packet.size())};
     this->d->m_mutex.unlock();
 
     return true;
@@ -1083,6 +1084,7 @@ void AudioDevCoreAudio::updateDevices()
                         defaultCaps[devId] =
                                 AkAudioCaps(formats.first(),
                                             AkAudioCaps::defaultChannelLayout(layouts.first()),
+                                            false,
                                             sampleRates.first());
                     }
                 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/coreaudio/src/audiodevcoreaudio.h
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/coreaudio/src/audiodevcoreaudio.h
@@ -32,20 +32,20 @@ class AudioDevCoreAudio: public AudioDev
         AudioDevCoreAudio(QObject *parent=nullptr);
         ~AudioDevCoreAudio();
 
-        Q_INVOKABLE QString error() const;
-        Q_INVOKABLE QString defaultInput();
-        Q_INVOKABLE QString defaultOutput();
-        Q_INVOKABLE QStringList inputs();
-        Q_INVOKABLE QStringList outputs();
-        Q_INVOKABLE QString description(const QString &device);
-        Q_INVOKABLE AkAudioCaps preferredFormat(const QString &device);
-        Q_INVOKABLE QList<AkAudioCaps::SampleFormat> supportedFormats(const QString &device);
-        Q_INVOKABLE QList<AkAudioCaps::ChannelLayout> supportedChannelLayouts(const QString &device);
-        Q_INVOKABLE QList<int> supportedSampleRates(const QString &device);
-        Q_INVOKABLE bool init(const QString &device, const AkAudioCaps &caps);
-        Q_INVOKABLE QByteArray read();
-        Q_INVOKABLE bool write(const AkAudioPacket &packet);
-        Q_INVOKABLE bool uninit();
+        Q_INVOKABLE QString error() const override;
+        Q_INVOKABLE QString defaultInput() override;
+        Q_INVOKABLE QString defaultOutput() override;
+        Q_INVOKABLE QStringList inputs() override;
+        Q_INVOKABLE QStringList outputs() override;
+        Q_INVOKABLE QString description(const QString &device) override;
+        Q_INVOKABLE AkAudioCaps preferredFormat(const QString &device) override;
+        Q_INVOKABLE QList<AkAudioCaps::SampleFormat> supportedFormats(const QString &device) override;
+        Q_INVOKABLE QList<AkAudioCaps::ChannelLayout> supportedChannelLayouts(const QString &device) override;
+        Q_INVOKABLE QList<int> supportedSampleRates(const QString &device) override;
+        Q_INVOKABLE bool init(const QString &device, const AkAudioCaps &caps) override;
+        Q_INVOKABLE QByteArray read() override;
+        Q_INVOKABLE bool write(const AkAudioPacket &packet) override;
+        Q_INVOKABLE bool uninit() override;
 
     private:
         AudioDevCoreAudioPrivate *d;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/jack/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/jack/CMakeLists.txt
@@ -42,9 +42,6 @@ set(SOURCES
     ../audiodev.h
     src/audiodevjack.cpp
     src/audiodevjack.h
-    src/jackserver.cpp
-    src/jackserver.h
-    src/jackservertypedefs.h
     src/plugin.cpp
     src/plugin.h
     pspec.json)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/jack/src/audiodevjack.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/jack/src/audiodevjack.cpp
@@ -27,7 +27,6 @@
 #include <jack/jack.h>
 
 #include "audiodevjack.h"
-#include "jackserver.h"
 
 using JackErrorCodes = QMap<jack_status_t, QString>;
 
@@ -115,7 +114,7 @@ AudioDevJack::AudioDevJack(QObject *pare
                      AudioDevJackPrivate::onShutdownCallback,
                      this);
 
-    QMap<QString, JackPortFlags> portTypeMap = {
+    static const QMap<QString, JackPortFlags> portTypeMap {
         {":jackinput:" , JackPortIsOutput},
         {":jackoutput:", JackPortIsInput }
     };
@@ -140,6 +139,7 @@ AudioDevJack::AudioDevJack(QObject *pare
             this->d->m_caps[it.key()] =
                     AkAudioCaps(AkAudioCaps::SampleFormat_flt,
                                 AkAudioCaps::defaultChannelLayout(qBound(1, channels, 2)),
+                                false,
                                 this->d->m_sampleRate);
     }
 }
@@ -203,16 +203,9 @@ QList<AkAudioCaps::SampleFormat> AudioDe
 
 QList<AkAudioCaps::ChannelLayout> AudioDevJack::supportedChannelLayouts(const QString &device)
 {
-    QList<AkAudioCaps::ChannelLayout> supportedChannels;
-
-    for (int i = 0; i < this->d->m_devicePorts.value(device).size(); i++) {
-        auto layout = AkAudioCaps::defaultChannelLayout(i + 1);
-
-        if (layout != AkAudioCaps::Layout_none)
-            supportedChannels << layout;
-    }
+    Q_UNUSED(device)
 
-    return supportedChannels;
+    return {AkAudioCaps::Layout_mono, AkAudioCaps::Layout_stereo};
 }
 
 QList<int> AudioDevJack::supportedSampleRates(const QString &device)
@@ -255,9 +248,12 @@ bool AudioDevJack::init(const QString &d
     }
 
     if (this->d->m_appPorts.size() < caps.channels()) {
+        for (auto &port: this->d->m_appPorts)
+            jack_port_unregister(this->d->m_client, port);
+
+        this->d->m_appPorts.clear();
         this->d->m_error = "AudioDevJack::init: No more JACK ports available";
         Q_EMIT this->errorChanged(this->d->m_error);
-        this->uninit();
 
         return false;
     }
@@ -267,9 +263,12 @@ bool AudioDevJack::init(const QString &d
     // Activate JACK client
 
     if (auto error = jack_status_t(jack_activate(this->d->m_client))) {
+        for (auto &port: this->d->m_appPorts)
+            jack_port_unregister(this->d->m_client, port);
+
+        this->d->m_appPorts.clear();
         this->d->m_error = jackErrorCodes->value(error);
         Q_EMIT this->errorChanged(this->d->m_error);
-        this->uninit();
 
         return false;
     }
@@ -320,7 +319,6 @@ QByteArray AudioDevJack::read()
                      * int(sizeof(jack_default_audio_sample_t))
                      * this->d->m_curChannels
                      * this->d->m_samples;
-
     QByteArray audioData;
 
     this->d->m_mutex.lock();
@@ -347,7 +345,7 @@ bool AudioDevJack::write(const AkAudioPa
     if (this->d->m_buffer.size() >= this->d->m_maxBufferSize)
         this->d->m_canWrite.wait(&this->d->m_mutex);
 
-    this->d->m_buffer += packet.buffer();
+    this->d->m_buffer += {packet.constData(), int(packet.size())};
     this->d->m_mutex.unlock();
 
     return true;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/jack/src/audiodevjack.h
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/jack/src/audiodevjack.h
@@ -32,20 +32,20 @@ class AudioDevJack: public AudioDev
         AudioDevJack(QObject *parent=nullptr);
         ~AudioDevJack();
 
-        Q_INVOKABLE QString error() const;
-        Q_INVOKABLE QString defaultInput();
-        Q_INVOKABLE QString defaultOutput();
-        Q_INVOKABLE QStringList inputs();
-        Q_INVOKABLE QStringList outputs();
-        Q_INVOKABLE QString description(const QString &device);
-        Q_INVOKABLE AkAudioCaps preferredFormat(const QString &device);
-        Q_INVOKABLE QList<AkAudioCaps::SampleFormat> supportedFormats(const QString &device);
-        Q_INVOKABLE QList<AkAudioCaps::ChannelLayout> supportedChannelLayouts(const QString &device);
-        Q_INVOKABLE QList<int> supportedSampleRates(const QString &device);
-        Q_INVOKABLE bool init(const QString &device, const AkAudioCaps &caps);
-        Q_INVOKABLE QByteArray read();
-        Q_INVOKABLE bool write(const AkAudioPacket &packet);
-        Q_INVOKABLE bool uninit();
+        Q_INVOKABLE QString error() const override;
+        Q_INVOKABLE QString defaultInput() override;
+        Q_INVOKABLE QString defaultOutput() override;
+        Q_INVOKABLE QStringList inputs() override;
+        Q_INVOKABLE QStringList outputs() override;
+        Q_INVOKABLE QString description(const QString &device) override;
+        Q_INVOKABLE AkAudioCaps preferredFormat(const QString &device) override;
+        Q_INVOKABLE QList<AkAudioCaps::SampleFormat> supportedFormats(const QString &device) override;
+        Q_INVOKABLE QList<AkAudioCaps::ChannelLayout> supportedChannelLayouts(const QString &device) override;
+        Q_INVOKABLE QList<int> supportedSampleRates(const QString &device) override;
+        Q_INVOKABLE bool init(const QString &device, const AkAudioCaps &caps) override;
+        Q_INVOKABLE QByteArray read() override;
+        Q_INVOKABLE bool write(const AkAudioPacket &packet) override;
+        Q_INVOKABLE bool uninit() override;
 
     private:
         AudioDevJackPrivate *d;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/jack/src/jackserver.cpp
+++ /dev/null
@@ -1,408 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include <QtDebug>
-#include "jackserver.h"
-
-JackServer::JackServer(on_device_acquire_t onDeviceAcquire,
-                       on_device_release_t onDeviceRelease,
-                       QObject *parent):
-    QObject(parent)
-{
-    this->m_library.setFileName("jackserver");
-
-    if (!this->m_library.load())
-        return;
-
-    LOAD_FUNC(this->m_library, jackctl_server_create);
-    LOAD_FUNC(this->m_library, jackctl_server_destroy);
-    LOAD_FUNC(this->m_library, jackctl_server_start);
-    LOAD_FUNC(this->m_library, jackctl_server_stop);
-    LOAD_FUNC(this->m_library, jackctl_server_get_drivers_list);
-    LOAD_FUNC(this->m_library, jackctl_server_get_parameters);
-    LOAD_FUNC(this->m_library, jackctl_server_switch_master);
-    LOAD_FUNC(this->m_library, jackctl_driver_get_name);
-    LOAD_FUNC(this->m_library, jackctl_driver_get_parameters);
-    LOAD_FUNC(this->m_library, jackctl_parameter_get_name);
-    LOAD_FUNC(this->m_library, jackctl_parameter_get_short_description);
-    LOAD_FUNC(this->m_library, jackctl_parameter_get_long_description);
-    LOAD_FUNC(this->m_library, jackctl_parameter_get_type);
-    LOAD_FUNC(this->m_library, jackctl_parameter_is_set);
-    LOAD_FUNC(this->m_library, jackctl_parameter_reset);
-    LOAD_FUNC(this->m_library, jackctl_parameter_get_value);
-    LOAD_FUNC(this->m_library, jackctl_parameter_set_value);
-    LOAD_FUNC(this->m_library, jackctl_parameter_get_default_value);
-
-    this->m_server = this->jackctl_server_create(onDeviceAcquire,
-                                                 onDeviceRelease);
-}
-
-JackServer::~JackServer()
-{
-    if (this->m_library.isLoaded()) {
-        if (this->m_server)
-            this->jackctl_server_destroy(this->m_server);
-
-        this->m_library.unload();
-    }
-}
-
-bool JackServer::start(jackctl_driver_t *driver)
-{
-    return this->jackctl_server_start(this->m_server, driver);
-}
-
-bool JackServer::start(const QString &driver)
-{
-    return this->start(this->driverByName(driver));
-}
-
-bool JackServer::stop()
-{
-    return this->jackctl_server_stop(this->m_server);
-}
-
-QList<jackctl_driver_t *> JackServer::drivers() const
-{
-    QList<jackctl_driver_t *> driversList;
-    auto drivers = this->jackctl_server_get_drivers_list(this->m_server);
-
-    for (auto driver = drivers; driver;  driver = driver->next)
-        driversList << reinterpret_cast<jackctl_driver_t *>(driver->data);
-
-    return driversList;
-}
-
-QStringList JackServer::driversByName() const
-{
-    QStringList drivers;
-
-    for (auto &driver: this->drivers())
-        drivers << this->name(driver);
-
-    return drivers;
-}
-
-jackctl_driver_t *JackServer::driverByName(const QString &name) const
-{
-    for (auto &driver: this->drivers())
-        if (this->name(driver) == name)
-            return  driver;
-
-    return nullptr;
-}
-
-QString JackServer::name(jackctl_driver_t *driver) const
-{
-    return this->jackctl_driver_get_name(driver);
-}
-
-bool JackServer::switchMaster(jackctl_driver_t *driver)
-{
-    return this->jackctl_server_switch_master(this->m_server, driver);
-}
-
-QList<jackctl_parameter_t *> JackServer::parameters() const
-{
-    QList<jackctl_parameter_t *> parametersList;
-    auto parameters = this->jackctl_server_get_parameters(this->m_server);
-
-    for (auto parameter = parameters; parameter;  parameter = parameter->next)
-        parametersList << reinterpret_cast<jackctl_parameter_t *>(parameter->data);
-
-    return parametersList;
-}
-
-QList<jackctl_parameter_t *> JackServer::parameters(jackctl_driver_t *driver) const
-{
-    QList<jackctl_parameter_t *> parametersList;
-    auto parameters = this->jackctl_driver_get_parameters(driver);
-
-    for (auto parameter = parameters; parameter;  parameter = parameter->next)
-        parametersList << reinterpret_cast<jackctl_parameter_t *>(parameter->data);
-
-    return parametersList;
-}
-
-QStringList JackServer::parametersByName() const
-{
-    QStringList parameters;
-
-    for (auto &parameter: this->parameters())
-        parameters << this->name(parameter);
-
-    return parameters;
-}
-
-QStringList JackServer::parametersByName(jackctl_driver_t *driver) const
-{
-    QStringList parameters;
-
-    for (auto &parameter: this->parameters(driver))
-        parameters << this->name(parameter);
-
-    return parameters;
-}
-
-jackctl_parameter_t *JackServer::parameterByName(const QString &name) const
-{
-    for (auto &parameter: this->parameters())
-        if (this->name(parameter) == name)
-            return  parameter;
-
-    return nullptr;
-}
-
-jackctl_parameter_t *JackServer::parameterByName(jackctl_driver_t *driver,
-                                                 const QString &name) const
-{
-    for (auto &parameter: this->parameters(driver))
-        if (this->name(parameter) == name)
-            return  parameter;
-
-    return nullptr;
-}
-
-QString JackServer::name(jackctl_parameter_t *parameter) const
-{
-    return QString(this->jackctl_parameter_get_name(parameter));
-}
-
-QString JackServer::description(jackctl_parameter_t *parameter) const
-{
-    return QString(this->jackctl_parameter_get_short_description(parameter));
-}
-
-QString JackServer::longDescription(jackctl_parameter_t *parameter) const
-{
-    return QString(this->jackctl_parameter_get_long_description(parameter));
-}
-
-bool JackServer::isSet(jackctl_parameter_t *parameter) const
-{
-    return jackctl_parameter_is_set(parameter);
-}
-
-QVariant JackServer::value(jackctl_parameter_t *parameter,
-                           bool defaultValue) const
-{
-    auto value = defaultValue?
-                     this->jackctl_parameter_get_default_value(parameter):
-                     this->jackctl_parameter_get_value(parameter);
-
-    switch (this->jackctl_parameter_get_type(parameter)) {
-    case JackParamInt:
-        return QVariant(value.i);
-    case JackParamUInt:
-        return QVariant(value.ui);
-    case JackParamChar:
-        return QVariant(value.c);
-    case JackParamString:
-        return QVariant(value.str);
-    case JackParamBool:
-        return QVariant(value.b);
-    }
-
-    return QVariant();
-}
-
-bool JackServer::setValue(jackctl_parameter_t *parameter, const QVariant &value)
-{
-    jackctl_parameter_value_t jvalue = {};
-
-    switch (this->jackctl_parameter_get_type(parameter)) {
-    case JackParamInt:
-        jvalue.i = value.value<decltype(jvalue.i)>();
-
-        break;
-    case JackParamUInt:
-        jvalue.ui = value.value<decltype(jvalue.ui)>();
-
-        break;
-    case JackParamChar:
-        jvalue.c = value.value<decltype(jvalue.c)>();
-
-        break;
-    case JackParamString: {
-        auto str = value.toString();
-        memcpy(jvalue.str,
-               str.toStdString().c_str(),
-               size_t(std::min(str.size(), JACK_PARAM_STRING_MAX)));
-
-        break;
-    }
-    case JackParamBool:
-        jvalue.b = value.toBool();
-
-        break;
-    }
-
-    return this->jackctl_parameter_set_value(parameter, &jvalue);
-}
-
-bool JackServer::resetValue(jackctl_parameter_t *parameter)
-{
-    return this->jackctl_parameter_reset(parameter);
-}
-
-jackctl_server_t *JackServer::jackctl_server_create(on_device_acquire_t on_device_acquire,
-                                                    on_device_release_t on_device_release) const
-{
-    if (this->m_jackctl_server_create)
-        return this->m_jackctl_server_create(on_device_acquire, on_device_release);
-
-    return nullptr;
-}
-
-void JackServer::jackctl_server_destroy(jackctl_server_t *server) const
-{
-    if (m_jackctl_server_destroy)
-        this->m_jackctl_server_destroy(server);
-}
-
-bool JackServer::jackctl_server_start(jackctl_server_t *server,
-                                      jackctl_driver_t *driver) const
-{
-    if (this->m_jackctl_server_start)
-        return this->m_jackctl_server_start(server, driver);
-
-    return false;
-}
-
-bool JackServer::jackctl_server_stop(jackctl_server_t *server) const
-{
-    if (this->m_jackctl_server_stop)
-        return this->m_jackctl_server_stop(server);
-
-    return true;
-}
-
-const JSList *JackServer::jackctl_server_get_drivers_list(jackctl_server_t *server) const
-{
-    if (this->m_jackctl_server_get_drivers_list)
-        return this->m_jackctl_server_get_drivers_list(server);
-
-    return nullptr;
-}
-
-const JSList *JackServer::jackctl_server_get_parameters(jackctl_server_t *server) const
-{
-    if (this->m_jackctl_server_get_parameters)
-        return this->m_jackctl_server_get_parameters(server);
-
-    return nullptr;
-}
-
-bool JackServer::jackctl_server_switch_master(jackctl_server_t *server,
-                                              jackctl_driver_t *driver) const
-{
-    if (this->m_jackctl_server_switch_master)
-        return this->m_jackctl_server_switch_master(server, driver);
-
-    return false;
-}
-
-const char *JackServer::jackctl_driver_get_name(jackctl_driver_t *driver) const
-{
-    if (this->m_jackctl_driver_get_name)
-        return this->m_jackctl_driver_get_name(driver);
-
-    return nullptr;
-}
-
-const JSList *JackServer::jackctl_driver_get_parameters(jackctl_driver_t *driver) const
-{
-    if (this->m_jackctl_driver_get_parameters)
-        return this->m_jackctl_driver_get_parameters(driver);
-
-    return nullptr;
-}
-
-const char *JackServer::jackctl_parameter_get_name(jackctl_parameter_t *parameter) const
-{
-    if (this->m_jackctl_parameter_get_name)
-        return this->m_jackctl_parameter_get_name(parameter);
-
-    return nullptr;
-}
-
-const char *JackServer::jackctl_parameter_get_short_description(jackctl_parameter_t *parameter) const
-{
-    if (this->m_jackctl_parameter_get_short_description)
-        return this->m_jackctl_parameter_get_short_description(parameter);
-
-    return nullptr;
-}
-
-const char *JackServer::jackctl_parameter_get_long_description(jackctl_parameter_t *parameter) const
-{
-    if (this->m_jackctl_parameter_get_long_description)
-        return this->m_jackctl_parameter_get_long_description(parameter);
-
-    return nullptr;
-}
-
-jackctl_param_type_t JackServer::jackctl_parameter_get_type(jackctl_parameter_t *parameter) const
-{
-    if (this->m_jackctl_parameter_get_type)
-        return this->m_jackctl_parameter_get_type(parameter);
-
-    return jackctl_param_type_t(0);
-}
-
-bool JackServer::jackctl_parameter_is_set(jackctl_parameter_t *parameter) const
-{
-    if (this->m_jackctl_parameter_is_set)
-        return this->m_jackctl_parameter_is_set(parameter);
-
-    return false;
-}
-
-bool JackServer::jackctl_parameter_reset(jackctl_parameter_t *parameter) const
-{
-    if (this->m_jackctl_parameter_reset)
-        return this->m_jackctl_parameter_reset(parameter);
-
-    return false;
-}
-
-jackctl_parameter_value_t JackServer::jackctl_parameter_get_value(jackctl_parameter_t *parameter) const
-{
-    if (this->m_jackctl_parameter_get_value)
-        return this->m_jackctl_parameter_get_value(parameter);
-
-    return {};
-}
-
-bool JackServer::jackctl_parameter_set_value(jackctl_parameter_t *parameter,
-                                             const jackctl_parameter_value_t *value_ptr) const
-{
-    if (this->m_jackctl_parameter_set_value)
-        return this->m_jackctl_parameter_set_value(parameter, value_ptr);
-
-    return false;
-}
-
-jackctl_parameter_value_t JackServer::jackctl_parameter_get_default_value(jackctl_parameter_t *parameter) const
-{
-    if (this->m_jackctl_parameter_get_default_value)
-        return this->m_jackctl_parameter_get_default_value(parameter);
-
-    return {};
-}
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/jack/src/jackserver.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef JACKSERVER_H
-#define JACKSERVER_H
-
-#include <QVariant>
-#include <QLibrary>
-
-#include "jackservertypedefs.h"
-
-#define DECL_FUNC(ret, func, ...) \
-    private: \
-        typedef ret func##_t(__VA_ARGS__); \
-        ret func(__VA_ARGS__) const; \
-        func##_t *m_##func;
-
-#define LOAD_FUNC(library, func) \
-    m_##func = reinterpret_cast<func##_t *>(library.resolve(#func))
-
-using on_device_acquire_t = bool (*)(const char *device_name);
-using on_device_release_t = void (*)(const char *device_name);
-
-class JackServer: public QObject
-{
-    Q_OBJECT
-
-    public:
-        JackServer(on_device_acquire_t onDeviceAcquire=nullptr,
-                   on_device_release_t onDeviceRelease=nullptr,
-                   QObject *parent=nullptr);
-        ~JackServer();
-
-        Q_INVOKABLE bool start(jackctl_driver_t *driver);
-        Q_INVOKABLE bool start(const QString &driver);
-        Q_INVOKABLE bool stop();
-        Q_INVOKABLE QList<jackctl_driver_t *> drivers() const;
-        Q_INVOKABLE QStringList driversByName() const;
-        Q_INVOKABLE jackctl_driver_t *driverByName(const QString &name) const;
-        Q_INVOKABLE QString name(jackctl_driver_t *driver) const;
-        Q_INVOKABLE bool switchMaster(jackctl_driver_t *driver);
-        Q_INVOKABLE QList<jackctl_parameter_t *> parameters() const;
-        Q_INVOKABLE QList<jackctl_parameter_t *> parameters(jackctl_driver_t *driver) const;
-        Q_INVOKABLE QStringList parametersByName() const;
-        Q_INVOKABLE QStringList parametersByName(jackctl_driver_t *driver) const;
-        Q_INVOKABLE jackctl_parameter_t *parameterByName(const QString &name) const;
-        Q_INVOKABLE jackctl_parameter_t *parameterByName(jackctl_driver_t *driver,
-                                                         const QString &name) const;
-        Q_INVOKABLE QString name(jackctl_parameter_t *parameter) const;
-        Q_INVOKABLE QString description(jackctl_parameter_t *parameter) const;
-        Q_INVOKABLE QString longDescription(jackctl_parameter_t *parameter) const;
-        Q_INVOKABLE bool isSet(jackctl_parameter_t *parameter) const;
-        Q_INVOKABLE QVariant value(jackctl_parameter_t *parameter,
-                                   bool defaultValue=false) const;
-        Q_INVOKABLE bool setValue(jackctl_parameter_t *parameter,
-                                  const QVariant &value);
-        Q_INVOKABLE bool resetValue(jackctl_parameter_t *parameter);
-
-    private:
-        QLibrary m_library;
-        jackctl_server_t *m_server;
-
-        DECL_FUNC(jackctl_server_t *,
-                  jackctl_server_create,
-                  on_device_acquire_t on_device_acquire,
-                  on_device_release_t on_device_release)
-        DECL_FUNC(void,
-                  jackctl_server_destroy,
-                  jackctl_server_t *server)
-        DECL_FUNC(bool,
-                  jackctl_server_start,
-                  jackctl_server_t *server,
-                  jackctl_driver_t *driver)
-        DECL_FUNC(bool,
-                  jackctl_server_stop,
-                  jackctl_server_t *server)
-        DECL_FUNC(const JSList *,
-                  jackctl_server_get_drivers_list,
-                  jackctl_server_t *server)
-        DECL_FUNC(const JSList *,
-                  jackctl_server_get_parameters,
-                  jackctl_server_t *server)
-        DECL_FUNC(bool,
-                  jackctl_server_switch_master,
-                  jackctl_server_t *server,
-                  jackctl_driver_t *driver)
-        DECL_FUNC(const char *,
-                  jackctl_driver_get_name,
-                  jackctl_driver_t *driver)
-        DECL_FUNC(const JSList *,
-                  jackctl_driver_get_parameters,
-                  jackctl_driver_t *driver)
-        DECL_FUNC(const char *,
-                  jackctl_parameter_get_name,
-                  jackctl_parameter_t *parameter)
-        DECL_FUNC(const char *,
-                  jackctl_parameter_get_short_description,
-                  jackctl_parameter_t *parameter)
-        DECL_FUNC(const char *,
-                  jackctl_parameter_get_long_description,
-                  jackctl_parameter_t *parameter)
-        DECL_FUNC(jackctl_param_type_t,
-                  jackctl_parameter_get_type,
-                  jackctl_parameter_t *parameter)
-        DECL_FUNC(bool,
-                  jackctl_parameter_is_set,
-                  jackctl_parameter_t *parameter)
-        DECL_FUNC(bool,
-                  jackctl_parameter_reset,
-                  jackctl_parameter_t *parameter)
-        DECL_FUNC(jackctl_parameter_value_t,
-                  jackctl_parameter_get_value,
-                  jackctl_parameter_t *parameter)
-        DECL_FUNC(bool,
-                  jackctl_parameter_set_value,
-                  jackctl_parameter_t *parameter,
-                  const jackctl_parameter_value_t *value_ptr)
-        DECL_FUNC(jackctl_parameter_value_t,
-                  jackctl_parameter_get_default_value,
-                  jackctl_parameter_t *parameter)
-};
-
-#endif // JACKSERVER_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/ndkaudio/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/ndkaudio/CMakeLists.txt
@@ -29,6 +29,11 @@ set(CMAKE_AUTORCC ON)
 
 set(QT_COMPONENTS
     Core)
+
+if (ANDROID)
+    list(APPEND QT_COMPONENTS AndroidExtras)
+endif ()
+
 find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS
              ${QT_COMPONENTS}
              REQUIRED)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/ndkaudio/src/audiodevndkaudio.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/ndkaudio/src/audiodevndkaudio.cpp
@@ -21,6 +21,11 @@
 #include <QVector>
 #include <QMutex>
 #include <QWaitCondition>
+
+#ifdef Q_OS_ANDROID
+#include <QtAndroid>
+#endif
+
 #include <akaudiopacket.h>
 #include <aaudio/AAudio.h>
 
@@ -52,6 +57,7 @@ class AudioDevNDKAudioPrivate
         static void errorCallback(AAudioStream *stream,
                                   void *userData,
                                   aaudio_result_t error);
+        static bool hasAudioPermissions();
         void updateDevices();
 };
 
@@ -283,8 +289,48 @@ void AudioDevNDKAudioPrivate::errorCallb
     Q_UNUSED(error)
 }
 
+bool AudioDevNDKAudioPrivate::hasAudioPermissions()
+{
+#ifdef Q_OS_ANDROID
+    static bool done = false;
+    static bool result = false;
+
+    if (done)
+        return result;
+
+    QStringList permissions {
+        "android.permission.CAPTURE_AUDIO_OUTPUT",
+        "android.permission.RECORD_AUDIO"
+    };
+    QStringList neededPermissions;
+
+    for (auto &permission: permissions)
+        if (QtAndroid::checkPermission(permission) == QtAndroid::PermissionResult::Denied)
+            neededPermissions << permission;
+
+    if (!neededPermissions.isEmpty()) {
+        auto results = QtAndroid::requestPermissionsSync(neededPermissions);
+
+        for (auto it = results.constBegin(); it != results.constEnd(); it++)
+            if (it.value() == QtAndroid::PermissionResult::Denied) {
+                done = true;
+
+                return false;
+            }
+    }
+
+    done = true;
+    result = true;
+#endif
+
+    return true;
+}
+
 void AudioDevNDKAudioPrivate::updateDevices()
 {
+    if (!this->hasAudioPermissions())
+        return;
+
     AAudioStreamBuilder *streamBuilder = nullptr;
 
     if (AAudio_createStreamBuilder(&streamBuilder) != AAUDIO_OK)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/ndkaudio/src/audiodevndkaudio.h
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/ndkaudio/src/audiodevndkaudio.h
@@ -32,20 +32,20 @@ class AudioDevNDKAudio: public AudioDev
         AudioDevNDKAudio(QObject *parent=nullptr);
         ~AudioDevNDKAudio();
 
-        Q_INVOKABLE QString error() const;
-        Q_INVOKABLE QString defaultInput();
-        Q_INVOKABLE QString defaultOutput();
-        Q_INVOKABLE QStringList inputs();
-        Q_INVOKABLE QStringList outputs();
-        Q_INVOKABLE QString description(const QString &device);
-        Q_INVOKABLE AkAudioCaps preferredFormat(const QString &device);
-        Q_INVOKABLE QList<AkAudioCaps::SampleFormat> supportedFormats(const QString &device);
-        Q_INVOKABLE QList<AkAudioCaps::ChannelLayout> supportedChannelLayouts(const QString &device);
-        Q_INVOKABLE QList<int> supportedSampleRates(const QString &device);
-        Q_INVOKABLE bool init(const QString &device, const AkAudioCaps &caps);
-        Q_INVOKABLE QByteArray read();
-        Q_INVOKABLE bool write(const AkAudioPacket &frame);
-        Q_INVOKABLE bool uninit();
+        Q_INVOKABLE QString error() const override;
+        Q_INVOKABLE QString defaultInput() override;
+        Q_INVOKABLE QString defaultOutput() override;
+        Q_INVOKABLE QStringList inputs() override;
+        Q_INVOKABLE QStringList outputs() override;
+        Q_INVOKABLE QString description(const QString &device) override;
+        Q_INVOKABLE AkAudioCaps preferredFormat(const QString &device) override;
+        Q_INVOKABLE QList<AkAudioCaps::SampleFormat> supportedFormats(const QString &device) override;
+        Q_INVOKABLE QList<AkAudioCaps::ChannelLayout> supportedChannelLayouts(const QString &device) override;
+        Q_INVOKABLE QList<int> supportedSampleRates(const QString &device) override;
+        Q_INVOKABLE bool init(const QString &device, const AkAudioCaps &caps) override;
+        Q_INVOKABLE QByteArray read() override;
+        Q_INVOKABLE bool write(const AkAudioPacket &frame) override;
+        Q_INVOKABLE bool uninit() override;
 
     private:
         AudioDevNDKAudioPrivate *d;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/opensl/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/opensl/CMakeLists.txt
@@ -29,6 +29,11 @@ set(CMAKE_AUTORCC ON)
 
 set(QT_COMPONENTS
     Core)
+
+if (ANDROID)
+    list(APPEND QT_COMPONENTS AndroidExtras)
+endif ()
+
 find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS
              ${QT_COMPONENTS}
              REQUIRED)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/opensl/src/audiodevopensl.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/opensl/src/audiodevopensl.cpp
@@ -17,10 +17,16 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
+#include <QDebug>
 #include <QMap>
-#include <QVector>
 #include <QMutex>
+#include <QVector>
 #include <QWaitCondition>
+
+#ifdef Q_OS_ANDROID
+#include <QtAndroid>
+#endif
+
 #include <akaudiopacket.h>
 #include <SLES/OpenSLES_Android.h>
 
@@ -28,6 +34,37 @@
 
 #define N_BUFFERS 4
 
+using SlErrorToStrMap = QMap<SLresult, QString>;
+
+inline const SlErrorToStrMap initSlErrorToStrMap()
+{
+    const SlErrorToStrMap slErrorToStrMap {
+        {SL_RESULT_SUCCESS               , "SL_RESULT_SUCCESS"               },
+        {SL_RESULT_PRECONDITIONS_VIOLATED, "SL_RESULT_PRECONDITIONS_VIOLATED"},
+        {SL_RESULT_PARAMETER_INVALID     , "SL_RESULT_PARAMETER_INVALID"     },
+        {SL_RESULT_MEMORY_FAILURE        , "SL_RESULT_MEMORY_FAILURE"        },
+        {SL_RESULT_RESOURCE_ERROR        , "SL_RESULT_RESOURCE_ERROR"        },
+        {SL_RESULT_RESOURCE_LOST         , "SL_RESULT_RESOURCE_LOST"         },
+        {SL_RESULT_IO_ERROR              , "SL_RESULT_IO_ERROR"              },
+        {SL_RESULT_BUFFER_INSUFFICIENT   , "SL_RESULT_BUFFER_INSUFFICIENT"   },
+        {SL_RESULT_CONTENT_CORRUPTED     , "SL_RESULT_CONTENT_CORRUPTED"     },
+        {SL_RESULT_CONTENT_UNSUPPORTED   , "SL_RESULT_CONTENT_UNSUPPORTED"   },
+        {SL_RESULT_CONTENT_NOT_FOUND     , "SL_RESULT_CONTENT_NOT_FOUND"     },
+        {SL_RESULT_PERMISSION_DENIED     , "SL_RESULT_PERMISSION_DENIED"     },
+        {SL_RESULT_FEATURE_UNSUPPORTED   , "SL_RESULT_FEATURE_UNSUPPORTED"   },
+        {SL_RESULT_INTERNAL_ERROR        , "SL_RESULT_INTERNAL_ERROR"        },
+        {SL_RESULT_UNKNOWN_ERROR         , "SL_RESULT_UNKNOWN_ERROR"         },
+        {SL_RESULT_OPERATION_ABORTED     , "SL_RESULT_OPERATION_ABORTED"     },
+        {SL_RESULT_CONTROL_LOST          , "SL_RESULT_CONTROL_LOST"          },
+    };
+
+    return slErrorToStrMap;
+}
+
+Q_GLOBAL_STATIC_WITH_ARGS(SlErrorToStrMap,
+                          slErrorToStrMap,
+                          (initSlErrorToStrMap()))
+
 class AudioDevOpenSLPrivate
 {
     public:
@@ -63,6 +100,7 @@ class AudioDevOpenSLPrivate
         static SLuint32 channelMaskFromLayout(AkAudioCaps::ChannelLayout layout);
         static void sampleProcess(SLAndroidSimpleBufferQueueItf bufferQueue,
                                   void *context);
+        static bool hasAudioPermissions();
         void updateDevices();
 };
 
@@ -138,7 +176,6 @@ bool AudioDevOpenSL::init(const QString
 
     this->d->m_samples = qMax(this->latency() * caps.rate() / 1000, 1);
     this->d->m_curCaps = caps;
-    this->d->m_curCaps.setSamples(this->latency() * caps.rate() / 1000);
 
     if (device == ":openslinput:") {
         this->d->m_audioRecorder =
@@ -264,7 +301,7 @@ bool AudioDevOpenSL::write(const AkAudio
     if (this->d->m_audioBuffers.size() >= N_BUFFERS)
         this->d->m_bufferReady.wait(&this->d->m_mutex);
 
-    this->d->m_audioBuffers << packet.buffer();
+    this->d->m_audioBuffers << QByteArray(packet.constData(), packet.size());
     this->d->m_mutex.unlock();
 
     return true;
@@ -321,18 +358,26 @@ AudioDevOpenSLPrivate::AudioDevOpenSLPri
 SLObjectItf AudioDevOpenSLPrivate::createEngine()
 {
     SLObjectItf engineObject = nullptr;
+    auto result = slCreateEngine(&engineObject,
+                                 0,
+                                 nullptr,
+                                 0,
+                                 nullptr,
+                                 nullptr);
+
+    if (result != SL_RESULT_SUCCESS) {
+        qInfo() << "Failed to create OpenSL engine:"
+                << slErrorToStrMap->value(result);
 
-    if (slCreateEngine(&engineObject,
-                       0,
-                       nullptr,
-                       0,
-                       nullptr,
-                       nullptr) != SL_RESULT_SUCCESS)
         return nullptr;
+    }
+
+    result = (*engineObject)->Realize(engineObject, SL_BOOLEAN_FALSE);
 
-    if ((*engineObject)->Realize(engineObject,
-                                 SL_BOOLEAN_FALSE) != SL_RESULT_SUCCESS) {
+    if (result != SL_RESULT_SUCCESS) {
         (*engineObject)->Destroy(engineObject);
+        qInfo() << "Can't realize OpenSL engine:"
+                << slErrorToStrMap->value(result);
 
         return nullptr;
     }
@@ -343,24 +388,37 @@ SLObjectItf AudioDevOpenSLPrivate::creat
 SLObjectItf AudioDevOpenSLPrivate::createOutputMix(SLObjectItf engine)
 {
     SLEngineItf engineInterface = nullptr;
+    auto result = (*engine)->GetInterface(engine,
+                                          SL_IID_ENGINE,
+                                          &engineInterface);
+
+    if (result != SL_RESULT_SUCCESS) {
+        qInfo() << "Can't get engine interface:"
+                << slErrorToStrMap->value(result);
 
-    if ((*engine)->GetInterface(engine,
-                                SL_IID_ENGINE,
-                                &engineInterface) != SL_RESULT_SUCCESS)
         return nullptr;
+    }
 
     SLObjectItf outputMixObject = nullptr;
+    result = (*engineInterface)->CreateOutputMix(engineInterface,
+                                                 &outputMixObject,
+                                                 0,
+                                                 nullptr,
+                                                 nullptr);
+
+    if (result != SL_RESULT_SUCCESS) {
+        qInfo() << "Can't create OutputMix:"
+                << slErrorToStrMap->value(result);
 
-    if ((*engineInterface)->CreateOutputMix(engineInterface,
-                                            &outputMixObject,
-                                            0,
-                                            nullptr,
-                                            nullptr) != SL_RESULT_SUCCESS)
         return nullptr;
+    }
 
-    if ((*outputMixObject)->Realize(outputMixObject,
-                                    SL_BOOLEAN_FALSE) != SL_RESULT_SUCCESS) {
+    result = (*outputMixObject)->Realize(outputMixObject, SL_BOOLEAN_FALSE);
+
+    if (result != SL_RESULT_SUCCESS) {
         (*outputMixObject)->Destroy(outputMixObject);
+        qInfo() << "Can't realize OutputMix:"
+                << slErrorToStrMap->value(result);
 
         return nullptr;
     }
@@ -376,11 +434,16 @@ SLObjectItf AudioDevOpenSLPrivate::creat
         return nullptr;
 
     SLEngineItf engineInterface = nullptr;
+    auto result = (*engine)->GetInterface(engine,
+                                          SL_IID_ENGINE,
+                                          &engineInterface);
+
+    if (result != SL_RESULT_SUCCESS) {
+        qInfo() << "Can't get engine interface:"
+                << slErrorToStrMap->value(result);
 
-    if ((*engine)->GetInterface(engine,
-                                SL_IID_ENGINE,
-                                &engineInterface) != SL_RESULT_SUCCESS)
         return nullptr;
+    }
 
     SLObjectItf audioPlayerObject = nullptr;
 
@@ -407,19 +470,27 @@ SLObjectItf AudioDevOpenSLPrivate::creat
     };
     auto requiredKeys = interfaces.keys().toVector();
     auto requiredValues = interfaces.values().toVector();
+    result = (*engineInterface)->CreateAudioPlayer(engineInterface,
+                                                   &audioPlayerObject,
+                                                   &dataSource,
+                                                   &dataSink,
+                                                   SLuint32(interfaces.size()),
+                                                   requiredKeys.data(),
+                                                   requiredValues.data());
+
+    if (result != SL_RESULT_SUCCESS) {
+        qInfo() << "Can't create AudioPlayer:"
+                << slErrorToStrMap->value(result);
 
-    if ((*engineInterface)->CreateAudioPlayer(engineInterface,
-                                              &audioPlayerObject,
-                                              &dataSource,
-                                              &dataSink,
-                                              SLuint32(interfaces.size()),
-                                              requiredKeys.data(),
-                                              requiredValues.data()) != SL_RESULT_SUCCESS)
         return nullptr;
+    }
+
+    result = (*audioPlayerObject)->Realize(audioPlayerObject, SL_BOOLEAN_FALSE);
 
-    if ((*audioPlayerObject)->Realize(audioPlayerObject,
-                                      SL_BOOLEAN_FALSE) != SL_RESULT_SUCCESS) {
+    if (result != SL_RESULT_SUCCESS) {
         (*audioPlayerObject)->Destroy(audioPlayerObject);
+        qInfo() << "Can't realize AudioPlayer:"
+                << slErrorToStrMap->value(result);
 
         return nullptr;
     }
@@ -431,11 +502,16 @@ SLObjectItf AudioDevOpenSLPrivate::creat
                                                        const AkAudioCaps &caps)
 {
     SLEngineItf engineInterface = nullptr;
+    auto result = (*engine)->GetInterface(engine,
+                                          SL_IID_ENGINE,
+                                          &engineInterface);
+
+    if (result != SL_RESULT_SUCCESS) {
+        qInfo() << "Can't get engine interface:"
+                << slErrorToStrMap->value(result);
 
-    if ((*engine)->GetInterface(engine,
-                                SL_IID_ENGINE,
-                                &engineInterface) != SL_RESULT_SUCCESS)
         return nullptr;
+    }
 
     SLObjectItf audioRecorderObject = nullptr;
     SLDataLocator_IODevice ioDeviceLocator {
@@ -463,19 +539,28 @@ SLObjectItf AudioDevOpenSLPrivate::creat
     };
     auto requiredKeys = interfaces.keys().toVector();
     auto requiredValues = interfaces.values().toVector();
+    result = (*engineInterface)->CreateAudioRecorder(engineInterface,
+                                                     &audioRecorderObject,
+                                                     &dataSource,
+                                                     &dataSink,
+                                                     SLuint32(interfaces.size()),
+                                                     requiredKeys.data(),
+                                                     requiredValues.data());
+
+    if (result != SL_RESULT_SUCCESS) {
+        qInfo() << "Can't create AudioRecorder:"
+                << slErrorToStrMap->value(result);
 
-    if ((*engineInterface)->CreateAudioRecorder(engineInterface,
-                                                &audioRecorderObject,
-                                                &dataSource,
-                                                &dataSink,
-                                                SLuint32(interfaces.size()),
-                                                requiredKeys.data(),
-                                                requiredValues.data()) != SL_RESULT_SUCCESS)
         return nullptr;
+    }
+
+    result = (*audioRecorderObject)->Realize(audioRecorderObject,
+                                             SL_BOOLEAN_FALSE);
 
-    if ((*audioRecorderObject)->Realize(audioRecorderObject,
-                                        SL_BOOLEAN_FALSE) != SL_RESULT_SUCCESS) {
+    if (result != SL_RESULT_SUCCESS) {
         (*audioRecorderObject)->Destroy(audioRecorderObject);
+        qInfo() << "Can't realize AudioRecorder:"
+                << slErrorToStrMap->value(result);
 
         return nullptr;
     }
@@ -614,8 +699,48 @@ void AudioDevOpenSLPrivate::sampleProces
     }
 }
 
+bool AudioDevOpenSLPrivate::hasAudioPermissions()
+{
+#ifdef Q_OS_ANDROID
+    static bool done = false;
+    static bool result = false;
+
+    if (done)
+        return result;
+
+    QStringList permissions {
+        "android.permission.CAPTURE_AUDIO_OUTPUT",
+        "android.permission.RECORD_AUDIO"
+    };
+    QStringList neededPermissions;
+
+    for (auto &permission: permissions)
+        if (QtAndroid::checkPermission(permission) == QtAndroid::PermissionResult::Denied)
+            neededPermissions << permission;
+
+    if (!neededPermissions.isEmpty()) {
+        auto results = QtAndroid::requestPermissionsSync(neededPermissions);
+
+        for (auto it = results.constBegin(); it != results.constEnd(); it++)
+            if (it.value() == QtAndroid::PermissionResult::Denied) {
+                done = true;
+
+                return false;
+            }
+    }
+
+    done = true;
+    result = true;
+#endif
+
+    return true;
+}
+
 void AudioDevOpenSLPrivate::updateDevices()
 {
+    if (!this->hasAudioPermissions())
+        return;
+
     auto engine = AudioDevOpenSLPrivate::createEngine();
 
     if (!engine)
@@ -657,7 +782,7 @@ void AudioDevOpenSLPrivate::updateDevice
     for (auto &format: sampleFormats)
         for (auto &layout: layouts)
             for (auto &rate: sampleRates) {
-                AkAudioCaps caps(format, layout, rate);
+                AkAudioCaps caps(format, layout, false, rate);
                 auto audioRecorder =
                         AudioDevOpenSLPrivate::createAudioRecorder(engine, caps);
 
@@ -683,6 +808,7 @@ void AudioDevOpenSLPrivate::updateDevice
         this->m_preferredCaps[":openslinput:"] = {
             AkAudioCaps::SampleFormat_s16,
             AkAudioCaps::Layout_mono,
+            false,
             44100,
         };
     }
@@ -694,7 +820,7 @@ void AudioDevOpenSLPrivate::updateDevice
         for (auto &format: sampleFormats)
             for (auto &layout: layouts)
                 for (auto &rate: sampleRates) {
-                    AkAudioCaps caps(format, layout, rate);
+                    AkAudioCaps caps(format, layout, false, rate);
                     auto audioPlayer =
                             AudioDevOpenSLPrivate::createAudioPlayer(engine,
                                                                      outputMix,
@@ -722,6 +848,7 @@ void AudioDevOpenSLPrivate::updateDevice
             this->m_preferredCaps[":opensloutput:"] = {
                 AkAudioCaps::SampleFormat_s16,
                 AkAudioCaps::Layout_stereo,
+                false,
                 44100,
             };
         }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/opensl/src/audiodevopensl.h
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/opensl/src/audiodevopensl.h
@@ -32,20 +32,20 @@ class AudioDevOpenSL: public AudioDev
         AudioDevOpenSL(QObject *parent=nullptr);
         ~AudioDevOpenSL();
 
-        Q_INVOKABLE QString error() const;
-        Q_INVOKABLE QString defaultInput();
-        Q_INVOKABLE QString defaultOutput();
-        Q_INVOKABLE QStringList inputs();
-        Q_INVOKABLE QStringList outputs();
-        Q_INVOKABLE QString description(const QString &device);
-        Q_INVOKABLE AkAudioCaps preferredFormat(const QString &device);
-        Q_INVOKABLE QList<AkAudioCaps::SampleFormat> supportedFormats(const QString &device);
-        Q_INVOKABLE QList<AkAudioCaps::ChannelLayout> supportedChannelLayouts(const QString &device);
-        Q_INVOKABLE QList<int> supportedSampleRates(const QString &device);
-        Q_INVOKABLE bool init(const QString &device, const AkAudioCaps &caps);
-        Q_INVOKABLE QByteArray read();
-        Q_INVOKABLE bool write(const AkAudioPacket &frame);
-        Q_INVOKABLE bool uninit();
+        Q_INVOKABLE QString error() const override;
+        Q_INVOKABLE QString defaultInput() override;
+        Q_INVOKABLE QString defaultOutput() override;
+        Q_INVOKABLE QStringList inputs() override;
+        Q_INVOKABLE QStringList outputs() override;
+        Q_INVOKABLE QString description(const QString &device) override;
+        Q_INVOKABLE AkAudioCaps preferredFormat(const QString &device) override;
+        Q_INVOKABLE QList<AkAudioCaps::SampleFormat> supportedFormats(const QString &device) override;
+        Q_INVOKABLE QList<AkAudioCaps::ChannelLayout> supportedChannelLayouts(const QString &device) override;
+        Q_INVOKABLE QList<int> supportedSampleRates(const QString &device) override;
+        Q_INVOKABLE bool init(const QString &device, const AkAudioCaps &caps) override;
+        Q_INVOKABLE QByteArray read() override;
+        Q_INVOKABLE bool write(const AkAudioPacket &frame) override;
+        Q_INVOKABLE bool uninit() override;
 
     private:
         AudioDevOpenSLPrivate *d;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/pulseaudio/src/audiodevpulseaudio.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/pulseaudio/src/audiodevpulseaudio.cpp
@@ -32,22 +32,18 @@
 
 #include "audiodevpulseaudio.h"
 
-using SampleFormatMap = QMap<AkAudioCaps::SampleFormat, pa_sample_format_t>;
+using SampleFormatMap = QMap<pa_sample_format_t, AkAudioCaps::SampleFormat>;
 
 inline SampleFormatMap initSampleFormatMap()
 {
-    SampleFormatMap sampleFormat = {
-        {AkAudioCaps::SampleFormat_u8 , PA_SAMPLE_U8       },
-
-#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
-        {AkAudioCaps::SampleFormat_s16, PA_SAMPLE_S16LE    },
-        {AkAudioCaps::SampleFormat_s32, PA_SAMPLE_S32LE    },
-        {AkAudioCaps::SampleFormat_flt, PA_SAMPLE_FLOAT32LE},
-#else
-        {AkAudioCaps::SampleFormat_s16, PA_SAMPLE_S16BE    },
-        {AkAudioCaps::SampleFormat_s32, PA_SAMPLE_S32BE    },
-        {AkAudioCaps::SampleFormat_flt, PA_SAMPLE_FLOAT32BE},
-#endif
+    SampleFormatMap sampleFormat {
+        {PA_SAMPLE_U8       , AkAudioCaps::SampleFormat_u8   },
+        {PA_SAMPLE_S16BE    , AkAudioCaps::SampleFormat_s16be},
+        {PA_SAMPLE_S16LE    , AkAudioCaps::SampleFormat_s16le},
+        {PA_SAMPLE_S32BE    , AkAudioCaps::SampleFormat_s32be},
+        {PA_SAMPLE_S32LE    , AkAudioCaps::SampleFormat_s32le},
+        {PA_SAMPLE_FLOAT32BE, AkAudioCaps::SampleFormat_fltbe},
+        {PA_SAMPLE_FLOAT32LE, AkAudioCaps::SampleFormat_fltle},
     };
 
     return sampleFormat;
@@ -70,6 +66,7 @@ class AudioDevPulseAudioPrivate
         QMap<QString, AkAudioCaps> m_pinCapsMap;
         QMap<QString, QString> m_pinDescriptionMap;
         QMutex m_mutex;
+        QMutex m_streamMutex;
         int m_samples {0};
         int m_curBps {0};
         int m_curChannels {0};
@@ -162,7 +159,7 @@ AudioDevPulseAudio::AudioDevPulseAudio(Q
         return;
     }
 
-    static const QList<pa_context_state_t> expectedStates = {
+    static const QList<pa_context_state_t> expectedStates {
         PA_CONTEXT_READY,
         PA_CONTEXT_FAILED,
         PA_CONTEXT_TERMINATED
@@ -262,7 +259,7 @@ QString AudioDevPulseAudio::error() cons
 QString AudioDevPulseAudio::defaultInput()
 {
     this->d->m_mutex.lock();
-    QString defaultSource = this->d->m_defaultSource;
+    auto defaultSource = this->d->m_defaultSource;
     this->d->m_mutex.unlock();
 
     return defaultSource;
@@ -271,7 +268,7 @@ QString AudioDevPulseAudio::defaultInput
 QString AudioDevPulseAudio::defaultOutput()
 {
     this->d->m_mutex.lock();
-    QString defaultSink = this->d->m_defaultSink;
+    auto defaultSink = this->d->m_defaultSink;
     this->d->m_mutex.unlock();
 
     return defaultSink;
@@ -280,7 +277,7 @@ QString AudioDevPulseAudio::defaultOutpu
 QStringList AudioDevPulseAudio::inputs()
 {
     this->d->m_mutex.lock();
-    QStringList inputs = this->d->m_sources.values();
+    auto inputs = this->d->m_sources.values();
     this->d->m_mutex.unlock();
 
     return inputs;
@@ -289,7 +286,7 @@ QStringList AudioDevPulseAudio::inputs()
 QStringList AudioDevPulseAudio::outputs()
 {
     this->d->m_mutex.lock();
-    QStringList outputs = this->d->m_sinks.values();
+    auto outputs = this->d->m_sinks.values();
     this->d->m_mutex.unlock();
 
     return outputs;
@@ -298,7 +295,7 @@ QStringList AudioDevPulseAudio::outputs(
 QString AudioDevPulseAudio::description(const QString &device)
 {
     this->d->m_mutex.lock();
-    QString description = this->d->m_pinDescriptionMap.value(device);
+    auto description = this->d->m_pinDescriptionMap.value(device);
     this->d->m_mutex.unlock();
 
     return description;
@@ -307,7 +304,7 @@ QString AudioDevPulseAudio::description(
 AkAudioCaps AudioDevPulseAudio::preferredFormat(const QString &device)
 {
     this->d->m_mutex.lock();
-    AkAudioCaps caps = this->d->m_pinCapsMap.value(device);
+    auto caps = this->d->m_pinCapsMap.value(device);
     this->d->m_mutex.unlock();
 
     return caps;
@@ -317,7 +314,7 @@ QList<AkAudioCaps::SampleFormat> AudioDe
 {
     Q_UNUSED(device)
 
-    return sampleFormats->keys();
+    return sampleFormats->values();
 }
 
 QList<AkAudioCaps::ChannelLayout> AudioDevPulseAudio::supportedChannelLayouts(const QString &device)
@@ -336,10 +333,12 @@ QList<int> AudioDevPulseAudio::supported
 
 bool AudioDevPulseAudio::init(const QString &device, const AkAudioCaps &caps)
 {
+   this->d->m_streamMutex.lock();
+
     int error;
 
     pa_sample_spec ss;
-    ss.format = sampleFormats->value(caps.format());
+    ss.format = sampleFormats->key(caps.format());
     ss.channels = uint8_t(caps.channels());
     ss.rate = uint32_t(caps.rate());
     this->d->m_curBps = AkAudioCaps::bitsPerSample(caps.format()) / 8;
@@ -364,20 +363,27 @@ bool AudioDevPulseAudio::init(const QStr
 
     if (!this->d->m_paSimple) {
         this->d->m_error = QString(pa_strerror(error));
+        this->d->m_streamMutex.unlock();
         emit this->errorChanged(this->d->m_error);
 
         return false;
     }
 
     this->d->m_samples = qMax(this->latency() * caps.rate() / 1000, 1);
+    this->d->m_streamMutex.unlock();
 
     return true;
 }
 
 QByteArray AudioDevPulseAudio::read()
 {
-    if (!this->d->m_paSimple)
+    this->d->m_streamMutex.lock();
+
+    if (!this->d->m_paSimple) {
+        this->d->m_streamMutex.unlock();
+
         return {};
+    }
 
     int error;
 
@@ -391,54 +397,75 @@ QByteArray AudioDevPulseAudio::read()
                        size_t(buffer.size()),
                        &error) < 0) {
         this->d->m_error = QString(pa_strerror(error));
+        this->d->m_streamMutex.unlock();
         emit this->errorChanged(this->d->m_error);
 
         return {};
     }
 
+    this->d->m_streamMutex.unlock();
+
     return buffer;
 }
 
 bool AudioDevPulseAudio::write(const AkAudioPacket &packet)
 {
-    if (!this->d->m_paSimple)
+    this->d->m_streamMutex.lock();
+
+    if (!this->d->m_paSimple) {
+        this->d->m_streamMutex.unlock();
+
         return false;
+    }
 
     int error;
 
     if (pa_simple_write(this->d->m_paSimple,
-                        packet.buffer().constData(),
-                        size_t(packet.buffer().size()),
+                        packet.constData(),
+                        packet.size(),
                         &error) < 0) {
         this->d->m_error = QString(pa_strerror(error));
+        this->d->m_streamMutex.unlock();
+        qDebug() << this->d->m_error;
         emit this->errorChanged(this->d->m_error);
 
         return false;
     }
 
+    this->d->m_streamMutex.unlock();
+
     return true;
 }
 
 bool AudioDevPulseAudio::uninit()
 {
+    QString errorStr;
     bool ok = true;
 
+    this->d->m_streamMutex.lock();
+
     if (this->d->m_paSimple) {
         int error;
 
         if (pa_simple_drain(this->d->m_paSimple, &error) < 0) {
-            this->d->m_error = QString(pa_strerror(error));
-            emit this->errorChanged(this->d->m_error);
+            errorStr = QString(pa_strerror(error));
             ok = false;
         }
 
         pa_simple_free(this->d->m_paSimple);
-    } else
+    } else {
         ok = false;
+    }
 
     this->d->m_paSimple = nullptr;
     this->d->m_curBps = 0;
     this->d->m_curChannels = 0;
+    this->d->m_streamMutex.unlock();
+
+    if (!errorStr.isEmpty()) {
+        this->d->m_error = errorStr;
+        emit this->errorChanged(this->d->m_error);
+    }
 
     return ok;
 }
@@ -490,24 +517,32 @@ void AudioDevPulseAudioPrivate::deviceUp
         switch (facility) {
         case PA_SUBSCRIPTION_EVENT_SINK: {
             audioDevice->d->m_mutex.lock();
-            QString device = audioDevice->d->m_sinks.value(index);
+
+            auto device = audioDevice->d->m_sinks.value(index);
             audioDevice->d->m_pinCapsMap.remove(device);
             audioDevice->d->m_pinDescriptionMap.remove(device);
             audioDevice->d->m_sinks.remove(index);
-            emit audioDevice->outputsChanged(audioDevice->d->m_sinks.values());
+            auto outputs = audioDevice->d->m_sinks.values();
+
             audioDevice->d->m_mutex.unlock();
 
+            emit audioDevice->outputsChanged(outputs);
+
             break;
         }
         case PA_SUBSCRIPTION_EVENT_SOURCE: {
             audioDevice->d->m_mutex.lock();
-            QString device = audioDevice->d->m_sources.value(index);
+
+            auto device = audioDevice->d->m_sources.value(index);
             audioDevice->d->m_pinCapsMap.remove(device);
             audioDevice->d->m_pinDescriptionMap.remove(device);
             audioDevice->d->m_sources.remove(index);
-            emit audioDevice->inputsChanged(audioDevice->d->m_sources.values());
+            auto sources = audioDevice->d->m_sources.values();
+
             audioDevice->d->m_mutex.unlock();
 
+            emit audioDevice->inputsChanged(sources);
+
             break;
         }
         default:
@@ -538,21 +573,29 @@ void AudioDevPulseAudioPrivate::serverIn
 
     // Get default input and output devices.
     auto audioDevice = static_cast<AudioDevPulseAudio *>(userdata);
+    bool defaultInputChanged = false;
+    bool defaultOutputChanged = false;
 
     audioDevice->d->m_mutex.lock();
 
     if (audioDevice->d->m_defaultSink != info->default_sink_name) {
         audioDevice->d->m_defaultSink = info->default_sink_name;
-        emit audioDevice->defaultOutputChanged(audioDevice->d->m_defaultSink);
+        defaultInputChanged = true;
     }
 
     if (audioDevice->d->m_defaultSource != info->default_source_name) {
         audioDevice->d->m_defaultSource = info->default_source_name;
-        emit audioDevice->defaultInputChanged(audioDevice->d->m_defaultSource);
+        defaultOutputChanged = true;
     }
 
     audioDevice->d->m_mutex.unlock();
 
+    if (defaultInputChanged)
+        emit audioDevice->defaultInputChanged(audioDevice->d->m_defaultSource);
+
+    if (defaultOutputChanged)
+        emit audioDevice->defaultOutputChanged(audioDevice->d->m_defaultSink);
+
     // Return as soon as possible.
     pa_threaded_mainloop_signal(audioDevice->d->m_mainLoop, 0);
 }
@@ -594,16 +637,17 @@ void AudioDevPulseAudioPrivate::sourceIn
                   info->name: info->description;
 
     audioDevice->d->m_pinCapsMap[info->name] =
-            AkAudioCaps(sampleFormats->key(info->sample_spec.format),
+            AkAudioCaps(sampleFormats->value(info->sample_spec.format),
                         AkAudioCaps::defaultChannelLayout(info->sample_spec.channels),
+                        false,
                         int(info->sample_spec.rate));
 
+    audioDevice->d->m_mutex.unlock();
+
     if (sources != audioDevice->d->m_sources
         || pinCapsMap != audioDevice->d->m_pinCapsMap
         || pinDescriptionMap != audioDevice->d->m_pinDescriptionMap)
         emit audioDevice->inputsChanged(audioDevice->d->m_sources.values());
-
-    audioDevice->d->m_mutex.unlock();
 }
 
 void AudioDevPulseAudioPrivate::sinkInfoCallback(pa_context *context,
@@ -643,16 +687,18 @@ void AudioDevPulseAudioPrivate::sinkInfo
                   info->name: info->description;
 
     audioDevice->d->m_pinCapsMap[info->name] =
-            AkAudioCaps(sampleFormats->key(info->sample_spec.format),
+            AkAudioCaps(sampleFormats->value(info->sample_spec.format),
                         AkAudioCaps::defaultChannelLayout(info->sample_spec.channels),
+                        false,
                         int(info->sample_spec.rate));
 
+    audioDevice->d->m_mutex.unlock();
+
     if (sinks != audioDevice->d->m_sinks
         || pinCapsMap != audioDevice->d->m_pinCapsMap
-        || pinDescriptionMap != audioDevice->d->m_pinDescriptionMap)
+        || pinDescriptionMap != audioDevice->d->m_pinDescriptionMap) {
         emit audioDevice->outputsChanged(audioDevice->d->m_sinks.values());
-
-    audioDevice->d->m_mutex.unlock();
+    }
 }
 
 #include "moc_audiodevpulseaudio.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/pulseaudio/src/audiodevpulseaudio.h
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/pulseaudio/src/audiodevpulseaudio.h
@@ -32,20 +32,20 @@ class AudioDevPulseAudio: public AudioDe
         AudioDevPulseAudio(QObject *parent=nullptr);
         ~AudioDevPulseAudio();
 
-        Q_INVOKABLE QString error() const;
-        Q_INVOKABLE QString defaultInput();
-        Q_INVOKABLE QString defaultOutput();
-        Q_INVOKABLE QStringList inputs();
-        Q_INVOKABLE QStringList outputs();
-        Q_INVOKABLE QString description(const QString &device);
-        Q_INVOKABLE AkAudioCaps preferredFormat(const QString &device);
-        Q_INVOKABLE QList<AkAudioCaps::SampleFormat> supportedFormats(const QString &device);
-        Q_INVOKABLE QList<AkAudioCaps::ChannelLayout> supportedChannelLayouts(const QString &device);
-        Q_INVOKABLE QList<int> supportedSampleRates(const QString &device);
-        Q_INVOKABLE bool init(const QString &device, const AkAudioCaps &caps);
-        Q_INVOKABLE QByteArray read();
-        Q_INVOKABLE bool write(const AkAudioPacket &frame);
-        Q_INVOKABLE bool uninit();
+        Q_INVOKABLE QString error() const override;
+        Q_INVOKABLE QString defaultInput() override;
+        Q_INVOKABLE QString defaultOutput() override;
+        Q_INVOKABLE QStringList inputs() override;
+        Q_INVOKABLE QStringList outputs() override;
+        Q_INVOKABLE QString description(const QString &device) override;
+        Q_INVOKABLE AkAudioCaps preferredFormat(const QString &device) override;
+        Q_INVOKABLE QList<AkAudioCaps::SampleFormat> supportedFormats(const QString &device) override;
+        Q_INVOKABLE QList<AkAudioCaps::ChannelLayout> supportedChannelLayouts(const QString &device) override;
+        Q_INVOKABLE QList<int> supportedSampleRates(const QString &device) override;
+        Q_INVOKABLE bool init(const QString &device, const AkAudioCaps &caps) override;
+        Q_INVOKABLE QByteArray read() override;
+        Q_INVOKABLE bool write(const AkAudioPacket &frame) override;
+        Q_INVOKABLE bool uninit() override;
 
     private:
         AudioDevPulseAudioPrivate *d;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/wasapi/src/audiodevwasapi.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/wasapi/src/audiodevwasapi.cpp
@@ -454,7 +454,9 @@ QByteArray AudioDevWasapi::read()
 
 bool AudioDevWasapi::write(const AkAudioPacket &packet)
 {
-    this->d->m_audioBuffer.append(packet.buffer());
+    QByteArray data(reinterpret_cast<const char *>(packet.constPlane(0)),
+                    int(packet.planeSize(0)));
+    this->d->m_audioBuffer.append(data);
     int nErrors = 0;
 
     while (!this->d->m_audioBuffer.isEmpty()
@@ -648,6 +650,7 @@ AkAudioCaps AudioDevWasapiPrivate::capsF
 
     return AkAudioCaps(sampleFormat,
                        AkAudioCaps::defaultChannelLayout(int(wfx->nChannels)),
+                       false,
                        int(wfx->nSamplesPerSec));
 }
 
@@ -697,6 +700,7 @@ void AudioDevWasapiPrivate::fillDeviceIn
                 WAVEFORMATEX *closestWfx = nullptr;
                 AkAudioCaps audioCaps(format,
                                       AkAudioCaps::defaultChannelLayout(channels),
+                                      false,
                                       rate);
                 this->waveFormatFromCaps(&wfx, audioCaps);
 
@@ -778,9 +782,11 @@ AkAudioCaps AudioDevWasapiPrivate::prefe
     AkAudioCaps caps = dataFlow == eCapture?
                 AkAudioCaps(AkAudioCaps::SampleFormat_u8,
                             AkAudioCaps::Layout_mono,
+                            false,
                             8000):
                 AkAudioCaps(AkAudioCaps::SampleFormat_s16,
                             AkAudioCaps::Layout_stereo,
+                            false,
                             44100);
 
     WAVEFORMATEX wfx;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioDevice/src/wasapi/src/audiodevwasapi.h
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioDevice/src/wasapi/src/audiodevwasapi.h
@@ -34,24 +34,24 @@ class AudioDevWasapi: public AudioDev, p
         AudioDevWasapi(QObject *parent=nullptr);
         ~AudioDevWasapi();
 
-        Q_INVOKABLE QString error() const;
-        Q_INVOKABLE QString defaultInput();
-        Q_INVOKABLE QString defaultOutput();
-        Q_INVOKABLE QStringList inputs();
-        Q_INVOKABLE QStringList outputs();
-        Q_INVOKABLE QString description(const QString &device);
-        Q_INVOKABLE AkAudioCaps preferredFormat(const QString &device);
-        Q_INVOKABLE QList<AkAudioCaps::SampleFormat> supportedFormats(const QString &device);
-        Q_INVOKABLE QList<AkAudioCaps::ChannelLayout> supportedChannelLayouts(const QString &device);
-        Q_INVOKABLE QList<int> supportedSampleRates(const QString &device);
+        Q_INVOKABLE QString error() const override;
+        Q_INVOKABLE QString defaultInput() override;
+        Q_INVOKABLE QString defaultOutput() override;
+        Q_INVOKABLE QStringList inputs() override;
+        Q_INVOKABLE QStringList outputs() override;
+        Q_INVOKABLE QString description(const QString &device) override;
+        Q_INVOKABLE AkAudioCaps preferredFormat(const QString &device) override;
+        Q_INVOKABLE QList<AkAudioCaps::SampleFormat> supportedFormats(const QString &device) override;
+        Q_INVOKABLE QList<AkAudioCaps::ChannelLayout> supportedChannelLayouts(const QString &device) override;
+        Q_INVOKABLE QList<int> supportedSampleRates(const QString &device) override;
         Q_INVOKABLE bool init(const QString &device,
-                              const AkAudioCaps &caps);
+                              const AkAudioCaps &caps) override;
         Q_INVOKABLE bool init(const QString &device,
                               const AkAudioCaps &caps,
                               bool justActivate);
-        Q_INVOKABLE QByteArray read();
-        Q_INVOKABLE bool write(const AkAudioPacket &packet);
-        Q_INVOKABLE bool uninit();
+        Q_INVOKABLE QByteArray read() override;
+        Q_INVOKABLE bool write(const AkAudioPacket &packet) override;
+        Q_INVOKABLE bool uninit() override;
 
         HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject);
         ULONG STDMETHODCALLTYPE AddRef();
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioGen/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioGen/CMakeLists.txt
@@ -56,7 +56,6 @@ target_include_directories(AudioGen
 target_compile_definitions(AudioGen PRIVATE AVKYS_PLUGIN_AUDIOGEN)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(AudioGen avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS AudioGen RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioGen/src/audiogen.h
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioGen/src/audiogen.h
@@ -29,8 +29,8 @@ class AudioGen: public QObject, public A
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // AUDIOGEN_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/AudioGen/src/audiogenelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/AudioGen/src/audiogenelement.cpp
@@ -74,6 +74,7 @@ class AudioGenElementPrivate
         AkAudioCaps m_caps {
             AkAudioCaps::SampleFormat_s16,
             AkAudioCaps::Layout_mono,
+            true,
             44100
         };
         AkAudioConverter m_audioConvert;
@@ -186,6 +187,7 @@ void AudioGenElement::resetCaps()
 {
     this->setCaps({AkAudioCaps::SampleFormat_s16,
                    AkAudioCaps::Layout_mono,
+                   true,
                    44100});
 }
 
@@ -305,6 +307,7 @@ void AudioGenElementPrivate::readFramesL
     qreal sampleDuration = this->m_sampleDuration;
     AkAudioCaps audioCaps(AkAudioCaps::SampleFormat_s32,
                           AkAudioCaps::Layout_mono,
+                          true,
                           rate);
     this->m_mutex.unlock();
 
@@ -350,21 +353,22 @@ void AudioGenElementPrivate::readFramesL
             frameCount = 0;
         }
 
-        audioCaps.setSamples(nSamples);
-        AkAudioPacket iPacket(audioCaps);
+        AkAudioPacket iPacket(audioCaps, nSamples);
         qreal time = QTime::currentTime().msecsSinceStartOfDay() / 1.e3;
         qreal tdiff = 1. / audioCaps.rate();
 
-        if (this->m_waveType == AudioGenElement::WaveTypeSilence) {
-            iPacket.buffer().fill(0);
+        if (this->m_waveType != AudioGenElement::WaveTypeSilence) {
+            memset(iPacket.data(), 0, iPacket.size());
         } else if (this->m_waveType == AudioGenElement::WaveTypeWhiteNoise) {
-            for (auto &c: iPacket.buffer())
-                c = char(QRandomGenerator::global()->bounded(-128, 127));
+            auto data = iPacket.data();
+
+            for (size_t i = 0; i < iPacket.size(); ++i)
+                data[i] = char(QRandomGenerator::global()->bounded(-128, 127));
         } else {
             auto ampMax = qint32(this->m_volume * std::numeric_limits<qint32>::max());
             auto ampMin = qint32(this->m_volume * std::numeric_limits<qint32>::min());
             auto t = time;
-            auto buff = reinterpret_cast<qint32 *>(iPacket.buffer().data());
+            auto buff = reinterpret_cast<qint32 *>(iPacket.data());
 
             if (this->m_waveType == AudioGenElement::WaveTypeSine) {
                 for  (int i = 0; i < nSamples; i++, time += tdiff)
@@ -397,10 +401,10 @@ void AudioGenElementPrivate::readFramesL
             }
         }
 
-        iPacket.pts() = pts;
-        iPacket.timeBase() = AkFrac(1, audioCaps.rate());
-        iPacket.index() = 0;
-        iPacket.id() = this->m_id;
+        iPacket.setPts(pts);
+        iPacket.setTimeBase({1, audioCaps.rate()});
+        iPacket.setIndex(0);
+        iPacket.setId(this->m_id);
 
         auto outPacket = this->m_audioConvert.convert(iPacket);
         emit self->oStream(outPacket);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Blur/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Blur/CMakeLists.txt
@@ -59,7 +59,6 @@ target_include_directories(Blur
 target_compile_definitions(Blur PRIVATE AVKYS_PLUGIN_BLUR)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Blur avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Blur RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Blur/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Blur/share/qml/main.qml
@@ -45,6 +45,7 @@ GridLayout {
         stepSize: 1
         to: 128
         Layout.fillWidth: true
+        Accessible.name: lblRadius.text
 
         onValueChanged: Blur.radius = value
     }
@@ -54,6 +55,7 @@ GridLayout {
         to: sldRadius.to
         stepSize: sldRadius.stepSize
         editable: true
+        Accessible.name: lblRadius.text
 
         onValueChanged: Blur.radius = Number(value)
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Blur/src/blurelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Blur/src/blurelement.cpp
@@ -17,9 +17,11 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "blurelement.h"
@@ -29,10 +31,9 @@ class BlurElementPrivate
 {
     public:
         int m_radius {5};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 
-        void integralImage(const QImage &image,
-                           int oWidth, int oHeight,
-                           PixelU32 *integral);
+        void integralImage(const AkVideoPacket &src, PixelU32 *integral);
 };
 
 BlurElement::BlurElement():
@@ -51,35 +52,6 @@ int BlurElement::radius() const
     return this->d->m_radius;
 }
 
-void BlurElementPrivate::integralImage(const QImage &image,
-                                       int oWidth, int oHeight,
-                                       PixelU32 *integral)
-{
-    for (int y = 1; y < oHeight; y++) {
-        auto line = reinterpret_cast<const QRgb *>(image.constScanLine(y - 1));
-
-        // Reset current line summation.
-        PixelU32 sum;
-
-        for (int x = 1; x < oWidth; x++) {
-            QRgb pixel = line[x - 1];
-
-            // Accumulate pixels in current line.
-            sum += pixel;
-
-            // Offset to the current line.
-            int offset = x + y * oWidth;
-
-            // Offset to the previous line.
-            // equivalent to x + (y - 1) * oWidth;
-            int offsetPrevious = offset - oWidth;
-
-            // Accumulate current line and previous line.
-            integral[offset] = sum + integral[offsetPrevious];
-        }
-    }
-}
-
 QString BlurElement::controlInterfaceProvide(const QString &controlId) const
 {
     Q_UNUSED(controlId)
@@ -98,29 +70,31 @@ void BlurElement::controlInterfaceConfig
 
 AkPacket BlurElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull())
-        return AkPacket();
+    if (!src)
+        return {};
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
 
-    int oWidth = src.width() + 1;
-    int oHeight = src.height() + 1;
+    int oWidth = src.caps().width() + 1;
+    int oHeight = src.caps().height() + 1;
     auto integral = new PixelU32[oWidth * oHeight];
-    this->d->integralImage(src, oWidth, oHeight, integral);
+    this->d->integralImage(src, integral);
 
     int radius = this->d->m_radius;
 
-    for (int y = 0; y < src.height(); y++) {
-        QRgb *oLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
+    for (int y = 0; y < src.caps().height(); ++y) {
+        auto oLine = reinterpret_cast<QRgb *>(dst.line(0, y));
         int yp = qMax(y - radius, 0);
-        int kh = qMin(y + radius, src.height() - 1) - yp + 1;
+        int kh = qMin(y + radius, src.caps().height() - 1) - yp + 1;
 
-        for (int x = 0; x < src.width(); x++) {
+        for (int x = 0; x < src.caps().width(); ++x) {
             int xp = qMax(x - radius, 0);
-            int kw = qMin(x + radius, src.width() - 1) - xp + 1;
+            int kw = qMin(x + radius, src.caps().width() - 1) - xp + 1;
 
             PixelU32 sum = integralSum(integral, oWidth, xp, yp, kw, kh);
             PixelU32 mean = sum / quint32(kw * kh);
@@ -131,8 +105,10 @@ AkPacket BlurElement::iVideoStream(const
 
     delete [] integral;
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void BlurElement::setRadius(int radius)
@@ -149,4 +125,32 @@ void BlurElement::resetRadius()
     this->setRadius(5);
 }
 
+void BlurElementPrivate::integralImage(const AkVideoPacket &src,
+                                       PixelU32 *integral)
+{
+    int oWidth = src.caps().width() + 1;
+    int oHeight = src.caps().height() + 1;
+
+    auto integralLine = integral + oWidth;
+    auto prevIntegralLine = integral;
+
+    for (int y = 1; y < oHeight; ++y) {
+        auto line = reinterpret_cast<const QRgb *>(src.constLine(0, y - 1));
+
+        // Reset current line summation.
+        PixelU32 sum;
+
+        for (int x = 1; x < oWidth; ++x) {
+            // Accumulate pixels in current line.
+            sum += line[x - 1];
+
+            // Accumulate current line and previous line.
+            integralLine[x] = sum + prevIntegralLine[x];
+        }
+
+        integralLine += oWidth;
+        prevIntegralLine += oWidth;
+    }
+}
+
 #include "moc_blurelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Blur/src/blurelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Blur/src/blurelement.h
@@ -43,10 +43,10 @@ class BlurElement: public AkElement
         BlurElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void radiusChanged(int radius);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Blur/src/pixel.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Blur/src/pixel.h
@@ -86,8 +86,8 @@ template<typename T> class Pixel
 };
 
 template<typename T> inline Pixel<T> integralSum(const Pixel<T> *integral,
-                                          int lineWidth,
-                                          int x, int y, int kw, int kh)
+                                                 int lineWidth,
+                                                 int x, int y, int kw, int kh)
 {
 
     const Pixel<T> *p0 = integral + x + y * lineWidth;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/CMakeLists.txt
@@ -22,11 +22,10 @@ project(Plugins)
 
 # Base plugins
 
-add_subdirectory(ACapsConvert)
 add_subdirectory(AudioDevice)
 add_subdirectory(AudioGen)
 add_subdirectory(DesktopCapture)
-add_subdirectory(Multiplex)
+add_subdirectory(ImageSrc)
 add_subdirectory(MultiSink)
 add_subdirectory(MultiSrc)
 add_subdirectory(VideoCapture)
@@ -34,11 +33,17 @@ add_subdirectory(VirtualCamera)
 
 # Video effects
 
+# Base video effects.
+# These are required by some of the base plugins to work fine.
+add_subdirectory(Flip)
+add_subdirectory(SwapRB)
+
 set(NOVIDEOEFFECTS OFF CACHE STRING "No build video effects")
 
 if (NOT NOVIDEOEFFECTS)
     add_subdirectory(AdjustHSL)
     add_subdirectory(Aging)
+    add_subdirectory(AnalogTV)
     add_subdirectory(AspectRatio)
     add_subdirectory(Blur)
     add_subdirectory(Cartoon)
@@ -63,7 +68,6 @@ if (NOT NOVIDEOEFFECTS)
     add_subdirectory(FaceTrack)
     add_subdirectory(FalseColor)
     add_subdirectory(Fire)
-    add_subdirectory(Flip)
     add_subdirectory(FrameOverlap)
     add_subdirectory(Gamma)
     add_subdirectory(GrayScale)
@@ -77,22 +81,22 @@ if (NOT NOVIDEOEFFECTS)
     add_subdirectory(Nervous)
     add_subdirectory(Normalize)
     add_subdirectory(OilPaint)
+    add_subdirectory(Opacity)
     add_subdirectory(Otsu)
     add_subdirectory(Photocopy)
     add_subdirectory(Pixelate)
-    add_subdirectory(PrimariesColors)
     add_subdirectory(Quark)
     add_subdirectory(Radioactive)
     add_subdirectory(Ripple)
-    add_subdirectory(Scale)
+    add_subdirectory(Rotate)
+    add_subdirectory(Saturated)
     add_subdirectory(ScanLines)
-    add_subdirectory(Scroll)
     add_subdirectory(Shagadelic)
-    add_subdirectory(SwapRB)
     add_subdirectory(Swirl)
     add_subdirectory(Temperature)
     add_subdirectory(Vignette)
     add_subdirectory(Warhol)
     add_subdirectory(Warp)
     add_subdirectory(Wave)
+    add_subdirectory(Zoom)
 endif ()
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Cartoon/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Cartoon/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Cartoon
 target_compile_definitions(Cartoon PRIVATE AVKYS_PLUGIN_CARTOON)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Cartoon avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Cartoon RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Cartoon/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Cartoon/share/qml/main.qml
@@ -69,7 +69,7 @@ GridLayout {
 
     Label {
         id: lblNColors
-        text: qsTr("N° of colors")
+        text: qsTr("Number of colors")
     }
     Slider {
         id: sldNColors
@@ -77,6 +77,7 @@ GridLayout {
         stepSize: 1
         to: 32
         Layout.fillWidth: true
+        Accessible.name: lblNColors.text
 
         onValueChanged: Cartoon.ncolors = value
     }
@@ -86,6 +87,7 @@ GridLayout {
         to: sldNColors.to
         stepSize: sldNColors.stepSize
         editable: true
+        Accessible.name: lblNColors.text
 
         onValueChanged: Cartoon.ncolors = Number(value)
     }
@@ -100,6 +102,7 @@ GridLayout {
         stepSize: 1
         to: 442
         Layout.fillWidth: true
+        Accessible.name: lblColorDiff.text
 
         onValueChanged: Cartoon.colorDiff = value
     }
@@ -109,11 +112,13 @@ GridLayout {
         to: sldColorDiff.to
         stepSize: sldColorDiff.stepSize
         editable: true
+        Accessible.name: lblColorDiff.text
 
         onValueChanged: Cartoon.colorDiff = Number(value)
     }
 
     Label {
+        id: txtShowEdges
         text: qsTr("Show edges")
     }
     RowLayout {
@@ -125,6 +130,7 @@ GridLayout {
         Switch {
             id: chkShowEdges
             checked: Cartoon.showEdges
+            Accessible.name: txtShowEdges.text
 
             onCheckedChanged: Cartoon.showEdges = checked
         }
@@ -146,6 +152,7 @@ GridLayout {
             stepSize: sldThreshold.stepSize
             enabled: chkShowEdges.checked
             editable: true
+            Accessible.name: lblThreshold.text
 
             onValueChanged: Cartoon.thresholdLow = Number(value)
         }
@@ -157,6 +164,7 @@ GridLayout {
             to: 255
             enabled: chkShowEdges.checked
             Layout.fillWidth: true
+            Accessible.name: lblThreshold.text
 
             first.onValueChanged: Cartoon.thresholdLow = first.value
             second.onValueChanged: Cartoon.thresholdHi = second.value
@@ -168,12 +176,14 @@ GridLayout {
             stepSize: sldThreshold.stepSize
             enabled: chkShowEdges.checked
             editable: true
+            Accessible.name: lblThreshold.text
 
             onValueChanged: Cartoon.thresholdHi = Number(value)
         }
     }
 
     Label {
+        id: txtLineColor
         text: qsTr("Line color")
         enabled: chkShowEdges.checked
     }
@@ -187,6 +197,7 @@ GridLayout {
             currentColor: AkUtils.fromRgba(Cartoon.lineColor)
             title: qsTr("Choose a color")
             enabled: chkShowEdges.checked
+            Accessible.description: txtLineColor.text
 
             onCurrentColorChanged: Cartoon.lineColor = AkUtils.toRgba(currentColor)
         }
@@ -194,6 +205,7 @@ GridLayout {
 
     // Scan block.
     Label {
+        id: txtScanBlock
         text: qsTr("Scan block")
     }
     TextField {
@@ -205,6 +217,7 @@ GridLayout {
         }
         Layout.fillWidth: true
         Layout.columnSpan: 2
+        Accessible.name: txtScanBlock.text
 
         onTextChanged: Cartoon.scanSize = strToSize(text)
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Cartoon/src/cartoon.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Cartoon/src/cartoon.h
@@ -29,8 +29,8 @@ class Cartoon: public QObject, public Ak
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // CARTOON_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Cartoon/src/cartoonelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Cartoon/src/cartoonelement.cpp
@@ -18,54 +18,63 @@
  */
 
 #include <limits>
-#include <QtMath>
-#include <QPainter>
 #include <QDateTime>
 #include <QMutex>
 #include <QQmlContext>
+#include <QSize>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
+#include <akvideomixer.h>
 #include <akvideopacket.h>
 
 #include "cartoonelement.h"
 
+#define PALETTE_SIZE (1UL << 16)
+
 class CartoonElementPrivate
 {
     public:
         int m_ncolors {8};
-        int m_colorDiff {95};
+        int m_colorDiff {10};
         bool m_showEdges {true};
         int m_thresholdLow {85};
         int m_thresholdHi {171};
         QRgb m_lineColor {qRgb(0, 0, 0)};
         QSize m_scanSize {320, 240};
-        QVector<QRgb> m_palette;
+        QRgb *m_palette {nullptr};
         qint64 m_id {-1};
         qint64 m_lastTime {0};
         QMutex m_mutex;
+        AkVideoConverter m_videoConverter;
+        AkVideoMixer m_videoMixer;
 
-        QVector<QRgb> palette(const QImage &img,
-                              int ncolors,
-                              int colorDiff);
-        QRgb nearestColor(int *index,
-                          int *diff,
-                          const QVector<QRgb> &palette,
-                          QRgb color) const;
-        QImage edges(const QImage &src,
-                     int thLow,
-                     int thHi,
-                     QRgb color) const;
-        int rgb24Torgb16(QRgb color);
-        void rgb16Torgb24(int *r, int *g, int *b, int color);
-        QRgb rgb16Torgb24(int color);
+        void updatePalette(const AkVideoPacket &img,
+                           int ncolors,
+                           int colorDiff);
+        quint16 nearestColor(const quint16 *palette,
+                             size_t paletteSize,
+                             quint16 color) const;
+        AkVideoPacket edges(const AkVideoPacket &src,
+                            int thLow,
+                            int thHi,
+                            QRgb color) const;
+        inline quint16 rgb24Torgb16(QRgb color);
+        inline void rgb16Torgb24(int *r, int *g, int *b, quint16 color);
+        inline QRgb rgb16Torgb24(quint16 color);
 };
 
 CartoonElement::CartoonElement(): AkElement()
 {
     this->d = new CartoonElementPrivate;
+    this->d->m_videoConverter.setAspectRatioMode(AkVideoConverter::AspectRatioMode_Keep);
+    this->d->m_palette = new QRgb [PALETTE_SIZE];
 }
 
 CartoonElement::~CartoonElement()
 {
+    delete [] this->d->m_palette;
     delete this->d;
 }
 
@@ -104,207 +113,6 @@ QSize CartoonElement::scanSize() const
     return this->d->m_scanSize;
 }
 
-QVector<QRgb> CartoonElementPrivate::palette(const QImage &img,
-                                             int ncolors,
-                                             int colorDiff)
-{
-    qint64 time = QDateTime::currentMSecsSinceEpoch();
-
-    // This code stabilize the color change between frames.
-    if (this->m_palette.isEmpty() || (time - this->m_lastTime) >= 3 * 1000) {
-        // Create a histogram of 66k colors.
-        QVector<QPair<int, int>> histogram(1 << 16);
-
-        for (int i = 0; i < histogram.size(); i++)
-            histogram[i].second = i;
-
-        for (int y = 0; y < img.height(); y++) {
-            const QRgb *line = reinterpret_cast<const QRgb *>(img.constScanLine(y));
-
-            for (int x = 0; x < img.width(); x++)
-                // Pixels must be converted from 24 bits to 16 bits color depth.
-                histogram[this->rgb24Torgb16(line[x])].first++;
-        }
-
-        // Sort the histogram by weights.
-        std::sort(histogram.begin(), histogram.end());
-        QVector<QRgb> palette;
-
-        if (ncolors < 1)
-            ncolors = 1;
-
-        // Create a palette with n-colors, starting from tail.
-        for (int i = histogram.size() - 1; i >= 0 && palette.size() < ncolors; i--) {
-            int r;
-            int g;
-            int b;
-            this->rgb16Torgb24(&r, &g, &b, histogram[i].second);
-            bool add = true;
-
-            for (const QRgb &color: palette) {
-                int dr = r - qRed(color);
-                int dg = g - qGreen(color);
-                int db = b - qBlue(color);
-                int k = qRound(qSqrt(dr * dr + dg * dg + db * db));
-
-                // The color to add must be different enough for not repeating
-                // similar colors in the palette.
-                if (k < colorDiff) {
-                    add = false;
-
-                    break;
-                }
-            }
-
-            if (add)
-                palette << qRgb(r, g, b);
-        }
-
-        // Create a look-up table for speed-up the conversion from 16-24 bits
-        // to palettized format.
-        this->m_palette.resize(1 << 16);
-
-        for (int i = 0; i < this->m_palette.size(); i++)
-            this->m_palette[i] = this->nearestColor(nullptr,
-                                                    nullptr,
-                                                    palette,
-                                                    this->rgb16Torgb24(i));
-
-        this->m_lastTime = time;
-    }
-
-    QVector<QRgb> palette = this->m_palette;
-
-    return palette;
-}
-
-QRgb CartoonElementPrivate::nearestColor(int *index,
-                                         int *diff,
-                                         const QVector<QRgb> &palette,
-                                         QRgb color) const
-{
-    if (palette.isEmpty()) {
-        if (index)
-            *index = -1;
-
-        if (diff)
-            *diff = std::numeric_limits<int>::max();
-
-        return color;
-    }
-
-    int k = std::numeric_limits<int>::max();
-    int index_ = 0;
-    int r = qRed(color);
-    int g = qGreen(color);
-    int b = qBlue(color);
-
-    for (int i = 0; i < palette.count(); i++) {
-        int rdiff = r - qRed(palette[i]);
-        int gdiff = g - qGreen(palette[i]);
-        int bdiff = b - qBlue(palette[i]);
-        int q = rdiff * rdiff
-                + gdiff * gdiff
-                + bdiff * bdiff;
-
-        if (q < k) {
-            k = q;
-            index_ = i;
-        }
-    }
-
-    if (index)
-        *index = index_;
-
-    if (diff)
-        *diff = qRound(qSqrt(k));
-
-    return palette[index_];
-}
-
-QImage CartoonElementPrivate::edges(const QImage &src,
-                                    int thLow,
-                                    int thHi,
-                                    QRgb color) const
-{
-    QImage dst(src.size(), src.format());
-
-    if (thLow > thHi)
-        std::swap(thLow, thHi);
-
-    QVector<QRgb> colors(256);
-
-    for (int i = 0; i < colors.size(); i++) {
-        int alpha = i < thLow? 0: i > thHi? 255: i;
-        colors[i] = qRgba(qRed(color), qGreen(color), qBlue(color), alpha);
-    }
-
-    for (int y = 0; y < src.height(); y++) {
-        const QRgb *srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        QRgb *dstLine = reinterpret_cast<QRgb *>(dst.scanLine(y));
-
-        const QRgb *srcLine_m1 = y < 1? srcLine: srcLine - src.width();
-        const QRgb *srcLine_p1 = y >= src.height() - 1? srcLine: srcLine + src.width();
-
-        for (int x = 0; x < src.width(); x++) {
-            int x_m1 = x < 1? x: x - 1;
-            int x_p1 = x >= src.width() - 1? x: x + 1;
-
-            int s_m1_p1 = qGray(srcLine_m1[x_p1]);
-            int s_p1_p1 = qGray(srcLine_p1[x_p1]);
-            int s_m1_m1 = qGray(srcLine_m1[x_m1]);
-            int s_p1_m1 = qGray(srcLine_p1[x_m1]);
-
-            int gradX = s_m1_p1
-                      + 2 * qGray(srcLine[x_p1])
-                      + s_p1_p1
-                      - s_m1_m1
-                      - 2 * qGray(srcLine[x_m1])
-                      - s_p1_m1;
-
-            int gradY = s_m1_m1
-                      + 2 * qGray(srcLine_m1[x])
-                      + s_m1_p1
-                      - s_p1_m1
-                      - 2 * qGray(srcLine_p1[x])
-                      - s_p1_p1;
-
-            int grad = qAbs(gradX) + qAbs(gradY);
-            grad = qBound(0, grad, 255);
-            dstLine[x] = colors[grad];
-        }
-    }
-
-    return dst;
-}
-
-int CartoonElementPrivate::rgb24Torgb16(QRgb color)
-{
-    return ((qRed(color) >> 3) << 11)
-            | ((qGreen(color) >> 2) << 5)
-            | (qBlue(color) >> 3);
-}
-
-void CartoonElementPrivate::rgb16Torgb24(int *r, int *g, int *b, int color)
-{
-    *r = (color >> 11) & 0x1f;
-    *g = (color >> 5) & 0x3f;
-    *b = color & 0x1f;
-    *r = 0xff * *r / 0x1f;
-    *g = 0xff * *g / 0x3f;
-    *b = 0xff * *b / 0x1f;
-}
-
-QRgb CartoonElementPrivate::rgb16Torgb24(int color)
-{
-    int r;
-    int g;
-    int b;
-    rgb16Torgb24(&r, &g, &b, color);
-
-    return qRgb(r, g, b);
-}
-
 QString CartoonElement::controlInterfaceProvide(const QString &controlId) const
 {
     Q_UNUSED(controlId)
@@ -327,52 +135,82 @@ AkPacket CartoonElement::iVideoStream(co
     QSize scanSize(this->d->m_scanSize);
     this->d->m_mutex.unlock();
 
-    if (scanSize.isEmpty())
-        akSend(packet)
+    if (scanSize.isEmpty()) {
+        if (packet)
+            emit this->oStream(packet);
 
-    auto src = packet.toImage();
+        return packet;
+    }
+
+    this->d->m_videoConverter.begin();
+    this->d->m_videoConverter.setOutputCaps({AkVideoCaps::Format_argbpack,
+                                             0,
+                                             0,
+                                             {}});
+    auto src = this->d->m_videoConverter.convert(packet);
+
+    if (!src) {
+        this->d->m_videoConverter.end();
+        return {};
+    }
 
-    if (src.isNull())
-        return AkPacket();
+    this->d->m_videoConverter.setOutputCaps({AkVideoCaps::Format_none,
+                                             scanSize.width(),
+                                             scanSize.height(),
+                                             {}});
+    auto srcScaled = this->d->m_videoConverter.convert(src);
+    this->d->m_videoConverter.end();
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
+    bool updatePalette = false;
 
     if (this->d->m_id != packet.id()) {
         this->d->m_id = packet.id();
-        this->d->m_palette.clear();
         this->d->m_lastTime = QDateTime::currentMSecsSinceEpoch();
+        updatePalette = true;
     }
 
-    // Palettize image.
-    QVector<QRgb> palette =
-            this->d->palette(src.scaled(scanSize, Qt::KeepAspectRatio),
-                             this->d->m_ncolors,
-                             this->d->m_colorDiff);
-
-    for (int y = 0; y < src.height(); y++) {
-        const QRgb *srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        QRgb *dstLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
+    qint64 time = QDateTime::currentMSecsSinceEpoch();
+
+    // This code stabilize the color change between frames.
+    if (updatePalette || (time - this->d->m_lastTime) >= 3 * 1000) {
+        this->d->updatePalette(srcScaled,
+                               this->d->m_ncolors,
+                               this->d->m_colorDiff);
 
-        for (int x = 0; x < src.width(); x++)
-            dstLine[x] = palette[this->d->rgb24Torgb16(srcLine[x])];
+        this->d->m_lastTime = time;
+    }
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    for (int y = 0; y < src.caps().height(); ++y) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto pixel = this->d->m_palette[this->d->rgb24Torgb16(srcLine[x])];
+            dstLine[x] = qRgba(qRed(pixel),
+                               qGreen(pixel),
+                               qBlue(pixel),
+                               qAlpha(srcLine[x]));
+        }
     }
 
     // Draw the edges.
     if (this->d->m_showEdges) {
-        QPainter painter;
-        painter.begin(&oFrame);
-        QImage edges =
-                this->d->edges(src,
-                               this->d->m_thresholdLow,
-                               this->d->m_thresholdHi,
-                               this->d->m_lineColor);
-        painter.drawImage(0, 0, edges);
-        painter.end();
+        this->d->m_videoMixer.begin(&dst);
+        auto edges = this->d->edges(src,
+                                    this->d->m_thresholdLow,
+                                    this->d->m_thresholdHi,
+                                    this->d->m_lineColor);
+        this->d->m_videoMixer.draw(edges);
+        this->d->m_videoMixer.end();
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void CartoonElement::setNColors(int ncolors)
@@ -475,4 +313,205 @@ void CartoonElement::resetScanSize()
     this->setScanSize(QSize(320, 240));
 }
 
+void CartoonElementPrivate::updatePalette(const AkVideoPacket &packet,
+                                          int ncolors,
+                                          int colorDiff)
+{
+    using WeightType = quint64;
+
+    // Create a histogram of 66k colors.
+    WeightType histogram[PALETTE_SIZE];
+    memset(histogram, 0, sizeof(WeightType) * PALETTE_SIZE);
+
+    for (int y = 0; y < packet.caps().height(); y++) {
+        auto line = reinterpret_cast<const QRgb *>(packet.constLine(0, y));
+
+        for (int x = 0; x < packet.caps().width(); x++)
+            // Pixels must be converted from 24 bits to 16 bits color depth.
+            histogram[this->rgb24Torgb16(line[x])]++;
+    }
+
+    int colorDiff2 = colorDiff * colorDiff;
+    quint16 palette[ncolors];
+    WeightType ceilWeight = std::numeric_limits<WeightType>::max();
+    int j = 0;
+
+    // Create a palette with n-colors.
+    for (; j < ncolors;) {
+        quint16 color = 0;
+        WeightType maxWeight = 0;
+
+        for (int i = 0; i < PALETTE_SIZE; ++i) {
+            int weight = histogram[i];
+
+            if (weight > maxWeight && weight < ceilWeight) {
+                maxWeight = weight;
+                color = i;
+            }
+        }
+
+        ceilWeight = maxWeight;
+        bool add = true;
+
+        int r = (color >> 11) & 0x1f;
+        int g = (color >> 5) & 0x3f;
+        int b = color & 0x1f;
+
+        for (int i = 0; i < j; ++i) {
+            auto color_ = palette[i];
+
+            int cr = (color_ >> 11) & 0x1f;
+            int cg = (color_ >> 5) & 0x3f;
+            int cb = color_ & 0x1f;
+
+            int dr = cr - r;
+            int dg = cg - g;
+            int db = cb - b;
+
+            int k = dr * dr + dg * dg + db * db;
+
+            if (k < colorDiff2) {
+                add = false;
+
+                break;
+            }
+        }
+
+        if (add) {
+            palette[j] = color;
+            j++;
+        }
+
+        if (maxWeight < 1)
+            break;
+    }
+
+    // Create a look-up table for speed-up the conversion from 16-24 bits
+    // to palettized format.
+    for (int i = 0; i < PALETTE_SIZE; i++) {
+        auto color = this->nearestColor(palette, j, i);
+        this->m_palette[i] = this->rgb16Torgb24(color);
+    }
+}
+
+quint16 CartoonElementPrivate::nearestColor(const quint16 *palette,
+                                            size_t paletteSize,
+                                            quint16 color) const
+{
+    if (paletteSize < 1)
+        return color;
+
+    int k = std::numeric_limits<int>::max();
+    int index = 0;
+
+    int r = (color >> 11) & 0x1f;
+    int g = (color >> 5) & 0x3f;
+    int b = color & 0x1f;
+
+    for (int i = 0; i < paletteSize; i++) {
+        auto color_ = palette[i];
+
+        int cr = (color_ >> 11) & 0x1f;
+        int cg = (color_ >> 5) & 0x3f;
+        int cb = color_ & 0x1f;
+
+        int dr = cr - r;
+        int dg = cg - g;
+        int db = cb - b;
+        int q = dr * dr + dg * dg + db * db;
+
+        if (q < k) {
+            k = q;
+            index = i;
+        }
+    }
+
+    return palette[index];
+}
+
+AkVideoPacket CartoonElementPrivate::edges(const AkVideoPacket &src,
+                                           int thLow,
+                                           int thHi,
+                                           QRgb color) const
+{
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    if (thLow > thHi)
+        std::swap(thLow, thHi);
+
+    static const int ncolors = 256;
+    QRgb colors[ncolors];
+
+    for (int i = 0; i < ncolors; i++) {
+        int alpha = i < thLow? 0: i > thHi? 255: i;
+        colors[i] = qRgba(qRed(color), qGreen(color), qBlue(color), alpha);
+    }
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        auto srcLine_m1 = y < 1? srcLine: srcLine - src.caps().width();
+        auto srcLine_p1 = y >= src.caps().height() - 1? srcLine: srcLine + src.caps().width();
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            int x_m1 = x < 1? x: x - 1;
+            int x_p1 = x >= src.caps().width() - 1? x: x + 1;
+
+            int s_m1_p1 = qGray(srcLine_m1[x_p1]);
+            int s_p1_p1 = qGray(srcLine_p1[x_p1]);
+            int s_m1_m1 = qGray(srcLine_m1[x_m1]);
+            int s_p1_m1 = qGray(srcLine_p1[x_m1]);
+
+            int gradX = s_m1_p1
+                      + 2 * qGray(srcLine[x_p1])
+                      + s_p1_p1
+                      - s_m1_m1
+                      - 2 * qGray(srcLine[x_m1])
+                      - s_p1_m1;
+
+            int gradY = s_m1_m1
+                      + 2 * qGray(srcLine_m1[x])
+                      + s_m1_p1
+                      - s_p1_m1
+                      - 2 * qGray(srcLine_p1[x])
+                      - s_p1_p1;
+
+            int grad = qAbs(gradX) + qAbs(gradY);
+            grad = qBound(0, grad, 255);
+            dstLine[x] = colors[grad];
+        }
+    }
+
+    return dst;
+}
+
+quint16 CartoonElementPrivate::rgb24Torgb16(QRgb color)
+{
+    return ((qRed(color) >> 3) << 11)
+            | ((qGreen(color) >> 2) << 5)
+            | (qBlue(color) >> 3);
+}
+
+void CartoonElementPrivate::rgb16Torgb24(int *r, int *g, int *b, quint16 color)
+{
+    *r = (color >> 11) & 0x1f;
+    *g = (color >> 5) & 0x3f;
+    *b = color & 0x1f;
+    *r = 0xff * *r / 0x1f;
+    *g = 0xff * *g / 0x3f;
+    *b = 0xff * *b / 0x1f;
+}
+
+QRgb CartoonElementPrivate::rgb16Torgb24(quint16 color)
+{
+    int r;
+    int g;
+    int b;
+    rgb16Torgb24(&r, &g, &b, color);
+
+    return qRgb(r, g, b);
+}
+
 #include "moc_cartoonelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Cartoon/src/cartoonelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Cartoon/src/cartoonelement.h
@@ -80,10 +80,10 @@ class CartoonElement: public AkElement
         CartoonElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void ncolorsChanged(int ncolors);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ChangeHSL/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/ChangeHSL/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(ChangeHSL
 target_compile_definitions(ChangeHSL PRIVATE AVKYS_PLUGIN_CHANGEHSL)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(ChangeHSL avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS ChangeHSL RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ChangeHSL/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/ChangeHSL/share/qml/main.qml
@@ -33,6 +33,7 @@ ColumnLayout {
     }
 
     Label {
+        id: txtTransformMatrix
         //: https://en.wikipedia.org/wiki/Transformation_matrix
         text: qsTr("Transform matrix")
     }
@@ -48,6 +49,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 0, Row 0")
 
             onTextChanged: updateKernel(0, text)
         }
@@ -59,6 +61,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 1, Row 0")
 
             onTextChanged: updateKernel(1, text)
         }
@@ -70,6 +73,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 2, Row 0")
 
             onTextChanged: updateKernel(2, text)
         }
@@ -81,6 +85,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 3, Row 0")
 
             onTextChanged: updateKernel(3, text)
         }
@@ -94,6 +99,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 0, Row 1")
 
             onTextChanged: updateKernel(4, text)
         }
@@ -105,6 +111,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 1, Row 1")
 
             onTextChanged: updateKernel(5, text)
         }
@@ -116,6 +123,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 2, Row 1")
 
             onTextChanged: updateKernel(6, text)
         }
@@ -127,6 +135,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 3, Row 1")
 
             onTextChanged: updateKernel(7, text)
         }
@@ -140,6 +149,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 0, Row 2")
 
             onTextChanged: updateKernel(8, text)
         }
@@ -151,6 +161,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 1, Row 2")
 
             onTextChanged: updateKernel(9, text)
         }
@@ -162,6 +173,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 2, Row 2")
 
             onTextChanged: updateKernel(10, text)
         }
@@ -173,6 +185,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 3, Row 2")
 
             onTextChanged: updateKernel(11, text)
         }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ChangeHSL/src/changehsl.h
+++ webcamoid-9.0.0/libAvKys/Plugins/ChangeHSL/src/changehsl.h
@@ -29,8 +29,8 @@ class ChangeHSL: public QObject, public
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // CHANGEHSL_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ChangeHSL/src/changehslelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/ChangeHSL/src/changehslelement.cpp
@@ -17,10 +17,13 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QVariant>
-#include <QImage>
+#include <QColor>
 #include <QQmlContext>
+#include <QVariant>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "changehslelement.h"
@@ -29,6 +32,7 @@ class ChangeHSLElementPrivate
 {
     public:
         QVector<qreal> m_kernel;
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 };
 
 ChangeHSLElement::ChangeHSLElement(): AkElement()
@@ -82,30 +86,32 @@ AkPacket ChangeHSLElement::iVideoStream(
         return packet;
     }
 
-    auto src = packet.toImage();
-
-    if (src.isNull()) {
-        if (packet)
-            emit this->oStream(packet);
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
+    if (!src)
         return packet;
-    }
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
-    QVector<qreal> kernel = this->d->m_kernel;
-
-    for (int y = 0; y < src.height(); y++) {
-        auto srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        auto dstLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+    auto kernel = this->d->m_kernel.constData();
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = srcLine[x];
 
-        for (int x = 0; x < src.width(); x++) {
             int h;
             int s;
             int l;
             int a;
-
-            QColor(srcLine[x]).getHsl(&h, &s, &l, &a);
+            QColor(qRed(pixel),
+                   qGreen(pixel),
+                   qBlue(pixel),
+                   qAlpha(pixel)).getHsl(&h, &s, &l, &a);
 
             int ht = int(h * kernel[0] + s * kernel[1] + l * kernel[2]  + kernel[3]);
             int st = int(h * kernel[4] + s * kernel[5] + l * kernel[6]  + kernel[7]);
@@ -122,12 +128,10 @@ AkPacket ChangeHSLElement::iVideoStream(
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-
-    if (oPacket)
-        emit this->oStream(oPacket);
+    if (dst)
+        emit this->oStream(dst);
 
-    return oPacket;
+    return dst;
 }
 
 void ChangeHSLElement::setKernel(const QVariantList &kernel)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ChangeHSL/src/changehslelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/ChangeHSL/src/changehslelement.h
@@ -43,10 +43,10 @@ class ChangeHSLElement: public AkElement
         ChangeHSLElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void kernelChanged(const QVariantList &kernel);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Charify/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Charify/CMakeLists.txt
@@ -61,7 +61,6 @@ target_include_directories(Charify
 target_compile_definitions(Charify PRIVATE AVKYS_PLUGIN_CHARIFY)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Charify avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Charify RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Charify/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Charify/share/qml/main.qml
@@ -23,6 +23,7 @@ import Qt.labs.platform 1.1 as LABS
 import QtQuick.Layouts 1.3
 import Ak 1.0
 import AkControls 1.0 as AK
+import CharifyElement 1.0
 
 GridLayout {
     columns: 2
@@ -41,6 +42,7 @@ GridLayout {
     }
 
     Label {
+        id: txtMode
         text: qsTr("Mode")
     }
     ComboBox {
@@ -48,15 +50,15 @@ GridLayout {
         textRole: "text"
         currentIndex: optionIndex(cbxMode, Charify.mode)
         Layout.fillWidth: true
-
+        Accessible.description: txtMode.text
         model: ListModel {
             ListElement {
                 text: qsTr("Natural")
-                option: "natural"
+                option: CharifyElement.ColorModeNatural
             }
             ListElement {
                 text: qsTr("Fixed")
-                option: "fixed"
+                option: CharifyElement.ColorModeFixed
             }
         }
 
@@ -64,6 +66,7 @@ GridLayout {
     }
 
     Label {
+        id: txtSymbols
         text: qsTr("Symbols")
     }
     TextField {
@@ -71,11 +74,13 @@ GridLayout {
         placeholderText: qsTr("Symbols")
         selectByMouse: true
         Layout.fillWidth: true
+        Accessible.name: txtSymbols.text
 
         onTextChanged: Charify.charTable = text
     }
 
     Label {
+        id: txtFont
         text: qsTr("Font")
     }
     RowLayout {
@@ -87,16 +92,19 @@ GridLayout {
             readOnly: true
             font: Charify.font
             Layout.fillWidth: true
+            Accessible.name: txtFont.text
         }
         Button {
             text: qsTr("Search")
             icon.source: "image://icons/fonts"
+            Accessible.description: qsTr("Search the font to be used")
 
             onClicked: fontDialog.open()
         }
     }
 
     Label {
+        id: txtHinting
         text: qsTr("Hinting")
     }
     ComboBox {
@@ -104,6 +112,7 @@ GridLayout {
         textRole: "text"
         currentIndex: optionIndex(cbxHinting, Charify.hintingPreference)
         Layout.fillWidth: true
+        Accessible.description: txtHinting.text
 
         model: ListModel {
             ListElement {
@@ -128,6 +137,7 @@ GridLayout {
     }
 
     Label {
+        id: txtStyle
         //: Different font rendering strategies
         text: qsTr("Style")
     }
@@ -136,6 +146,7 @@ GridLayout {
         textRole: "text"
         currentIndex: optionIndex(cbxStyle, Charify.styleStrategy)
         Layout.fillWidth: true
+        Accessible.description: txtStyle.text
 
         model: ListModel {
             ListElement {
@@ -196,6 +207,7 @@ GridLayout {
     }
 
     Label {
+        id: txtForegroundColor
         text: qsTr("Foreground color")
     }
     RowLayout {
@@ -206,12 +218,14 @@ GridLayout {
             currentColor: AkUtils.fromRgba(Charify.foregroundColor)
             title: qsTr("Choose the foreground color")
             showAlphaChannel: true
+            Accessible.description: txtForegroundColor.text
 
             onCurrentColorChanged: Charify.foregroundColor = AkUtils.toRgba(currentColor)
         }
     }
 
     Label {
+        id: txtBackgroundColor
         text: qsTr("Background color")
     }
     RowLayout {
@@ -222,12 +236,30 @@ GridLayout {
             currentColor: AkUtils.fromRgba(Charify.backgroundColor)
             title: qsTr("Choose the background color")
             showAlphaChannel: true
+            Accessible.description: txtBackgroundColor.text
 
             onCurrentColorChanged: Charify.backgroundColor = AkUtils.toRgba(currentColor)
         }
     }
 
     Label {
+        id: txtSmooth
+        text: qsTr("Smooth scaling")
+    }
+    RowLayout {
+        Item {
+            Layout.fillWidth: true
+        }
+        Switch {
+            checked: Charify.smooth
+            Accessible.name: txtSmooth.text
+
+            onCheckedChanged: Charify.smooth = checked
+        }
+    }
+
+    Label {
+        id: txtReversed
         text: qsTr("Reversed")
     }
     RowLayout {
@@ -236,6 +268,7 @@ GridLayout {
         }
         Switch {
             checked: Charify.reversed
+            Accessible.name: txtReversed.text
 
             onCheckedChanged: Charify.reversed = checked
         }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Charify/src/character.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Charify/src/character.cpp
@@ -17,16 +17,23 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
+#include <QPainter>
+#include <akfrac.h>
+#include <akvideopacket.h>
 
 #include "character.h"
 
 class CharacterPrivate
 {
     public:
-        QChar chr;
-        QImage image;
-        int weight {0};
+        QChar m_chr;
+        AkVideoPacket m_image;
+        int m_weight {0};
+
+        AkVideoPacket drawChar(const QChar &chr,
+                               const QFont &font,
+                               const QSize &fontSize) const;
+        int imageWeight(const AkVideoPacket &image, bool reversed) const;
 };
 
 Character::Character()
@@ -34,20 +41,23 @@ Character::Character()
     this->d = new CharacterPrivate;
 }
 
-Character::Character(const QChar &chr, const QImage &image, int weight)
+Character::Character(const QChar &chr,
+                     const QFont &font,
+                     const QSize &fontSize,
+                     bool reversed)
 {
     this->d = new CharacterPrivate;
-    this->d->chr = chr;
-    this->d->image = image;
-    this->d->weight = weight;
+    this->d->m_chr = chr;
+    this->d->m_image = this->d->drawChar(chr, font, fontSize);
+    this->d->m_weight = this->d->imageWeight(this->d->m_image, reversed);
 }
 
 Character::Character(const Character &other)
 {
     this->d = new CharacterPrivate;
-    this->d->chr = other.d->chr;
-    this->d->image = other.d->image;
-    this->d->weight = other.d->weight;
+    this->d->m_chr = other.d->m_chr;
+    this->d->m_image = other.d->m_image;
+    this->d->m_weight = other.d->m_weight;
 }
 
 Character::~Character()
@@ -58,40 +68,73 @@ Character::~Character()
 Character &Character::operator =(const Character &other)
 {
     if (this != &other) {
-        this->d->chr = other.d->chr;
-        this->d->image = other.d->image;
-        this->d->weight = other.d->weight;
+        this->d->m_chr = other.d->m_chr;
+        this->d->m_image = other.d->m_image;
+        this->d->m_weight = other.d->m_weight;
     }
 
     return *this;
 }
 
-QChar &Character::chr()
-{
-    return this->d->chr;
-}
-
 QChar Character::chr() const
 {
-    return this->d->chr;
+    return this->d->m_chr;
 }
 
-QImage &Character::image()
+const AkVideoPacket &Character::image() const
 {
-    return this->d->image;
+    return this->d->m_image;
 }
 
-QImage Character::image() const
+int Character::weight() const
 {
-    return this->d->image;
+    return this->d->m_weight;
 }
 
-int &Character::weight()
+AkVideoPacket CharacterPrivate::drawChar(const QChar &chr,
+                                         const QFont &font,
+                                         const QSize &fontSize) const
 {
-    return this->d->weight;
+    QImage fontImg(fontSize, QImage::Format_Grayscale8);
+    fontImg.fill(qRgb(0, 0, 0));
+
+    QPainter painter;
+    painter.begin(&fontImg);
+    painter.setPen(qRgb(255, 255, 255));
+    painter.setFont(font);
+    painter.drawText(fontImg.rect(), chr, Qt::AlignHCenter | Qt::AlignVCenter);
+    painter.end();
+
+    AkVideoPacket charSprite({AkVideoCaps::Format_gray8,
+                              fontSize.width(),
+                              fontSize.height(),
+                              {}});
+    auto lineSize = qMin<size_t>(fontImg.bytesPerLine(),
+                                 charSprite.lineSize(0));
+
+    for (int y = 0; y < fontSize.height(); y++)
+        memcpy(charSprite.line(0, y),
+               fontImg.constScanLine(y),
+               lineSize);
+
+    return charSprite;
 }
 
-int Character::weight() const
+int CharacterPrivate::imageWeight(const AkVideoPacket &image, bool reversed) const
 {
-    return this->d->weight;
+    int weight = 0;
+
+    for (int y = 0; y < image.caps().height(); y++) {
+        auto imageLine = image.constLine(0, y);
+
+        for (int x = 0; x < image.caps().width(); x++)
+            weight += imageLine[x];
+    }
+
+    weight /= image.caps().width() * image.caps().height();
+
+    if (reversed)
+        weight = 255 - weight;
+
+    return weight;
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Charify/src/character.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Charify/src/character.h
@@ -22,22 +22,24 @@
 
 class CharacterPrivate;
 class QChar;
-class QImage;
+class QFont;
+class QSize;
+class AkVideoPacket;
 
 class Character
 {
     public:
         Character();
-        Character(const QChar &chr, const QImage &image, int weight);
+        Character(const QChar &chr,
+                  const QFont &font,
+                  const QSize &fontSize,
+                  bool reversed);
         Character(const Character &other);
         ~Character();
         Character &operator =(const Character &other);
 
-        QChar &chr();
         QChar chr() const;
-        QImage &image();
-        QImage image() const;
-        int &weight();
+        const AkVideoPacket &image() const;
         int weight() const;
 
     private:
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Charify/src/charify.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Charify/src/charify.cpp
@@ -17,6 +17,8 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
+#include <QQmlEngine>
+
 #include "charify.h"
 #include "charifyelement.h"
 
@@ -24,6 +26,9 @@ QObject *Charify::create(const QString &
 {
     Q_UNUSED(key)
     Q_UNUSED(specification)
+    qRegisterMetaType<CharifyElement::ColorMode>("CharifyElementColorMode");
+    qRegisterMetaTypeStreamOperators<CharifyElement::ColorMode>("CharifyElementColorMode");
+    qmlRegisterType<CharifyElement>("CharifyElement", 1, 0, "CharifyElement");
 
     return new CharifyElement();
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Charify/src/charify.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Charify/src/charify.h
@@ -29,8 +29,8 @@ class Charify: public QObject, public Ak
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // CHARIFY_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Charify/src/charifyelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Charify/src/charifyelement.cpp
@@ -18,36 +18,25 @@
  */
 
 #include <QApplication>
-#include <QPainter>
-#include <QQmlContext>
+#include <QDataStream>
+#include <QFontMetrics>
 #include <QMutex>
+#include <QQmlContext>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
+#include <akvideomixer.h>
 #include <akvideopacket.h>
 
 #include "charifyelement.h"
 #include "character.h"
 
-using ColorModeToStr = QMap<CharifyElement::ColorMode, QString>;
-
-inline ColorModeToStr initColorModeToStr()
-{
-    ColorModeToStr colorModeToStr {
-        {CharifyElement::ColorModeNatural, "natural"},
-        {CharifyElement::ColorModeFixed  , "fixed"  }
-    };
-
-    return colorModeToStr;
-}
-
-Q_GLOBAL_STATIC_WITH_ARGS(ColorModeToStr,
-                          colorModeToStr,
-                          (initColorModeToStr()))
-
 using HintingPreferenceToStr = QMap<QFont::HintingPreference, QString>;
 
 inline HintingPreferenceToStr initHintingPreferenceToStr()
 {
-    HintingPreferenceToStr hintingPreferenceToStr {
+    static const HintingPreferenceToStr hintingPreferenceToStr {
         {QFont::PreferDefaultHinting , "PreferDefaultHinting" },
         {QFont::PreferNoHinting      , "PreferNoHinting"      },
         {QFont::PreferVerticalHinting, "PreferVerticalHinting"},
@@ -65,7 +54,7 @@ using StyleStrategyToStr = QMap<QFont::S
 
 inline StyleStrategyToStr initStyleStrategyToStr()
 {
-    StyleStrategyToStr styleStrategyToStr {
+    static const StyleStrategyToStr styleStrategyToStr {
         {QFont::PreferDefault      , "PreferDefault"      },
         {QFont::PreferBitmap       , "PreferBitmap"       },
         {QFont::PreferDevice       , "PreferDevice"       },
@@ -91,90 +80,55 @@ Q_GLOBAL_STATIC_WITH_ARGS(StyleStrategyT
 class CharifyElementPrivate
 {
     public:
+        AkVideoConverter m_videoConverter;
+        AkVideoMixer m_videoMixer;
         CharifyElement::ColorMode m_mode {CharifyElement::ColorModeNatural};
         QString m_charTable;
         QFont m_font {QApplication::font()};
         QRgb m_foregroundColor {qRgb(255, 255, 255)};
         QRgb m_backgroundColor {qRgb(0, 0, 0)};
-        QVector<Character> m_characters;
-        QVector<QRgb> m_grayToForeBackTable;
+        Character *m_characters {nullptr};
+        QRgb m_palette[256];
+        int m_colorTable[256];
         QSize m_fontSize;
         QMutex m_mutex;
+        bool m_smooth {true};
         bool m_reversed {false};
 
+        void updateCharTable();
+        void updatePalette();
         QSize fontSize(const QString &chrTable, const QFont &font) const;
-        QImage drawChar(const QChar &chr,
-                        const QFont &font,
-                        const QSize &fontSize) const;
-        int imageWeight(const QImage &image, bool reversed) const;
-        QImage createMask(const QImage &image,
-                          const QSize &fontSize,
-                          const QVector<Character> &characters) const;
+        QSize fontSize(const QChar &chr, const QFont &font) const;
+        AkVideoPacket createMask(const AkVideoPacket &src,
+                                 const QSize &fontSize,
+                                 const Character *characters);
 };
 
 CharifyElement::CharifyElement(): AkElement()
 {
     this->d = new CharifyElementPrivate;
+    this->d->m_videoMixer.setFlags(AkVideoMixer::MixerFlagLightweightCache);
 
     for (int i = 32; i < 127; i++)
         this->d->m_charTable.append(QChar(i));
 
     this->d->m_font.setHintingPreference(QFont::PreferFullHinting);
     this->d->m_font.setStyleStrategy(QFont::NoAntialias);
-
-    this->updateCharTable();
-    this->updateGrayToForeBackTable();
-
-    QObject::connect(this,
-                     &CharifyElement::modeChanged,
-                     this,
-                     &CharifyElement::updateCharTable);
-    QObject::connect(this,
-                     &CharifyElement::charTableChanged,
-                     this,
-                     &CharifyElement::updateCharTable);
-    QObject::connect(this,
-                     &CharifyElement::fontChanged,
-                     this,
-                     &CharifyElement::updateCharTable);
-    QObject::connect(this,
-                     &CharifyElement::hintingPreferenceChanged,
-                     this,
-                     &CharifyElement::updateCharTable);
-    QObject::connect(this,
-                     &CharifyElement::styleStrategyChanged,
-                     this,
-                     &CharifyElement::updateCharTable);
-    QObject::connect(this,
-                     &CharifyElement::foregroundColorChanged,
-                     this,
-                     &CharifyElement::updateCharTable);
-    QObject::connect(this,
-                     &CharifyElement::foregroundColorChanged,
-                     this,
-                     &CharifyElement::updateGrayToForeBackTable);
-    QObject::connect(this,
-                     &CharifyElement::backgroundColorChanged,
-                     this,
-                     &CharifyElement::updateCharTable);
-    QObject::connect(this,
-                     &CharifyElement::backgroundColorChanged,
-                     this,
-                     &CharifyElement::updateGrayToForeBackTable);
-    QObject::connect(this,
-                     &CharifyElement::reversedChanged,
-                     this,
-                     &CharifyElement::updateCharTable);
+    this->d->updateCharTable();
+    this->d->updatePalette();
 }
 
 CharifyElement::~CharifyElement()
 {
+    if (this->d->m_characters)
+        delete [] this->d->m_characters;
+
     delete this->d;
 }
 
-QString CharifyElement::mode() const
+CharifyElement::ColorMode CharifyElement::mode() const
 {
-    return colorModeToStr->value(this->d->m_mode);
+    return this->d->m_mode;
 }
 
 QString CharifyElement::charTable() const
@@ -209,6 +163,11 @@ QRgb CharifyElement::backgroundColor() c
     return this->d->m_backgroundColor;
 }
 
+bool CharifyElement::smooth() const
+{
+    return this->d->m_smooth;
+}
+
 bool CharifyElement::reversed() const
 {
     return this->d->m_reversed;
@@ -232,47 +191,67 @@ void CharifyElement::controlInterfaceCon
 
 AkPacket CharifyElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_mutex.lock();
+    auto fontSize = this->d->m_fontSize;
 
-    if (src.isNull())
-        return {};
+    int textWidth = packet.caps().width() / fontSize.width();
+    int textHeight = packet.caps().height() / fontSize.height();
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
+    if (this->d->m_charTable.isEmpty()) {
+        this->d->m_mutex.unlock();
 
-    this->d->m_mutex.lock();
-    auto fontSize = this->d->m_fontSize;
+        AkVideoPacket dst({AkVideoCaps::Format_argbpack,
+                           textWidth * fontSize.width(),
+                           textHeight * fontSize.height(),
+                           packet.caps().fps()});
+        dst.copyMetadata(packet);
+        dst.fill(this->d->m_backgroundColor);
 
-    int textWidth = src.width() / fontSize.width();
-    int textHeight = src.height() / fontSize.height();
+        if (dst)
+            emit this->oStream(dst);
 
-    int outWidth = textWidth * fontSize.width();
-    int outHeight = textHeight * fontSize.height();
+        return dst;
+    }
 
-    QImage oFrame(outWidth, outHeight, src.format());
+    this->d->m_videoConverter.setScalingMode(this->d->m_smooth?
+                                                 AkVideoConverter::ScalingMode_Linear:
+                                                 AkVideoConverter::ScalingMode_Fast);
+
+    this->d->m_videoConverter.begin();
+    this->d->m_videoConverter.setOutputCaps({AkVideoCaps::Format_argbpack,
+                                             textWidth,
+                                             textHeight,
+                                             {}});
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (this->d->m_characters.isEmpty()) {
+    if (!src) {
         this->d->m_mutex.unlock();
-        oFrame.fill(this->d->m_backgroundColor);
-        auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
 
-        if (oPacket)
-            emit this->oStream(oPacket);
-
-        return oPacket;
+        return {};
     }
 
+    int outWidth = textWidth * fontSize.width();
+    int outHeight = textHeight * fontSize.height();
+
     auto mask = this->d->createMask(src, fontSize, this->d->m_characters);
     this->d->m_mutex.unlock();
 
+    auto ocaps = src.caps();
+    ocaps.setWidth(outWidth);
+    ocaps.setHeight(outHeight);
+    AkVideoPacket dst(ocaps);
+    dst.copyMetadata(src);
+
     if (this->d->m_mode == ColorModeFixed) {
         this->d->m_mutex.lock();
 
-        for (int y = 0; y < oFrame.height(); y++) {
-            auto line = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-            auto maskLine = reinterpret_cast<const quint8 *>(mask.constScanLine(y));
+        for (int y = 0; y < dst.caps().height(); y++) {
+            auto maskLine = mask.constLine(0, y);
+            auto line = reinterpret_cast<QRgb *>(dst.line(0, y));
 
-            for (int x = 0; x < oFrame.width(); x++)
-                line[x] = this->d->m_grayToForeBackTable[maskLine[x]];
+            for (int x = 0; x < dst.caps().width(); x++)
+                line[x] = this->d->m_palette[maskLine[x]];
         }
 
         this->d->m_mutex.unlock();
@@ -281,43 +260,38 @@ AkPacket CharifyElement::iVideoStream(co
         auto bg = qGreen(this->d->m_backgroundColor);
         auto bb = qBlue(this->d->m_backgroundColor);
 
-        for (int y = 0; y < oFrame.height(); y++) {
-            int ys = y * (src.height() - 1) / (oFrame.height() - 1);
-            auto dstLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-            auto srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(ys));
-            auto maskLine = reinterpret_cast<const quint8 *>(mask.constScanLine(y));
-
-            for (int x = 0; x < oFrame.width(); x++) {
-                int xs = x * (src.width() - 1);
-
-                if (textWidth > 1)
-                    xs /= oFrame.width() - 1;
-
-                auto alpha = maskLine[x];
-                dstLine[x] = qRgb((alpha * qRed(srcLine[xs])   + (255 - alpha) * br) / 255,
-                                  (alpha * qGreen(srcLine[xs]) + (255 - alpha) * bg) / 255,
-                                  (alpha * qBlue(srcLine[xs])  + (255 - alpha) * bb) / 255);
+        for (int y = 0; y < dst.caps().height(); y++) {
+            int ys = y / fontSize.height();
+            auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, ys));
+            auto maskLine = mask.constLine(0, y);
+            auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+            for (int x = 0; x < dst.caps().width(); x++) {
+                int xs = x / fontSize.width();
+
+                auto &pixel = srcLine[xs];
+                auto &alpha = maskLine[x];
+                dstLine[x] = qRgb((alpha * qRed(pixel)   + (255 - alpha) * br) / 255,
+                                  (alpha * qGreen(pixel) + (255 - alpha) * bg) / 255,
+                                  (alpha * qBlue(pixel)  + (255 - alpha) * bb) / 255);
             }
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
+    if (dst)
+        emit this->oStream(dst);
 
-    if (oPacket)
-        emit this->oStream(oPacket);
-
-    return oPacket;
+    return dst;
 }
 
-void CharifyElement::setMode(const QString &mode)
+void CharifyElement::setMode(ColorMode mode)
 {
-    ColorMode modeEnum = colorModeToStr->key(mode, ColorModeFixed);
-
-    if (this->d->m_mode == modeEnum)
+    if (this->d->m_mode == mode)
         return;
 
-    this->d->m_mode = modeEnum;
+    this->d->m_mode = mode;
     emit this->modeChanged(mode);
+    this->d->updateCharTable();
 }
 
 void CharifyElement::setCharTable(const QString &charTable)
@@ -325,7 +299,10 @@ void CharifyElement::setCharTable(const
     if (this->d->m_charTable == charTable)
         return;
 
+    this->d->m_mutex.lock();
     this->d->m_charTable = charTable;
+    this->d->updateCharTable();
+    this->d->m_mutex.unlock();
     emit this->charTableChanged(charTable);
 }
 
@@ -334,6 +311,7 @@ void CharifyElement::setFont(const QFont
     if (this->d->m_font == font)
         return;
 
+    this->d->m_mutex.lock();
     auto hp = hintingPreferenceToStr->key(this->hintingPreference(),
                                           QFont::PreferFullHinting);
     auto ss = styleStrategyToStr->key(this->styleStrategy(),
@@ -342,6 +320,8 @@ void CharifyElement::setFont(const QFont
     this->d->m_font = font;
     this->d->m_font.setHintingPreference(hp);
     this->d->m_font.setStyleStrategy(ss);
+    this->d->updateCharTable();
+    this->d->m_mutex.unlock();
     emit this->fontChanged(font);
 }
 
@@ -353,8 +333,11 @@ void CharifyElement::setHintingPreferenc
     if (this->d->m_font.hintingPreference() == hp)
         return;
 
+    this->d->m_mutex.lock();
     this->d->m_font.setHintingPreference(hp);
-    emit hintingPreferenceChanged(hintingPreference);
+    this->d->updateCharTable();
+    this->d->m_mutex.unlock();
+    emit this->hintingPreferenceChanged(hintingPreference);
 }
 
 void CharifyElement::setStyleStrategy(const QString &styleStrategy)
@@ -364,8 +347,11 @@ void CharifyElement::setStyleStrategy(co
     if (this->d->m_font.styleStrategy() == ss)
         return;
 
+    this->d->m_mutex.lock();
     this->d->m_font.setStyleStrategy(ss);
-    emit styleStrategyChanged(styleStrategy);
+    this->d->updateCharTable();
+    this->d->m_mutex.unlock();
+    emit this->styleStrategyChanged(styleStrategy);
 }
 
 void CharifyElement::setForegroundColor(QRgb foregroundColor)
@@ -373,7 +359,10 @@ void CharifyElement::setForegroundColor(
     if (this->d->m_foregroundColor == foregroundColor)
         return;
 
+    this->d->m_mutex.lock();
     this->d->m_foregroundColor = foregroundColor;
+    this->d->updatePalette();
+    this->d->m_mutex.unlock();
     emit this->foregroundColorChanged(foregroundColor);
 }
 
@@ -382,22 +371,37 @@ void CharifyElement::setBackgroundColor(
     if (this->d->m_backgroundColor == backgroundColor)
         return;
 
+    this->d->m_mutex.lock();
     this->d->m_backgroundColor = backgroundColor;
+    this->d->updatePalette();
+    this->d->m_mutex.unlock();
     emit this->backgroundColorChanged(backgroundColor);
 }
 
+void CharifyElement::setSmooth(bool smooth)
+{
+    if (this->d->m_smooth == smooth)
+        return;
+
+    this->d->m_smooth = smooth;
+    emit this->smoothChanged(smooth);
+}
+
 void CharifyElement::setReversed(bool reversed)
 {
     if (this->d->m_reversed == reversed)
         return;
 
+    this->d->m_mutex.lock();
     this->d->m_reversed = reversed;
+    this->d->updateCharTable();
+    this->d->m_mutex.unlock();
     emit this->reversedChanged(reversed);
 }
 
 void CharifyElement::resetMode()
 {
-    this->setMode("natural");
+    this->setMode(ColorModeNatural);
 }
 
 void CharifyElement::resetCharTable()
@@ -435,70 +439,85 @@ void CharifyElement::resetBackgroundColo
     this->setBackgroundColor(qRgb(0, 0, 0));
 }
 
+void CharifyElement::resetSmooth()
+{
+    this->setSmooth(true);
+}
+
 void CharifyElement::resetReversed()
 {
     this->setReversed(false);
 }
 
-void CharifyElement::updateCharTable()
+QDataStream &operator >>(QDataStream &istream, CharifyElement::ColorMode &mode)
 {
-    QList<Character> characters;
-    auto fontSize = this->d->fontSize(this->d->m_charTable, this->d->m_font);
+    int modeInt;
+    istream >> modeInt;
+    mode = static_cast<CharifyElement::ColorMode>(modeInt);
 
-    QVector<QRgb> colorTable(256);
+    return istream;
+}
 
-    for (int i = 0; i < 256; i++)
-        colorTable[i] = qRgb(i, i, i);
+QDataStream &operator <<(QDataStream &ostream, CharifyElement::ColorMode mode)
+{
+    ostream << static_cast<int>(mode);
 
-    for (auto &chr: this->d->m_charTable) {
-        auto image = this->d->drawChar(chr,
-                                       this->d->m_font,
-                                       fontSize);
-        int weight = this->d->imageWeight(image, this->d->m_reversed);
-        characters << Character(chr, image, weight);
-    }
+    return ostream;
+}
 
-    QMutexLocker locker(&this->d->m_mutex);
+void CharifyElementPrivate::updateCharTable()
+{
+    if (this->m_characters)
+        delete [] this->m_characters;
 
-    this->d->m_fontSize = fontSize;
+    if (this->m_charTable.isEmpty()) {
+        this->m_fontSize = this->fontSize(' ', this->m_font);
+        this->m_characters = new Character [1];
+        this->m_characters[0] = Character(' ',
+                                          this->m_font,
+                                          this->m_fontSize,
+                                          this->m_reversed);
+        memset(this->m_colorTable, 0, 256);
+    } else {
+        this->m_fontSize = this->fontSize(this->m_charTable, this->m_font);
+        this->m_characters = new Character [this->m_charTable.size()];
+        int i = 0;
+
+        for (auto &chr: this->m_charTable) {
+            this->m_characters[i] = Character(chr,
+                                              this->m_font,
+                                              this->m_fontSize,
+                                              this->m_reversed);
+            i++;
+        }
 
-    if (characters.isEmpty()) {
-        this->d->m_characters.clear();
+        std::sort(this->m_characters,
+                  this->m_characters + this->m_charTable.size(),
+                  [] (const Character &chr1, const Character &chr2) {
+                      return chr1.weight() < chr2.weight();
+                  });
 
-        return;
-    }
+        auto charMax = this->m_charTable.size() - 1;
 
-    this->d->m_characters.resize(256);
-    std::sort(characters.begin(),
-              characters.end(),
-              [] (const Character &chr1, const Character &chr2) {
-                  return chr1.weight() < chr2.weight();
-              });
-
-    for (int i = 0; i < 256; i++) {
-        int c = i * (characters.size() - 1) / 255;
-        this->d->m_characters[i] = characters[c];
+        for (int i = 0; i < 256; i++)
+            this->m_colorTable[i] = charMax * i / 255;
     }
 }
 
-void CharifyElement::updateGrayToForeBackTable()
+void CharifyElementPrivate::updatePalette()
 {
-    QMutexLocker locker(&this->d->m_mutex);
-
-    auto fr = qRed(this->d->m_foregroundColor);
-    auto fg = qGreen(this->d->m_foregroundColor);
-    auto fb = qBlue(this->d->m_foregroundColor);
-
-    auto br = qRed(this->d->m_backgroundColor);
-    auto bg = qGreen(this->d->m_backgroundColor);
-    auto bb = qBlue(this->d->m_backgroundColor);
-
-    this->d->m_grayToForeBackTable.clear();
+    auto fr = qRed(this->m_foregroundColor);
+    auto fg = qGreen(this->m_foregroundColor);
+    auto fb = qBlue(this->m_foregroundColor);
+
+    auto br = qRed(this->m_backgroundColor);
+    auto bg = qGreen(this->m_backgroundColor);
+    auto bb = qBlue(this->m_backgroundColor);
 
     for (int i = 0; i < 256; i++)
-        this->d->m_grayToForeBackTable << qRgb((i * fr + (255 - i) * br) / 255,
-                                               (i * fg + (255 - i) * bg) / 255,
-                                               (i * fb + (255 - i) * bb) / 255);
+        this->m_palette[i] = qRgb((i * fr + (255 - i) * br) / 255,
+                                  (i * fg + (255 - i) * bg) / 255,
+                                  (i * fb + (255 - i) * bb) / 255);
 }
 
 QSize CharifyElementPrivate::fontSize(const QString &chrTable,
@@ -521,75 +540,40 @@ QSize CharifyElementPrivate::fontSize(co
     return {width, height};
 }
 
-QImage CharifyElementPrivate::drawChar(const QChar &chr,
-                                       const QFont &font,
-                                       const QSize &fontSize) const
-{
-    QImage fontImg(fontSize, QImage::Format_Grayscale8);
-    fontImg.fill(qRgb(0, 0, 0));
-
-    QPainter painter;
-    painter.begin(&fontImg);
-    painter.setPen(qRgb(255, 255, 255));
-    painter.setFont(font);
-    painter.drawText(fontImg.rect(), chr, Qt::AlignHCenter | Qt::AlignVCenter);
-    painter.end();
-
-    return fontImg;
-}
-
-int CharifyElementPrivate::imageWeight(const QImage &image, bool reversed) const
+QSize CharifyElementPrivate::fontSize(const QChar &chr, const QFont &font) const
 {
-    int weight = 0;
-
-    for (int y = 0; y < image.height(); y++) {
-        auto imageLine = reinterpret_cast<const quint8 *>(image.constScanLine(y));
-
-        for (int x = 0; x < image.width(); x++)
-            weight += imageLine[x];
-    }
-
-    weight /= image.width() * image.height();
-
-    if (reversed)
-        weight = 255 - weight;
-
-    return weight;
+    return QFontMetrics(font).size(Qt::TextSingleLine, chr);
 }
 
-QImage CharifyElementPrivate::createMask(const QImage &image,
-                                         const QSize &fontSize,
-                                         const QVector<Character> &characters) const
+AkVideoPacket CharifyElementPrivate::createMask(const AkVideoPacket &src,
+                                                const QSize &fontSize,
+                                                const Character *characters)
 {
-    int textWidth = image.width() / fontSize.width();
-    int textHeight = image.height() / fontSize.height();
-
-    int outWidth = textWidth * fontSize.width();
-    int outHeight = textHeight * fontSize.height();
-
-    QImage oFrame(outWidth, outHeight, QImage::Format_Grayscale8);
-
-    QPainter painter;
-    painter.begin(&oFrame);
+    int outWidth = src.caps().width() * fontSize.width();
+    int outHeight = src.caps().height() * fontSize.height();
 
-    for (int y = 0; y < textHeight; y++) {
-        int ys = y * (image.height() - 1) / (textHeight - 1);
-        auto srcLine = reinterpret_cast<const QRgb *>(image.constScanLine(ys));
+    AkVideoPacket dst({AkVideoCaps::Format_gray8,
+                       outWidth,
+                       outHeight,
+                       src.caps().fps()});
+    dst.copyMetadata(src);
 
-        for (int x = 0; x < textWidth; x++) {
-            int xs = x * (image.width() - 1);
+    this->m_videoMixer.begin(&dst);
 
-            if (textWidth > 1)
-                xs /= textWidth - 1;
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto ys = y * fontSize.height();
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
 
-            auto gray = qGray(srcLine[xs]);
-            painter.drawImage(x * fontSize.width(), y * fontSize.height(), characters[gray].image());
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto xs = x * fontSize.width();
+            auto &chr = characters[this->m_colorTable[qGray(srcLine[x])]];
+            this->m_videoMixer.draw(xs, ys, chr.image());
         }
     }
 
-    painter.end();
+    this->m_videoMixer.end();
 
-    return oFrame;
+    return dst;
 }
 
 #include "moc_charifyelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Charify/src/charifyelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Charify/src/charifyelement.h
@@ -28,8 +28,7 @@ class CharifyElementPrivate;
 class CharifyElement: public AkElement
 {
     Q_OBJECT
-    Q_ENUMS(ColorMode)
-    Q_PROPERTY(QString mode
+    Q_PROPERTY(ColorMode mode
                READ mode
                WRITE setMode
                RESET resetMode
@@ -64,6 +63,11 @@ class CharifyElement: public AkElement
                WRITE setBackgroundColor
                RESET resetBackgroundColor
                NOTIFY backgroundColorChanged)
+    Q_PROPERTY(bool smooth
+               READ smooth
+               WRITE setSmooth
+               RESET resetSmooth
+               NOTIFY smoothChanged)
     Q_PROPERTY(bool reversed
                READ reversed
                WRITE setReversed
@@ -76,46 +80,50 @@ class CharifyElement: public AkElement
             ColorModeNatural,
             ColorModeFixed
         };
+        Q_ENUM(ColorMode)
 
         CharifyElement();
         ~CharifyElement();
 
-        Q_INVOKABLE QString mode() const;
+        Q_INVOKABLE ColorMode mode() const;
         Q_INVOKABLE QString charTable() const;
         Q_INVOKABLE QFont font() const;
         Q_INVOKABLE QString hintingPreference() const;
         Q_INVOKABLE QString styleStrategy() const;
         Q_INVOKABLE QRgb foregroundColor() const;
         Q_INVOKABLE QRgb backgroundColor() const;
+        Q_INVOKABLE bool smooth() const;
         Q_INVOKABLE bool reversed() const;
 
     private:
         CharifyElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
-        void modeChanged(const QString &mode);
+        void modeChanged(ColorMode mode);
         void charTableChanged(const QString &charTable);
         void fontChanged(const QFont &font);
         void hintingPreferenceChanged(const QString &hintingPreference);
         void styleStrategyChanged(const QString &styleStrategy);
         void foregroundColorChanged(QRgb foregroundColor);
         void backgroundColorChanged(QRgb backgroundColor);
+        void smoothChanged(bool smooth);
         void reversedChanged(bool reversed);
 
     public slots:
-        void setMode(const QString &mode);
+        void setMode(CharifyElement::ColorMode mode);
         void setCharTable(const QString &charTable);
         void setFont(const QFont &font);
         void setHintingPreference(const QString &hintingPreference);
         void setStyleStrategy(const QString &styleStrategy);
         void setForegroundColor(QRgb foregroundColor);
         void setBackgroundColor(QRgb backgroundColor);
+        void setSmooth(bool smooth);
         void setReversed(bool reversed);
         void resetMode();
         void resetCharTable();
@@ -124,11 +132,13 @@ class CharifyElement: public AkElement
         void resetStyleStrategy();
         void resetForegroundColor();
         void resetBackgroundColor();
+        void resetSmooth();
         void resetReversed();
-
-    private slots:
-        void updateCharTable();
-        void updateGrayToForeBackTable();
 };
 
+Q_DECL_EXPORT QDataStream &operator >>(QDataStream &istream, CharifyElement::ColorMode &mode);
+Q_DECL_EXPORT QDataStream &operator <<(QDataStream &ostream, CharifyElement::ColorMode mode);
+
+Q_DECLARE_METATYPE(CharifyElement::ColorMode)
+
 #endif // CHARIFYELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Cinema/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Cinema/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Cinema
 target_compile_definitions(Cinema PRIVATE AVKYS_PLUGIN_CINEMA)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Cinema avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Cinema RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Cinema/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Cinema/share/qml/main.qml
@@ -32,7 +32,7 @@ GridLayout {
         function onStripSizeChanged(stripSize)
         {
             sldStripSize.value = stripSize
-            spbStripSize.value = spbStripSize.multiplier * stripSize
+            spbStripSize.value = stripSize * spbStripSize.multiplier
         }
     }
 
@@ -47,6 +47,7 @@ GridLayout {
         stepSize: 0.01
         to: 1
         Layout.fillWidth: true
+        Accessible.name: lblStripSize.text
 
         onValueChanged: Cinema.stripSize = value
     }
@@ -56,6 +57,7 @@ GridLayout {
         to: multiplier * sldStripSize.to
         stepSize: multiplier * sldStripSize.stepSize
         editable: true
+        Accessible.name: lblStripSize.text
 
         readonly property int decimals: 2
         readonly property int multiplier: Math.pow(10, decimals)
@@ -75,6 +77,7 @@ GridLayout {
 
     // Configure strip color.
     Label {
+        id: txtColor
         text: qsTr("Color")
     }
     RowLayout {
@@ -87,6 +90,7 @@ GridLayout {
             currentColor: AkUtils.fromRgba(Cinema.stripColor)
             title: qsTr("Choose the strips color")
             showAlphaChannel: true
+            Accessible.description: txtColor.text
 
             onCurrentColorChanged: Cinema.stripColor = AkUtils.toRgba(currentColor)
         }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Cinema/src/cinema.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Cinema/src/cinema.h
@@ -29,8 +29,8 @@ class Cinema: public QObject, public AkP
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // CINEMA_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Cinema/src/cinemaelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Cinema/src/cinemaelement.cpp
@@ -17,10 +17,11 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
-#include <QtMath>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "cinemaelement.h"
@@ -30,15 +31,39 @@ class CinemaElementPrivate
     public:
         qreal m_stripSize {0.5};
         QRgb m_stripColor {qRgb(0, 0, 0)};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+        qint64 *m_aiMultTable {nullptr};
+        qint64 *m_aoMultTable {nullptr};
+        qint64 *m_alphaDivTable {nullptr};
 };
 
 CinemaElement::CinemaElement(): AkElement()
 {
     this->d = new CinemaElementPrivate;
+
+    constexpr qint64 maxAi = 255;
+    constexpr qint64 maxAi2 = maxAi * maxAi;
+    constexpr qint64 alphaMult = 1 << 16;
+    this->d->m_aiMultTable = new qint64 [alphaMult];
+    this->d->m_aoMultTable = new qint64 [alphaMult];
+    this->d->m_alphaDivTable = new qint64 [alphaMult];
+
+    for (qint64 ai = 0; ai < 256; ai++)
+        for (qint64 ao = 0; ao < 256; ao++) {
+            auto alphaMask = (ai << 8) | ao;
+            auto a = maxAi2 - (maxAi - ai) * (maxAi - ao);
+            this->d->m_aiMultTable[alphaMask] = a? alphaMult * ai * maxAi / a: 0;
+            this->d->m_aoMultTable[alphaMask] = a? alphaMult * ao * (maxAi - ai) / a: 0;
+            this->d->m_alphaDivTable[alphaMask] = a / maxAi;
+        }
 }
 
 CinemaElement::~CinemaElement()
 {
+    delete [] this->d->m_aiMultTable;
+    delete [] this->d->m_aoMultTable;
+    delete [] this->d->m_alphaDivTable;
+
     delete this->d;
 }
 
@@ -70,36 +95,55 @@ void CinemaElement::controlInterfaceConf
 
 AkPacket CinemaElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+    int cy = src.caps().height() >> 1;
+    auto stripSize = int(cy * this->d->m_stripSize);
+    qint64 ri = qRed(this->d->m_stripColor);
+    qint64 gi = qGreen(this->d->m_stripColor);
+    qint64 bi = qBlue(this->d->m_stripColor);
+    qint64 ai = qAlpha(this->d->m_stripColor);
+    auto iLineSize = src.lineSize(0);
+    auto oLineSize = dst.lineSize(0);
+    auto lineSize = qMin(iLineSize, oLineSize);
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        int k = cy - qAbs(y - cy);
+        auto iLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto oLine = reinterpret_cast<QRgb *>(dst.line(0, y));
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
-    int cy = src.height() >> 1;
-
-    for (int y = 0; y < src.height(); y++) {
-        qreal k = 1.0 - qAbs(y - cy) / qreal(cy);
-        auto iLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        auto oLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-
-        if (k > this->d->m_stripSize)
-            memcpy(oLine, iLine, size_t(src.bytesPerLine()));
+        if (k > stripSize)
+            memcpy(oLine, iLine, lineSize);
         else
-            for (int x = 0; x < src.width(); x++) {
-                qreal a = qAlpha(this->d->m_stripColor) / 255.0;
+            for (int x = 0; x < src.caps().width(); x++) {
+                auto &pixel = iLine[x];
 
-                int r = int(a * (qRed(this->d->m_stripColor) - qRed(iLine[x])) + qRed(iLine[x]));
-                int g = int(a * (qGreen(this->d->m_stripColor) - qGreen(iLine[x])) + qGreen(iLine[x]));
-                int b = int(a * (qBlue(this->d->m_stripColor) - qBlue(iLine[x])) + qBlue(iLine[x]));
+                qint64 ro = qRed(pixel);
+                qint64 go = qGreen(pixel);
+                qint64 bo = qBlue(pixel);
+                qint64 ao = qAlpha(pixel);
+
+                auto alphaMask = (ai << 8) | ao;
+                qint64 rt = (ri * this->d->m_aiMultTable[alphaMask] + ro * this->d->m_aoMultTable[alphaMask]) >> 16;
+                qint64 gt = (gi * this->d->m_aiMultTable[alphaMask] + go * this->d->m_aoMultTable[alphaMask]) >> 16;
+                qint64 bt = (bi * this->d->m_aiMultTable[alphaMask] + bo * this->d->m_aoMultTable[alphaMask]) >> 16;
+                qint64 &at = this->d->m_alphaDivTable[alphaMask];
 
-                oLine[x] = qRgba(r, g, b, qAlpha(iLine[x]));
+                oLine[x] = qRgba(int(rt), int(gt), int(bt), int(at));
             }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void CinemaElement::setStripSize(qreal stripSize)
@@ -111,13 +155,13 @@ void CinemaElement::setStripSize(qreal s
     emit this->stripSizeChanged(stripSize);
 }
 
-void CinemaElement::setStripColor(QRgb hideColor)
+void CinemaElement::setStripColor(QRgb stripColor)
 {
-    if (this->d->m_stripColor == hideColor)
+    if (this->d->m_stripColor == stripColor)
         return;
 
-    this->d->m_stripColor = hideColor;
-    emit this->stripColorChanged(hideColor);
+    this->d->m_stripColor = stripColor;
+    emit this->stripColorChanged(stripColor);
 }
 
 void CinemaElement::resetStripSize()
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Cinema/src/cinemaelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Cinema/src/cinemaelement.h
@@ -50,10 +50,10 @@ class CinemaElement: public AkElement
         CinemaElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void stripSizeChanged(qreal stripSize);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorFilter/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorFilter/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(ColorFilter
 target_compile_definitions(ColorFilter PRIVATE AVKYS_PLUGIN_COLORFILTER)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(ColorFilter avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS ColorFilter RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorFilter/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorFilter/share/qml/main.qml
@@ -38,6 +38,7 @@ GridLayout {
 
     // Configure strip color.
     Label {
+        id: txtColor
         text: qsTr("Color")
     }
     RowLayout {
@@ -51,6 +52,7 @@ GridLayout {
             title: qsTr("Select the color to filter")
             modality: Qt.NonModal
             showAlphaChannel: true
+            Accessible.description: txtColor.text
 
             onCurrentColorChanged: ColorFilter.colorf = AkUtils.toRgba(currentColor)
             onIsOpenChanged: ColorFilter.disable = isOpen
@@ -68,6 +70,7 @@ GridLayout {
         stepSize: 1
         to: 256
         Layout.fillWidth: true
+        Accessible.name: lblRadius.text
 
         onValueChanged: ColorFilter.radius = value
     }
@@ -77,6 +80,7 @@ GridLayout {
         to: sldRadius.to
         stepSize: sldRadius.stepSize
         editable: true
+        Accessible.name: lblRadius.text
 
         onValueChanged: ColorFilter.radius = Number(value)
     }
@@ -95,6 +99,7 @@ GridLayout {
         Switch {
             id: chkSoft
             checked: ColorFilter.soft
+            Accessible.name: lblSoft.text
 
             onCheckedChanged: ColorFilter.soft = checked
         }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorFilter/src/colorfilter.h
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorFilter/src/colorfilter.h
@@ -29,8 +29,8 @@ class ColorFilter: public QObject, publi
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // COLORFILTER_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorFilter/src/colorfilterelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorFilter/src/colorfilterelement.cpp
@@ -17,10 +17,12 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
 #include <QtMath>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "colorfilterelement.h"
@@ -29,9 +31,10 @@ class ColorFilterElementPrivate
 {
     public:
         QRgb m_color {qRgb(0, 0, 0)};
-        qreal m_radius {1.0};
+        int m_radius {1};
         bool m_soft {false};
         bool m_disable {false};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 };
 
 ColorFilterElement::ColorFilterElement(): AkElement()
@@ -49,7 +52,7 @@ QRgb ColorFilterElement::color() const
     return this->d->m_color;
 }
 
-qreal ColorFilterElement::radius() const
+int ColorFilterElement::radius() const
 {
     return this->d->m_radius;
 }
@@ -82,58 +85,71 @@ void ColorFilterElement::controlInterfac
 
 AkPacket ColorFilterElement::iVideoStream(const AkVideoPacket &packet)
 {
-    if (this->d->m_disable)
-        akSend(packet)
+    if (this->d->m_disable) {
+        if (packet)
+            emit this->oStream(packet);
 
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
-
-    for (int y = 0; y < src.height(); y++) {
-        auto srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        auto dstLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++) {
-            int r = qRed(srcLine[x]);
-            int g = qGreen(srcLine[x]);
-            int b = qBlue(srcLine[x]);
+        return packet;
+    }
 
-            int rf = qRed(this->d->m_color);
-            int gf = qGreen(this->d->m_color);
-            int bf = qBlue(this->d->m_color);
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    int rf = qRed(this->d->m_color);
+    int gf = qGreen(this->d->m_color);
+    int bf = qBlue(this->d->m_color);
+
+    auto radius = this->d->m_radius;
+    auto radius2 = radius * radius;
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto pixel = srcLine[x];
+            int r = qRed(pixel);
+            int g = qGreen(pixel);
+            int b = qBlue(pixel);
 
             int rd = r - rf;
             int gd = g - gf;
             int bd = b - bf;
 
-            qreal k = sqrt(rd * rd + gd * gd + bd * bd);
+            auto k = rd * rd + gd * gd + bd * bd;
 
-            if (k <= this->d->m_radius) {
+            if (k <= radius2) {
                 if (this->d->m_soft) {
-                    qreal p = k / this->d->m_radius;
+                    qreal p = qSqrt(k) / radius;
 
-                    int gray = qGray(srcLine[x]);
+                    int gray = qGray(pixel);
 
                     r = int(p * (gray - r) + r);
                     g = int(p * (gray - g) + g);
                     b = int(p * (gray - b) + b);
 
-                    dstLine[x] = qRgba(r, g, b, qAlpha(srcLine[x]));
-                } else
-                    dstLine[x] = srcLine[x];
+                    dstLine[x] = qRgba(r, g, b, qAlpha(pixel));
+                } else {
+                    dstLine[x] = pixel;
+                }
             } else {
-                int gray = qGray(srcLine[x]);
-                dstLine[x] = qRgba(gray, gray, gray, qAlpha(srcLine[x]));
+                int gray = qGray(pixel);
+                dstLine[x] = qRgba(gray, gray, gray, qAlpha(pixel));
             }
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void ColorFilterElement::setColor(QRgb color)
@@ -145,9 +161,9 @@ void ColorFilterElement::setColor(QRgb c
     emit this->colorChanged(color);
 }
 
-void ColorFilterElement::setRadius(qreal radius)
+void ColorFilterElement::setRadius(int radius)
 {
-    if (qFuzzyCompare(this->d->m_radius, radius))
+    if (this->d->m_radius == radius)
         return;
 
     this->d->m_radius = radius;
@@ -179,7 +195,7 @@ void ColorFilterElement::resetColor()
 
 void ColorFilterElement::resetRadius()
 {
-    this->setRadius(1.0);
+    this->setRadius(1);
 }
 
 void ColorFilterElement::resetSoft()
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorFilter/src/colorfilterelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorFilter/src/colorfilterelement.h
@@ -33,7 +33,7 @@ class ColorFilterElement: public AkEleme
                WRITE setColor
                RESET resetColor
                NOTIFY colorChanged)
-    Q_PROPERTY(qreal radius
+    Q_PROPERTY(int radius
                READ radius
                WRITE setRadius
                RESET resetRadius
@@ -54,7 +54,7 @@ class ColorFilterElement: public AkEleme
         ~ColorFilterElement();
 
         Q_INVOKABLE QRgb color() const;
-        Q_INVOKABLE qreal radius() const;
+        Q_INVOKABLE int radius() const;
         Q_INVOKABLE bool soft() const;
         Q_INVOKABLE bool disable() const;
 
@@ -62,20 +62,20 @@ class ColorFilterElement: public AkEleme
         ColorFilterElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void colorChanged(QRgb color);
-        void radiusChanged(qreal radius);
+        void radiusChanged(int radius);
         void softChanged(bool soft);
         void disableChanged(bool disable);
 
     public slots:
         void setColor(QRgb color);
-        void setRadius(qreal radius);
+        void setRadius(int radius);
         void setSoft(bool soft);
         void setDisable(bool disable);
         void resetColor();
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorReplace/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorReplace/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(ColorReplace
 target_compile_definitions(ColorReplace PRIVATE AVKYS_PLUGIN_COLORREPLACE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(ColorReplace avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS ColorReplace RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorReplace/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorReplace/share/qml/main.qml
@@ -38,6 +38,7 @@ GridLayout {
 
     // Color to replace.
     Label {
+        id: txtOldColor
         text: qsTr("Old color")
     }
     RowLayout {
@@ -51,6 +52,7 @@ GridLayout {
             title: qsTr("Select the color to replace")
             modality: Qt.NonModal
             showAlphaChannel: true
+            Accessible.description: txtOldColor.text
 
             onCurrentColorChanged: ColorReplace.from = AkUtils.toRgba(currentColor)
             onIsOpenChanged: ColorReplace.disable = isOpen
@@ -59,6 +61,7 @@ GridLayout {
 
     // Color to replace.
     Label {
+        id: txtNewColor
         text: qsTr("New color")
     }
     RowLayout {
@@ -72,6 +75,7 @@ GridLayout {
             title: qsTr("Select the new color")
             modality: Qt.NonModal
             showAlphaChannel: true
+            Accessible.description: txtNewColor.text
 
             onCurrentColorChanged: ColorReplace.to = AkUtils.toRgba(currentColor)
             onIsOpenChanged: ColorReplace.disable = isOpen
@@ -89,6 +93,7 @@ GridLayout {
         stepSize: 1
         to: 256
         Layout.fillWidth: true
+        Accessible.name: lblRadius.text
 
         onValueChanged: ColorReplace.radius = value
     }
@@ -98,7 +103,28 @@ GridLayout {
         to: sldRadius.to
         stepSize: sldRadius.stepSize
         editable: true
+        Accessible.name: lblRadius.text
 
         onValueChanged: ColorReplace.radius = Number(value)
     }
+
+    // Enable soft color replacing.
+    Label {
+        id: lblSoft
+        text: qsTr("Soft")
+    }
+    RowLayout {
+        Layout.columnSpan: 2
+
+        Item {
+            Layout.fillWidth: true
+        }
+        Switch {
+            id: chkSoft
+            checked: ColorReplace.soft
+            Accessible.name: lblSoft.text
+
+            onCheckedChanged: ColorReplace.soft = checked
+        }
+    }
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorReplace/src/colorreplace.h
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorReplace/src/colorreplace.h
@@ -29,8 +29,8 @@ class ColorReplace: public QObject, publ
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // COLORREPLACE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorReplace/src/colorreplaceelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorReplace/src/colorreplaceelement.cpp
@@ -17,10 +17,12 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
 #include <QtMath>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "colorreplaceelement.h"
@@ -30,8 +32,10 @@ class ColorReplaceElementPrivate
     public:
         QRgb m_from {qRgb(0, 0, 0)};
         QRgb m_to {qRgb(0, 0, 0)};
-        qreal m_radius {1.0};
+        int m_radius {1};
+        bool m_soft {true};
         bool m_disable {false};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 };
 
 ColorReplaceElement::ColorReplaceElement(): AkElement()
@@ -54,11 +58,16 @@ QRgb ColorReplaceElement::to() const
     return this->d->m_to;
 }
 
-qreal ColorReplaceElement::radius() const
+int ColorReplaceElement::radius() const
 {
     return this->d->m_radius;
 }
 
+bool ColorReplaceElement::soft() const
+{
+    return this->d->m_soft;
+}
+
 bool ColorReplaceElement::disable() const
 {
     return this->d->m_disable;
@@ -82,55 +91,72 @@ void ColorReplaceElement::controlInterfa
 
 AkPacket ColorReplaceElement::iVideoStream(const AkVideoPacket &packet)
 {
-    if (this->d->m_disable)
-        akSend(packet)
-
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
+    if (this->d->m_disable) {
+        if (packet)
+            emit this->oStream(packet);
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
-
-    for (int y = 0; y < src.height(); y++) {
-        const QRgb *srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        QRgb *dstLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++) {
-            int r = qRed(srcLine[x]);
-            int g = qGreen(srcLine[x]);
-            int b = qBlue(srcLine[x]);
+        return packet;
+    }
 
-            int rf = qRed(this->d->m_from);
-            int gf = qGreen(this->d->m_from);
-            int bf = qBlue(this->d->m_from);
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    int rf = qRed(this->d->m_from);
+    int gf = qGreen(this->d->m_from);
+    int bf = qBlue(this->d->m_from);
+
+    int rt = qRed(this->d->m_to);
+    int gt = qGreen(this->d->m_to);
+    int bt = qBlue(this->d->m_to);
+
+    auto radius = this->d->m_radius;
+    auto radius2 = radius * radius;
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto pixel = srcLine[x];
+            int r = qRed(pixel);
+            int g = qGreen(pixel);
+            int b = qBlue(pixel);
 
             int rd = r - rf;
             int gd = g - gf;
             int bd = b - bf;
 
-            qreal k = sqrt(rd * rd + gd * gd + bd * bd);
-
-            if (k <= this->d->m_radius) {
-                qreal p = k / this->d->m_radius;
+            auto k = rd * rd + gd * gd + bd * bd;
 
-                int rt = qRed(this->d->m_to);
-                int gt = qGreen(this->d->m_to);
-                int bt = qBlue(this->d->m_to);
-
-                r = int(p * (r - rt) + rt);
-                g = int(p * (g - gt) + gt);
-                b = int(p * (b - bt) + bt);
-
-                dstLine[x] = qRgba(r, g, b, qAlpha(srcLine[x]));
-            } else
-                dstLine[x] = srcLine[x];
+            if (k <= radius2) {
+                if (this->d->m_soft) {
+                    qreal p = qSqrt(k) / radius;
+
+                    r = int(p * (r - rt) + rt);
+                    g = int(p * (g - gt) + gt);
+                    b = int(p * (b - bt) + bt);
+
+                    dstLine[x] = qRgba(r, g, b, qAlpha(pixel));
+                } else {
+                    dstLine[x] = qRgba(rt, gt, bt, qAlpha(pixel));
+                }
+            } else {
+                dstLine[x] = pixel;
+            }
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void ColorReplaceElement::setFrom(QRgb from)
@@ -151,15 +177,24 @@ void ColorReplaceElement::setTo(QRgb to)
     emit this->toChanged(to);
 }
 
-void ColorReplaceElement::setRadius(qreal radius)
+void ColorReplaceElement::setRadius(int radius)
 {
-    if (qFuzzyCompare(this->d->m_radius, radius))
+    if (this->d->m_radius == radius)
         return;
 
     this->d->m_radius = radius;
     emit this->radiusChanged(radius);
 }
 
+void ColorReplaceElement::setSoft(bool soft)
+{
+    if (this->d->m_soft == soft)
+        return;
+
+    this->d->m_soft = soft;
+    emit this->softChanged(soft);
+}
+
 void ColorReplaceElement::setDisable(bool disable)
 {
     if (this->d->m_disable == disable)
@@ -181,7 +216,12 @@ void ColorReplaceElement::resetTo()
 
 void ColorReplaceElement::resetRadius()
 {
-    this->setRadius(1.0);
+    this->setRadius(1);
+}
+
+void ColorReplaceElement::resetSoft()
+{
+    this->setSoft(true);
 }
 
 void ColorReplaceElement::resetDisable()
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorReplace/src/colorreplaceelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorReplace/src/colorreplaceelement.h
@@ -38,11 +38,16 @@ class ColorReplaceElement: public AkElem
                WRITE setTo
                RESET resetTo
                NOTIFY toChanged)
-    Q_PROPERTY(qreal radius
+    Q_PROPERTY(int radius
                READ radius
                WRITE setRadius
                RESET resetRadius
                NOTIFY radiusChanged)
+    Q_PROPERTY(bool soft
+               READ soft
+               WRITE setSoft
+               RESET resetSoft
+               NOTIFY softChanged)
     Q_PROPERTY(bool disable
                READ disable
                WRITE setDisable
@@ -55,32 +60,36 @@ class ColorReplaceElement: public AkElem
 
         Q_INVOKABLE QRgb from() const;
         Q_INVOKABLE QRgb to() const;
-        Q_INVOKABLE qreal radius() const;
+        Q_INVOKABLE int radius() const;
+        Q_INVOKABLE bool soft() const;
         Q_INVOKABLE bool disable() const;
 
     private:
         ColorReplaceElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void fromChanged(QRgb from);
         void toChanged(QRgb to);
-        void radiusChanged(qreal radius);
+        void radiusChanged(int radius);
+        void softChanged(bool soft);
         void disableChanged(bool disable);
 
     public slots:
         void setFrom(QRgb from);
         void setTo(QRgb to);
-        void setRadius(qreal radius);
+        void setRadius(int radius);
+        void setSoft(bool soft);
         void setDisable(bool disable);
         void resetFrom();
         void resetTo();
         void resetRadius();
+        void resetSoft();
         void resetDisable();
 };
 
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorTap/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorTap/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(ColorTap
 target_compile_definitions(ColorTap PRIVATE AVKYS_PLUGIN_COLORTAP)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(ColorTap avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS ColorTap RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorTap/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorTap/share/qml/main.qml
@@ -33,12 +33,14 @@ ColumnLayout {
 
     RowLayout {
         Label {
+            id: txtColorTable
             text: qsTr("Color table")
         }
         ComboBox {
             id: cbxTable
             textRole: "text"
             Layout.fillWidth: true
+            Accessible.description: txtColorTable.text
 
             model: ListModel {
                 ListElement {
@@ -105,6 +107,7 @@ ColumnLayout {
             placeholderText: qsTr("Source palette")
             selectByMouse: true
             Layout.fillWidth: true
+            Accessible.name: qsTr("Image file to use as palette")
 
             onTextChanged: {
                 for (var i = 0; i < cbxTable.model.count; i++) {
@@ -124,6 +127,7 @@ ColumnLayout {
         Button {
             text: qsTr("Search")
             icon.source: "image://icons/search"
+            Accessible.description: qsTr("Search the image file to use as palette")
 
             onClicked: fileDialog.open()
         }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorTap/src/colortap.h
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorTap/src/colortap.h
@@ -29,8 +29,8 @@ class ColorTap: public QObject, public A
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // COLORTAP_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorTap/src/colortapelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorTap/src/colortapelement.cpp
@@ -21,7 +21,10 @@
 #include <QImage>
 #include <QQmlContext>
 #include <QStandardPaths>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "colortapelement.h"
@@ -32,6 +35,7 @@ class ColorTapElementPrivate
         QImage m_table;
         QString m_tableName;
         QMutex m_mutex;
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 };
 
 ColorTapElement::ColorTapElement(): AkElement()
@@ -76,42 +80,48 @@ AkPacket ColorTapElement::iVideoStream(c
 
     if (this->d->m_table.isNull()) {
         this->d->m_mutex.unlock();
-        akSend(packet)
+        if (packet)
+            emit this->oStream(packet);
+
+        return packet;
     }
 
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull()) {
-        this->d->m_mutex.unlock();
+    if (!src)
+        return {};
 
-        return AkPacket();
-    }
-
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
     auto tableBits = reinterpret_cast<const QRgb *>(this->d->m_table.constBits());
 
-    for (int y = 0; y < src.height(); y++) {
-        auto srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        auto dstLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++) {
-            int r = qRed(srcLine[x]);
-            int g = qGreen(srcLine[x]);
-            int b = qBlue(srcLine[x]);
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &ipixel = srcLine[x];
+            int r = qRed(ipixel);
+            int g = qGreen(ipixel);
+            int b = qBlue(ipixel);
+            int a = qAlpha(ipixel);
 
             int ro = qRed(tableBits[r]);
             int go = qGreen(tableBits[g]);
             int bo = qBlue(tableBits[b]);
 
-            dstLine[x] = qRgb(ro, go, bo);
+            dstLine[x] = qRgba(ro, go, bo, a);
         }
     }
 
     this->d->m_mutex.unlock();
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void ColorTapElement::setTable(const QString &table)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorTransform/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorTransform/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(ColorTransfor
 target_compile_definitions(ColorTransform PRIVATE AVKYS_PLUGIN_COLORTRANSFORM)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(ColorTransform avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS ColorTransform RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorTransform/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorTransform/share/qml/main.qml
@@ -48,6 +48,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 0, Row 0")
 
             onTextChanged: updateKernel(0, text)
         }
@@ -59,6 +60,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 1, Row 0")
 
             onTextChanged: updateKernel(1, text)
         }
@@ -70,6 +72,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 2, Row 0")
 
             onTextChanged: updateKernel(2, text)
         }
@@ -81,6 +84,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 3, Row 0")
 
             onTextChanged: updateKernel(3, text)
         }
@@ -94,6 +98,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 0, Row 1")
 
             onTextChanged: updateKernel(4, text)
         }
@@ -105,6 +110,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 1, Row 1")
 
             onTextChanged: updateKernel(5, text)
         }
@@ -116,6 +122,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 2, Row 1")
 
             onTextChanged: updateKernel(6, text)
         }
@@ -127,6 +134,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 3, Row 1")
 
             onTextChanged: updateKernel(7, text)
         }
@@ -140,6 +148,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 0, Row 2")
 
             onTextChanged: updateKernel(8, text)
         }
@@ -151,6 +160,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 1, Row 2")
 
             onTextChanged: updateKernel(9, text)
         }
@@ -162,6 +172,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 2, Row 2")
 
             onTextChanged: updateKernel(10, text)
         }
@@ -173,6 +184,7 @@ ColumnLayout {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 3, Row 2")
 
             onTextChanged: updateKernel(11, text)
         }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorTransform/src/colortransform.h
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorTransform/src/colortransform.h
@@ -29,8 +29,8 @@ class ColorTransform: public QObject, pu
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // COLORTRANSFORM_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorTransform/src/colortransformelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorTransform/src/colortransformelement.cpp
@@ -17,10 +17,14 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QVector>
-#include <QImage>
+#include <QMutex>
 #include <QQmlContext>
+#include <QVector>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "colortransformelement.h"
@@ -28,7 +32,9 @@
 class ColorTransformElementPrivate
 {
     public:
+        QMutex m_mutex;
         QVector<qreal> m_kernel;
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 };
 
 ColorTransformElement::ColorTransformElement(): AkElement()
@@ -75,23 +81,34 @@ void ColorTransformElement::controlInter
 
 AkPacket ColorTransformElement::iVideoStream(const AkVideoPacket &packet)
 {
-    if (this->d->m_kernel.size() < 12)
-        akSend(packet)
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
 
-    auto src = packet.toImage();
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
 
-    if (src.isNull())
-        return AkPacket();
+    this->d->m_mutex.lock();
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
-    auto kernel = this->d->m_kernel;
+    if (this->d->m_kernel.size() < 12) {
+        this->d->m_mutex.unlock();
 
-    for (int y = 0; y < src.height(); y++) {
-        auto srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        auto dstLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
+        if (packet)
+            emit this->oStream(packet);
+
+        return packet;
+    }
 
-        for (int x = 0; x < src.width(); x++) {
+    auto kernel = this->d->m_kernel.data();
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
             int r = qRed(srcLine[x]);
             int g = qGreen(srcLine[x]);
             int b = qBlue(srcLine[x]);
@@ -108,8 +125,12 @@ AkPacket ColorTransformElement::iVideoSt
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    this->d->m_mutex.unlock();
+
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void ColorTransformElement::setKernel(const QVariantList &kernel)
@@ -122,13 +143,15 @@ void ColorTransformElement::setKernel(co
     if (this->d->m_kernel == k)
         return;
 
+    this->d->m_mutex.lock();
     this->d->m_kernel = k;
+    this->d->m_mutex.unlock();
     emit this->kernelChanged(kernel);
 }
 
 void ColorTransformElement::resetKernel()
 {
-    QVariantList kernel = {
+    QVariantList kernel {
         1, 0, 0, 0,
         0, 1, 0, 0,
         0, 0, 1, 0
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ColorTransform/src/colortransformelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/ColorTransform/src/colortransformelement.h
@@ -43,10 +43,10 @@ class ColorTransformElement: public AkEl
         ColorTransformElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void kernelChanged(const QVariantList &kernel);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Contrast/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Contrast/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Contrast
 target_compile_definitions(Contrast PRIVATE AVKYS_PLUGIN_CONTRAST)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Contrast avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Contrast RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Contrast/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Contrast/share/qml/main.qml
@@ -46,6 +46,7 @@ GridLayout {
         from: -255
         to: 255
         Layout.fillWidth: true
+        Accessible.name: lblContrast.text
 
         onValueChanged: Contrast.contrast = value
     }
@@ -56,6 +57,7 @@ GridLayout {
         to: sldContrast.to
         stepSize: sldContrast.stepSize
         editable: true
+        Accessible.name: lblContrast.text
 
         onValueChanged: Contrast.contrast = Number(value)
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Contrast/src/contrast.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Contrast/src/contrast.h
@@ -29,8 +29,8 @@ class Contrast: public QObject, public A
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // CONTRAST_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Contrast/src/contrastelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Contrast/src/contrastelement.cpp
@@ -17,9 +17,12 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "contrastelement.h"
@@ -31,6 +34,7 @@ class ContrastElementPrivate
 
         const QVector<quint8> &contrastTable() const;
         QVector<quint8> initContrastTable() const;
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 };
 
 ContrastElement::ContrastElement():
@@ -74,39 +78,40 @@ AkPacket ContrastElement::iVideoStream(c
         return packet;
     }
 
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull()) {
+    if (!src) {
         if (packet)
             emit this->oStream(packet);
 
         return packet;
     }
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
     auto dataCt = this->d->contrastTable();
     auto contrast = qBound(-255, this->d->m_contrast, 255);
     size_t contrastOffset = size_t(contrast + 255) << 8;
 
-    for (int y = 0; y < src.height(); y++) {
-        auto srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        auto destLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++) {
-            auto r = dataCt[contrastOffset | qRed(srcLine[x])];
-            auto g = dataCt[contrastOffset | qGreen(srcLine[x])];
-            auto b = dataCt[contrastOffset | qBlue(srcLine[x])];
-            destLine[x] = qRgba(r, g, b, qAlpha(srcLine[x]));
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto destLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto pixel = srcLine[x];
+            auto r = dataCt[contrastOffset | qRed(pixel)];
+            auto g = dataCt[contrastOffset | qGreen(pixel)];
+            auto b = dataCt[contrastOffset | qBlue(pixel)];
+            destLine[x] = qRgba(r, g, b, qAlpha(pixel));
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
+    if (dst)
+        emit this->oStream(dst);
 
-    if (oPacket)
-        emit this->oStream(oPacket);
-
-    return oPacket;
+    return dst;
 }
 
 void ContrastElement::setContrast(int contrast)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Contrast/src/contrastelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Contrast/src/contrastelement.h
@@ -43,10 +43,10 @@ class ContrastElement: public AkElement
         ContrastElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void contrastChanged(int contrast);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Convolve/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Convolve/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Convolve
 target_compile_definitions(Convolve PRIVATE AVKYS_PLUGIN_CONVOLVE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Convolve avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Convolve RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Convolve/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Convolve/share/qml/main.qml
@@ -59,6 +59,7 @@ ColumnLayout {
                 regExp: /-?\d+/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 0, Row 0")
 
             onTextChanged: updateKernel(0, text)
         }
@@ -70,6 +71,7 @@ ColumnLayout {
                 regExp: /-?\d+/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 1, Row 0")
 
             onTextChanged: updateKernel(1, text)
         }
@@ -81,6 +83,7 @@ ColumnLayout {
                 regExp: /-?\d+/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 2, Row 0")
 
             onTextChanged: updateKernel(2, text)
         }
@@ -94,6 +97,7 @@ ColumnLayout {
                 regExp: /-?\d+/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 0, Row 1")
 
             onTextChanged: updateKernel(3, text)
         }
@@ -105,6 +109,7 @@ ColumnLayout {
                 regExp: /-?\d+/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 1, Row 1")
 
             onTextChanged: updateKernel(4, text)
         }
@@ -116,6 +121,7 @@ ColumnLayout {
                 regExp: /-?\d+/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 2, Row 1")
 
             onTextChanged: updateKernel(5, text)
         }
@@ -129,6 +135,7 @@ ColumnLayout {
                 regExp: /-?\d+/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 0, Row 2")
 
             onTextChanged: updateKernel(6, text)
         }
@@ -140,6 +147,7 @@ ColumnLayout {
                 regExp: /-?\d+/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 1, Row 2")
 
             onTextChanged: updateKernel(7, text)
         }
@@ -151,6 +159,7 @@ ColumnLayout {
                 regExp: /-?\d+/
             }
             Layout.preferredWidth: cellSize
+            Accessible.name: qsTr("Column 2, Row 2")
 
             onTextChanged: updateKernel(8, text)
         }
@@ -160,6 +169,7 @@ ColumnLayout {
         columns: 3
 
         Label {
+            id: txtFactor
             text: qsTr("Factor")
         }
         TextField {
@@ -170,11 +180,13 @@ ColumnLayout {
             }
             Layout.columnSpan: 2
             Layout.fillWidth: true
+            Accessible.name: txtFactor.text
 
             onTextChanged: Convolve.factor = AkFrac.create(text).toVariant()
         }
 
         Label {
+            id: txtBias
             text: qsTr("Bias")
         }
         Slider {
@@ -184,6 +196,7 @@ ColumnLayout {
             from: -255
             to: 255
             Layout.fillWidth: true
+            Accessible.name: txtBias.text
 
             onValueChanged: Convolve.bias = value
         }
@@ -194,6 +207,7 @@ ColumnLayout {
             from: sldBias.from
             to: sldBias.to
             editable: true
+            Accessible.name: txtBias.text
 
             onValueChanged: Convolve.bias = Number(value)
         }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Convolve/src/convolve.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Convolve/src/convolve.h
@@ -29,8 +29,8 @@ class Convolve: public QObject, public A
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // CONVOLVE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Convolve/src/convolveelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Convolve/src/convolveelement.cpp
@@ -17,13 +17,16 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QVariant>
-#include <QVector>
 #include <QMutex>
-#include <QImage>
 #include <QQmlContext>
+#include <QSize>
+#include <QVariant>
+#include <QVector>
+#include <qrgb.h>
 #include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "convolveelement.h"
@@ -36,6 +39,7 @@ class ConvolveElementPrivate
         AkFrac m_factor {1, 1};
         QMutex m_mutex;
         int m_bias {0};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 };
 
 ConvolveElement::ConvolveElement(): AkElement()
@@ -97,49 +101,60 @@ void ConvolveElement::controlInterfaceCo
 
 AkPacket ConvolveElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull())
-        return AkPacket();
+    if (!src)
+        return {};
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
 
     this->d->m_mutex.lock();
-    QVector<int> kernel = this->d->m_kernel;
-    const int *kernelBits = kernel.constData();
+
+    if (this->d->m_kernel.size() < 9) {
+        this->d->m_mutex.unlock();
+
+        if (packet)
+            emit this->oStream(packet);
+
+        return packet;
+    }
+
+    auto kernel = this->d->m_kernel.constData();
     qint64 factorNum = this->d->m_factor.num();
     qint64 factorDen = this->d->m_factor.den();
     int kernelWidth = this->d->m_kernelSize.width();
     int kernelHeight = this->d->m_kernelSize.height();
-    this->d->m_mutex.unlock();
 
     int minI = -(kernelWidth - 1) / 2;
     int maxI = (kernelWidth + 1) / 2;
     int minJ = -(kernelHeight - 1) / 2;
     int maxJ = (kernelHeight + 1) / 2;
 
-    for (int y = 0; y < src.height(); y++) {
-        auto iLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        auto oLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto iLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto oLine = reinterpret_cast<QRgb *>(dst.line(0, y));
 
-        for (int x = 0; x < src.width(); x++) {
+        for (int x = 0; x < src.caps().width(); x++) {
             int r = 0;
             int g = 0;
             int b = 0;
 
             for (int j = minJ, k = 0; j < maxJ; j++) {
-                int yp = qBound(0, y + j, src.height() - 1);
+                int yp = qBound(0, y + j, src.caps().height() - 1);
                 auto iLine =
-                        reinterpret_cast<const QRgb *>(src.constScanLine(yp));
+                        reinterpret_cast<const QRgb *>(src.constLine(0, yp));
 
                 for (int i = minI; i < maxI; i++, k++) {
-                    int xp = qBound(0, x + i, src.width() - 1);
+                    int xp = qBound(0, x + i, src.caps().width() - 1);
 
-                    if (kernelBits[k]) {
-                        r += kernelBits[k] * qRed(iLine[xp]);
-                        g += kernelBits[k] * qGreen(iLine[xp]);
-                        b += kernelBits[k] * qBlue(iLine[xp]);
+                    if (kernel[k]) {
+                        auto pixel = iLine[xp];
+                        r += kernel[k] * qRed(pixel);
+                        g += kernel[k] * qGreen(pixel);
+                        b += kernel[k] * qBlue(pixel);
                     }
                 }
             }
@@ -162,8 +177,12 @@ AkPacket ConvolveElement::iVideoStream(c
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    this->d->m_mutex.unlock();
+
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void ConvolveElement::setKernel(const QVariantList &kernel)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Convolve/src/convolveelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Convolve/src/convolveelement.h
@@ -62,10 +62,10 @@ class ConvolveElement: public AkElement
         ConvolveElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void kernelChanged(const QVariantList &kernel);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DelayGrab/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/DelayGrab/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(DelayGrab
 target_compile_definitions(DelayGrab PRIVATE AVKYS_PLUGIN_DELAYGRAB)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(DelayGrab avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS DelayGrab RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DelayGrab/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/DelayGrab/share/qml/main.qml
@@ -20,6 +20,7 @@
 import QtQuick 2.12
 import QtQuick.Controls 2.5
 import QtQuick.Layouts 1.3
+import DelayGrabElement 1.0
 
 GridLayout {
     id: configs
@@ -39,6 +40,7 @@ GridLayout {
     }
 
     Label {
+        id: txtGrabMode
         text: qsTr("Grab mode")
     }
     ComboBox {
@@ -46,23 +48,24 @@ GridLayout {
         textRole: "text"
         currentIndex: modeIndex(DelayGrab.mode)
         Layout.fillWidth: true
+        Accessible.description: txtGrabMode.text
 
         model: ListModel {
             ListElement {
                 text: qsTr("Random square")
-                mode: "RandomSquare"
+                mode: DelayGrabElement.DelayGrabModeRandomSquare
             }
             ListElement {
                 text: qsTr("Vertical increase")
-                mode: "VerticalIncrease"
+                mode: DelayGrabElement.DelayGrabModeVerticalIncrease
             }
             ListElement {
                 text: qsTr("Horizontal increase")
-                mode: "HorizontalIncrease"
+                mode: DelayGrabElement.DelayGrabModeHorizontalIncrease
             }
             ListElement {
                 text: qsTr("Rings increase")
-                mode: "RingsIncrease"
+                mode: DelayGrabElement.DelayGrabModeRingsIncrease
             }
         }
 
@@ -70,6 +73,7 @@ GridLayout {
     }
 
     Label {
+        id: txtBlockSize
         text: qsTr("Block size")
     }
     TextField {
@@ -80,21 +84,24 @@ GridLayout {
             regExp: /\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtBlockSize.text
 
         onTextChanged: DelayGrab.blockSize = Number(text)
     }
 
     Label {
-        text: qsTr("N° of frames")
+        id: txtFramesNumber
+        text: qsTr("Number of frames")
     }
     TextField {
         text: DelayGrab.nFrames
-        placeholderText: qsTr("N° of frames")
+        placeholderText: qsTr("Number of frames")
         selectByMouse: true
         validator: RegExpValidator {
             regExp: /\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtFramesNumber.text
 
         onTextChanged: DelayGrab.nFrames = Number(text)
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DelayGrab/src/delaygrab.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/DelayGrab/src/delaygrab.cpp
@@ -17,6 +17,8 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
+#include <QQmlEngine>
+
 #include "delaygrab.h"
 #include "delaygrabelement.h"
 
@@ -24,6 +26,9 @@ QObject *DelayGrab::create(const QString
 {
     Q_UNUSED(key)
     Q_UNUSED(specification)
+    qRegisterMetaType<DelayGrabElement::DelayGrabMode>("DelayGrabDelayGrabMode");
+    qRegisterMetaTypeStreamOperators<DelayGrabElement::DelayGrabMode>("DelayGrabDelayGrabMode");
+    qmlRegisterType<DelayGrabElement>("DelayGrabElement", 1, 0, "DelayGrabElement");
 
     return new DelayGrabElement();
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DelayGrab/src/delaygrab.h
+++ webcamoid-9.0.0/libAvKys/Plugins/DelayGrab/src/delaygrab.h
@@ -29,8 +29,8 @@ class DelayGrab: public QObject, public
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // DELAYGRAB_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DelayGrab/src/delaygrabelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/DelayGrab/src/delaygrabelement.cpp
@@ -17,35 +17,24 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
+#include <QDataStream>
 #include <QDateTime>
-#include <QImage>
 #include <QMap>
 #include <QMutex>
 #include <QQmlContext>
 #include <QRandomGenerator>
+#include <QSize>
 #include <QVector>
 #include <QtMath>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "delaygrabelement.h"
 
-using DelayGrabModeMap = QMap<DelayGrabElement::DelayGrabMode, QString>;
-
-inline DelayGrabModeMap initDelayGrabModeMap()
-{
-    DelayGrabModeMap modeToStr {
-        {DelayGrabElement::DelayGrabModeRandomSquare      , "RandomSquare"      },
-        {DelayGrabElement::DelayGrabModeVerticalIncrease  , "VerticalIncrease"  },
-        {DelayGrabElement::DelayGrabModeHorizontalIncrease, "HorizontalIncrease"},
-        {DelayGrabElement::DelayGrabModeRingsIncrease     , "RingsIncrease"     }
-    };
-
-    return modeToStr;
-}
-
-Q_GLOBAL_STATIC_WITH_ARGS(DelayGrabModeMap, modeToStr, (initDelayGrabModeMap()))
-
 class DelayGrabElementPrivate
 {
     public:
@@ -54,30 +43,16 @@ class DelayGrabElementPrivate
         int m_nFrames {71};
         QMutex m_mutex;
         QSize m_frameSize;
-        QVector<QImage> m_frames;
-        QVector<int> m_delayMap;
+        QVector<AkVideoPacket> m_frames;
+        AkVideoPacket m_delayMap;
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+
+        void updateDelaymap();
 };
 
 DelayGrabElement::DelayGrabElement(): AkElement()
 {
     this->d = new DelayGrabElementPrivate;
-
-    QObject::connect(this,
-                     &DelayGrabElement::modeChanged,
-                     this,
-                     &DelayGrabElement::updateDelaymap);
-    QObject::connect(this,
-                     &DelayGrabElement::blockSizeChanged,
-                     this,
-                     &DelayGrabElement::updateDelaymap);
-    QObject::connect(this,
-                     &DelayGrabElement::nFramesChanged,
-                     this,
-                     &DelayGrabElement::updateDelaymap);
-    QObject::connect(this,
-                     &DelayGrabElement::frameSizeChanged,
-                     this,
-                     &DelayGrabElement::updateDelaymap);
 }
 
 DelayGrabElement::~DelayGrabElement()
@@ -85,9 +60,9 @@ DelayGrabElement::~DelayGrabElement()
     delete this->d;
 }
 
-QString DelayGrabElement::mode() const
+DelayGrabElement::DelayGrabMode DelayGrabElement::mode() const
 {
-    return modeToStr->value(this->d->m_mode);
+    return this->d->m_mode;
 }
 
 int DelayGrabElement::blockSize() const
@@ -118,24 +93,24 @@ void DelayGrabElement::controlInterfaceC
 
 AkPacket DelayGrabElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull())
-        return AkPacket();
+    if (!src)
+        return {};
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame = QImage(src.size(), src.format());
-    QRgb *destBits = reinterpret_cast<QRgb *>(oFrame.bits());
+    QSize frameSize(src.caps().width(), src.caps().height());
 
-    if (src.size() != this->d->m_frameSize) {
-        this->updateDelaymap();
+    if (frameSize != this->d->m_frameSize) {
         this->d->m_frames.clear();
-        this->d->m_frameSize = src.size();
+        this->d->m_frameSize = frameSize;
         emit this->frameSizeChanged(this->d->m_frameSize);
+        this->d->updateDelaymap();
     }
 
     int nFrames = this->d->m_nFrames > 0? this->d->m_nFrames: 1;
-    this->d->m_frames << src.copy();
+    this->d->m_frames << src;
     int diff = this->d->m_frames.size() - nFrames;
 
     for (int i = 0; i < diff; i++)
@@ -149,63 +124,67 @@ AkPacket DelayGrabElement::iVideoStream(
     }
 
     this->d->m_mutex.lock();
-    int blockSize = this->d->m_blockSize > 0? this->d->m_blockSize: 1;
-    int delayMapWidth = src.width() / blockSize;
-    int delayMapHeight = src.height() / blockSize;
-    QVector<int> delayMap = this->d->m_delayMap;
-    this->d->m_mutex.unlock();
 
-    if (delayMap.isEmpty()) {
+    if (!this->d->m_delayMap) {
+        this->d->m_mutex.unlock();
+
         if (packet)
             emit this->oStream(packet);
 
         return packet;
     }
 
-    // Copy image blockwise to screenbuffer
-    for (int i = 0, y = 0; y < delayMapHeight; y++) {
-        for (int x = 0; x < delayMapWidth ; i++, x++) {
-            int curFrame = qAbs(this->d->m_frames.size() - 1 - delayMap[i])
-                           % this->d->m_frames.size();
-            int curFrameWidth = this->d->m_frames[curFrame].width();
-            int xyoff = blockSize * (x + y * curFrameWidth);
+    int blockSize = this->d->m_blockSize > 0? this->d->m_blockSize: 1;
+    int delayMapWidth = src.caps().width() / blockSize;
+    int delayMapHeight = src.caps().height() / blockSize;
 
-            // source
-            auto source = reinterpret_cast<const QRgb *>(this->d->m_frames[curFrame].constBits());
-            source += xyoff;
-
-            // target
-            QRgb *dest = destBits;
-            dest += xyoff;
+    AkVideoPacket dst(src.caps(), true);
+    dst.copyMetadata(src);
+    size_t oLineSize = dst.lineSize(0);
+
+    // Copy image blockwise to frame buffer
+    for (int y = 0; y < delayMapHeight; y++) {
+        auto yb = blockSize * y;
+        auto dstLine = dst.line(0, yb);
+        auto delayLine =
+                reinterpret_cast<quint16 *>(this->d->m_delayMap.line(0, y));
+
+        for (int x = 0; x < delayMapWidth; x++) {
+            int curFrame = qAbs(this->d->m_frames.size() - delayLine[x] - 1)
+                           % this->d->m_frames.size();
+            auto &frame = this->d->m_frames[curFrame];
+            size_t iLineSize = frame.lineSize(0);
+            size_t xoffset = blockSize * x * sizeof(QRgb);
+            auto srcLineX = frame.constLine(0, yb) + xoffset;
+            auto dstLineX = dstLine + xoffset;
 
             // copy block
             for (int j = 0; j < blockSize; j++) {
-                memcpy(dest, source, size_t(4 * blockSize));
-                source += curFrameWidth;
-                dest += curFrameWidth;
+                memcpy(dstLineX, srcLineX, blockSize * sizeof(QRgb));
+                srcLineX += iLineSize;
+                dstLineX += oLineSize;
             }
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
+    this->d->m_mutex.unlock();
 
-    if (oPacket)
-        emit this->oStream(oPacket);
+    if (dst)
+        emit this->oStream(dst);
 
-    return oPacket;
+    return dst;
 }
 
-void DelayGrabElement::setMode(const QString &mode)
+void DelayGrabElement::setMode(DelayGrabMode mode)
 {
-    DelayGrabMode modeEnum = modeToStr->key(mode, DelayGrabModeRingsIncrease);
-
-    if (this->d->m_mode == modeEnum)
+    if (this->d->m_mode == mode)
         return;
 
     this->d->m_mutex.lock();
-    this->d->m_mode = modeEnum;
+    this->d->m_mode = mode;
     this->d->m_mutex.unlock();
     emit this->modeChanged(mode);
+    this->d->updateDelaymap();
 }
 
 void DelayGrabElement::setBlockSize(int blockSize)
@@ -217,6 +196,7 @@ void DelayGrabElement::setBlockSize(int
     this->d->m_blockSize = blockSize;
     this->d->m_mutex.unlock();
     emit this->blockSizeChanged(blockSize);
+    this->d->updateDelaymap();
 }
 
 void DelayGrabElement::setNFrames(int nFrames)
@@ -228,11 +208,12 @@ void DelayGrabElement::setNFrames(int nF
     this->d->m_nFrames = nFrames;
     this->d->m_mutex.unlock();
     emit this->nFramesChanged(nFrames);
+    this->d->updateDelaymap();
 }
 
 void DelayGrabElement::resetMode()
 {
-    this->setMode("RingsIncrease");
+    this->setMode(DelayGrabModeRingsIncrease);
 }
 
 void DelayGrabElement::resetBlockSize()
@@ -245,44 +226,79 @@ void DelayGrabElement::resetNFrames()
     this->setNFrames(71);
 }
 
-void DelayGrabElement::updateDelaymap()
+QDataStream &operator >>(QDataStream &istream, DelayGrabElement::DelayGrabMode &mode)
 {
-    QMutexLocker locker(&this->d->m_mutex);
+    int modeInt;
+    istream >> modeInt;
+    mode = static_cast<DelayGrabElement::DelayGrabMode>(modeInt);
 
-    if (this->d->m_frameSize.isEmpty())
-        return;
+    return istream;
+}
 
-    int nFrames = this->d->m_nFrames > 0? this->d->m_nFrames: 1;
-    int blockSize = this->d->m_blockSize > 0? this->d->m_blockSize: 1;
-    int delayMapWidth = this->d->m_frameSize.width() / blockSize;
-    int delayMapHeight = this->d->m_frameSize.height() / blockSize;
+QDataStream &operator <<(QDataStream &ostream, DelayGrabElement::DelayGrabMode mode)
+{
+    ostream << static_cast<int>(mode);
+
+    return ostream;
+}
+
+void DelayGrabElementPrivate::updateDelaymap()
+{
+    QMutexLocker locker(&this->m_mutex);
+
+    if (this->m_frameSize.isEmpty())
+        return;
 
-    this->d->m_delayMap.resize(delayMapHeight * delayMapWidth);
+    int nFrames = this->m_nFrames > 0? this->m_nFrames: 1;
+    int blockSize = this->m_blockSize > 0? this->m_blockSize: 1;
+    int delayMapWidth = this->m_frameSize.width() / blockSize;
+    int delayMapHeight = this->m_frameSize.height() / blockSize;
+
+    this->m_delayMap = AkVideoPacket({AkVideoCaps::Format_gray16,
+                                      delayMapWidth,
+                                      delayMapHeight,
+                                      {}});
 
     int minX = -(delayMapWidth >> 1);
-    int maxX = (delayMapWidth >> 1);
+    int maxX = delayMapWidth >> 1;
     int minY = -(delayMapHeight >> 1);
-    int maxY = (delayMapHeight >> 1);
+    int maxY = delayMapHeight >> 1;
 
-    for (int y = minY, i = 0; y < maxY; y++) {
-        for (int x = minX; x < maxX; x++, i++) {
-            qreal value;
+    for (int y = minY; y < maxY; y++) {
+        auto delayLine =
+                reinterpret_cast<quint16 *>(this->m_delayMap.line(0, y - minY));
 
-            if (this->d->m_mode == DelayGrabModeRandomSquare) {
+        for (int x = minX; x < maxX; x++) {
+            int value = 0;
+
+            switch (this->m_mode) {
+            case DelayGrabElement::DelayGrabModeRandomSquare: {
                 // Random delay with square distribution
-                auto d = QRandomGenerator::global()->bounded(RAND_MAX);
-                value = 16.0 * d * d;
-            } else if (this->d->m_mode == DelayGrabModeVerticalIncrease) {
-                value = qAbs(x) / 2.0;
-            } else if (this->d->m_mode == DelayGrabModeHorizontalIncrease) {
-                value = qAbs(y) / 2.0;
-            } else {
+                auto d = QRandomGenerator::global()->bounded(1.0);
+                value = qRound(16.0 * d * d);
+
+                break;
+            }
+            case DelayGrabElement::DelayGrabModeVerticalIncrease: {
+                value = qAbs(x) >> 1;
+
+                break;
+            }
+            case DelayGrabElement::DelayGrabModeHorizontalIncrease: {
+                value = qAbs(y) >> 1;
+
+                break;
+            }
+            default: {
                 // Rings of increasing delay outward from center
-                value = sqrt(x * x + y * y) / 2;
+                value = qRound(sqrt(x * x + y * y) / 2.0);
+
+                break;
+            }
             }
 
             // Clip values
-            this->d->m_delayMap[i] = int(value) % nFrames;
+            delayLine[x - minX] = value % nFrames;
         }
     }
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DelayGrab/src/delaygrabelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/DelayGrab/src/delaygrabelement.h
@@ -27,8 +27,7 @@ class DelayGrabElementPrivate;
 class DelayGrabElement: public AkElement
 {
     Q_OBJECT
-    Q_ENUMS(DelayGrabMode)
-    Q_PROPERTY(QString mode
+    Q_PROPERTY(DelayGrabMode mode
                READ mode
                WRITE setMode
                RESET resetMode
@@ -56,11 +55,12 @@ class DelayGrabElement: public AkElement
             // Rings of increasing delay outward from center
             DelayGrabModeRingsIncrease
         };
+        Q_ENUM(DelayGrabMode)
 
         DelayGrabElement();
         ~DelayGrabElement();
 
-        Q_INVOKABLE QString mode() const;
+        Q_INVOKABLE DelayGrabMode mode() const;
         Q_INVOKABLE int blockSize() const;
         Q_INVOKABLE int nFrames() const;
 
@@ -68,27 +68,29 @@ class DelayGrabElement: public AkElement
         DelayGrabElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
-        void modeChanged(const QString &mode);
+        void modeChanged(DelayGrabMode mode);
         void blockSizeChanged(int blockSize);
         void nFramesChanged(int nFrames);
         void frameSizeChanged(const QSize &frameSize);
 
     public slots:
-        void setMode(const QString &mode);
+        void setMode(DelayGrabMode mode);
         void setBlockSize(int blockSize);
         void setNFrames(int nFrames);
         void resetMode();
         void resetBlockSize();
         void resetNFrames();
-
-    private slots:
-        void updateDelaymap();
 };
 
+Q_DECL_EXPORT QDataStream &operator >>(QDataStream &istream, DelayGrabElement::DelayGrabMode &mode);
+Q_DECL_EXPORT QDataStream &operator <<(QDataStream &ostream, DelayGrabElement::DelayGrabMode mode);
+
+Q_DECLARE_METATYPE(DelayGrabElement::DelayGrabMode)
+
 #endif // DELAYGRABELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Denoise/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Denoise/CMakeLists.txt
@@ -61,7 +61,6 @@ target_include_directories(Denoise
 target_compile_definitions(Denoise PRIVATE AVKYS_PLUGIN_DENOISE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Denoise avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Denoise RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Denoise/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Denoise/share/qml/main.qml
@@ -37,11 +37,12 @@ GridLayout {
         function onSigmaChanged(sigma)
         {
             sldSigma.value = sigma
-            spbSigma.value = spbSigma.multiplier * sigma
+            spbSigma.value = sigma * spbSigma.multiplier
         }
     }
 
     Label {
+        id: txtRadius
         text: qsTr("Radius")
     }
     Slider {
@@ -50,6 +51,7 @@ GridLayout {
         stepSize: 1
         to: 10
         Layout.fillWidth: true
+        Accessible.name: txtRadius.text
 
         onValueChanged: Denoise.radius = value
     }
@@ -59,11 +61,13 @@ GridLayout {
         to: sldRadius.to
         stepSize: sldRadius.stepSize
         editable: true
+        Accessible.name: txtRadius.text
 
         onValueChanged: Denoise.radius = Number(value)
     }
 
     Label {
+        id: txtFactor
         text: qsTr("Factor")
     }
     TextField {
@@ -74,12 +78,13 @@ GridLayout {
         }
         Layout.columnSpan: 2
         Layout.fillWidth: true
+        Accessible.name: txtFactor.text
 
         onTextChanged: Denoise.factor = Number(text)
     }
 
     Label {
-        id: muLabel
+        id: txtMu
         /*: Mu factor (µ letter from greek), represents the average of a group
             of values.
 
@@ -89,18 +94,20 @@ GridLayout {
     }
     TextField {
         text: Denoise.mu
-        placeholderText: muLabel.text
+        placeholderText: txtMu.text
         selectByMouse: true
         validator: RegExpValidator {
             regExp: /-?\d+/
         }
         Layout.columnSpan: 2
         Layout.fillWidth: true
+        Accessible.name: txtMu.text
 
         onTextChanged: Denoise.mu = Number(text)
     }
 
     Label {
+        id: txtSigma
         /*: Sigma factor (σ letter from greek), represents the standard
             deviation of a group of values.
 
@@ -112,9 +119,10 @@ GridLayout {
         id: sldSigma
         value: Denoise.sigma
         stepSize: 0.1
-        to: 10
         from: 0.1
+        to: 10
         Layout.fillWidth: true
+        Accessible.name: txtSigma.text
 
         onValueChanged: Denoise.sigma = value
     }
@@ -125,6 +133,7 @@ GridLayout {
         to: multiplier * sldSigma.to
         stepSize: multiplier * sldSigma.stepSize
         editable: true
+        Accessible.name: txtSigma.text
 
         readonly property int decimals: 1
         readonly property int multiplier: Math.pow(10, decimals)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Denoise/src/denoise.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Denoise/src/denoise.h
@@ -29,8 +29,8 @@ class Denoise: public QObject, public Ak
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // DENOISE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Denoise/src/denoiseelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Denoise/src/denoiseelement.cpp
@@ -17,11 +17,13 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
 #include <QtConcurrent>
 #include <QtMath>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "denoiseelement.h"
@@ -35,9 +37,10 @@ class DenoiseElementPrivate
         int m_mu {0};
         qreal m_sigma {1.0};
         int *m_weight {nullptr};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 
         void makeTable(int factor);
-        void integralImage(const QImage &image,
+        void integralImage(const AkVideoPacket &packet,
                            int oWidth, int oHeight,
                            PixelU8 *planes,
                            PixelU32 *integral,
@@ -80,16 +83,15 @@ qreal DenoiseElement::sigma() const
     return this->d->m_sigma;
 }
 
-void DenoiseElementPrivate::integralImage(const QImage &image,
+void DenoiseElementPrivate::integralImage(const AkVideoPacket &packet,
                                           int oWidth, int oHeight,
                                           PixelU8 *planes,
                                           PixelU32 *integral,
                                           PixelU64 *integral2)
 {
     for (int y = 1; y < oHeight; y++) {
-        auto line = reinterpret_cast<const QRgb *>(image.constScanLine(y - 1));
-        PixelU8 *planesLine = planes
-                              + (y - 1) * image.width();
+        auto line = reinterpret_cast<const QRgb *>(packet.constLine(0, y - 1));
+        PixelU8 *planesLine = planes + (y - 1) * packet.caps().width();
 
         // Reset current line summation.
         PixelU32 sum;
@@ -139,8 +141,8 @@ void DenoiseElementPrivate::denoise(cons
     PixelI32 sumW;
 
     for (int j = 0; j < params->kh; j++) {
-        const PixelU8 *line = staticParams.planes
-                              + (params->yp + j) * staticParams.width;
+        auto line = staticParams.planes
+                    + (params->yp + j) * staticParams.width;
 
         for (int i = 0; i < params->kw; i++) {
             PixelU8 pix = line[params->xp + i];
@@ -213,15 +215,12 @@ AkPacket DenoiseElement::iVideoStream(co
 {
     int radius = this->d->m_radius;
 
-    if (radius < 1)
-        akSend(packet)
+    if (radius < 1) {
+        if (packet)
+            emit this->oStream(packet);
 
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_ARGB32);
+        return packet;
+    }
 
     static int factor = 1024;
 
@@ -230,10 +229,18 @@ AkPacket DenoiseElement::iVideoStream(co
         factor = this->d->m_factor;
     }
 
-    QImage oFrame(src.size(), src.format());
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
 
-    int oWidth = src.width() + 1;
-    int oHeight = src.height() + 1;
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    int oWidth = src.caps().width() + 1;
+    int oHeight = src.caps().height() + 1;
     auto planes = new PixelU8[oWidth * oHeight];
     auto integral = new PixelU32[oWidth * oHeight];
     auto integral2 = new PixelU64[oWidth * oHeight];
@@ -245,7 +252,7 @@ AkPacket DenoiseElement::iVideoStream(co
     staticParams.planes = planes;
     staticParams.integral = integral;
     staticParams.integral2 = integral2;
-    staticParams.width = src.width();
+    staticParams.width = src.caps().width();
     staticParams.oWidth = oWidth;
     staticParams.weights = this->d->m_weight;
     staticParams.mu = this->d->m_mu;
@@ -256,15 +263,15 @@ AkPacket DenoiseElement::iVideoStream(co
     if (threadPool.maxThreadCount() < 8)
         threadPool.setMaxThreadCount(8);
 
-    for (int y = 0, pos = 0; y < src.height(); y++) {
-        const QRgb *iLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        QRgb *oLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
+    for (int y = 0, pos = 0; y < src.caps().height(); y++) {
+        auto iLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto oLine = reinterpret_cast<QRgb *>(dst.line(0, y));
         int yp = qMax(y - radius, 0);
-        int kh = qMin(y + radius, src.height() - 1) - yp + 1;
+        int kh = qMin(y + radius, src.caps().height() - 1) - yp + 1;
 
-        for (int x = 0; x < src.width(); x++, pos++) {
+        for (int x = 0; x < src.caps().width(); x++, pos++) {
             int xp = qMax(x - radius, 0);
-            int kw = qMin(x + radius, src.width() - 1) - xp + 1;
+            int kw = qMin(x + radius, src.caps().width() - 1) - xp + 1;
 
             auto params = new DenoiseParams();
             params->xp = xp;
@@ -275,13 +282,16 @@ AkPacket DenoiseElement::iVideoStream(co
             params->oPixel = oLine + x;
             params->alpha = qAlpha(iLine[x]);
 
-            if (radius >= 20)
-                QtConcurrent::run(&threadPool,
-                                  DenoiseElementPrivate::denoise,
-                                  staticParams,
-                                  params);
-            else
+            if (radius >= 20) {
+                auto result =
+                        QtConcurrent::run(&threadPool,
+                                          DenoiseElementPrivate::denoise,
+                                          staticParams,
+                                          params);
+                Q_UNUSED(result)
+            } else {
                 this->d->denoise(staticParams, params);
+            }
         }
     }
 
@@ -291,8 +301,10 @@ AkPacket DenoiseElement::iVideoStream(co
     delete [] integral;
     delete [] integral2;
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void DenoiseElement::setRadius(int radius)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Denoise/src/denoiseelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Denoise/src/denoiseelement.h
@@ -61,10 +61,10 @@ class DenoiseElement: public AkElement
         DenoiseElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void radiusChanged(int radius);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/share/qml/main.qml
@@ -49,6 +49,7 @@ GridLayout {
     }
     ComboBox {
         id: cbxFps
+        Accessible.description: lblFps.text
         currentIndex: 10
         Layout.fillWidth: true
         model: [300,
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/src/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/src/CMakeLists.txt
@@ -61,7 +61,6 @@ target_include_directories(DesktopCaptur
 target_compile_definitions(DesktopCaptureSrc PRIVATE AVKYS_PLUGIN_DESKTOPCAPTURE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(DesktopCaptureSrc avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS DesktopCaptureSrc RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/src/androidscreen/jar/src/org/webcamoid/plugins/DesktopCapture/submodules/androidscreen/AkAndroidScreenCallbacks.java
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/src/androidscreen/jar/src/org/webcamoid/plugins/DesktopCapture/submodules/androidscreen/AkAndroidScreenCallbacks.java
@@ -19,7 +19,6 @@
 
 package org.webcamoid.plugins.DesktopCapture.submodules.androidscreen;
 
-import java.nio.ByteBuffer;
 import android.media.Image;
 import android.media.ImageReader;
 import android.media.projection.MediaProjection;
@@ -43,36 +42,12 @@ public class AkAndroidScreenCallbacks im
     @Override
     public void onImageAvailable(ImageReader imageReader)
     {
-        Image image = imageReader.acquireLatestImage();
-        Image.Plane[] planes = image.getPlanes();
-        byte[] data = new byte[0];
-
-        for (Image.Plane plane: planes) {
-            ByteBuffer buffer = plane.getBuffer();
-            buffer.rewind();
-            byte[] newData = new byte[buffer.remaining()];
-            buffer.get(newData);
-            byte[] concatData = new byte[data.length + newData.length];
-            System.arraycopy(data, 0, concatData, 0, data.length);
-            System.arraycopy(newData, 0, concatData, data.length, newData.length);
-            data = concatData;
+        try {
+            Image image = imageReader.acquireLatestImage();
+            imageAvailable(m_userPtr, image);
+            image.close();
+        } catch (Exception e) {
         }
-
-        int format = image.getFormat();
-        int width = image.getWidth();
-        int height = image.getHeight();
-        long timestampNs = image.getTimestamp();
-        image.close();
-
-        if (data.length < 1)
-            return;
-
-        imageAvailable(m_userPtr,
-                       format,
-                       width,
-                       height,
-                       timestampNs,
-                       data);
     }
 
     // MediaProjection.Callback
@@ -86,11 +61,6 @@ public class AkAndroidScreenCallbacks im
         }
     }
 
-    private static native void imageAvailable(long userPtr,
-                                              int format,
-                                              int width,
-                                              int height,
-                                              long timestampNs,
-                                              byte[] data);
+    private static native void imageAvailable(long userPtr, Image image);
     private static native void captureStopped(long userPtr);
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/src/androidscreen/src/androidscreendev.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/src/androidscreen/src/androidscreendev.cpp
@@ -18,7 +18,6 @@
  */
 
 #include <QApplication>
-#include <QDesktopWidget>
 #include <QFuture>
 #include <QMutex>
 #include <QScreen>
@@ -53,12 +52,14 @@
 #define VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY (1 << 3)
 #define VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR      (1 << 4)
 
+#define MAKE_FOURCC(a, b, c, d) AK_MAKE_FOURCC(d, c, b, a)
+
 enum ImageFormat
 {
     TRANSLUCENT       = -3,
     TRANSPARENT       = -2,
     OPAQUE            = -1,
-    UNKNOWN           = AK_FOURCC_NULL,
+    UNKNOWN           = 0,
     RGBA_8888         = 1,
     RGBX_8888         = 2,
     RGB_888           = 3,
@@ -85,12 +86,46 @@ enum ImageFormat
     RGBA_1010102      = 43,
     JPEG              = 256,
     DEPTH_POINT_CLOUD = 257,
-    Y8                = AkFourCCR('Y', '8', ' ', ' '),
-    YV12              = AkFourCCR('Y', 'V', '1', '2'),
-    DEPTH16           = AkFourCCR('Y', '1', '6', 'D'),
-    DEPTH_JPEG        = AkFourCCR('c', 'i', 'e', 'i'),
+    Y8                = MAKE_FOURCC('Y', '8', ' ', ' '),
+    YV12              = MAKE_FOURCC('Y', 'V', '1', '2'),
+    DEPTH16           = MAKE_FOURCC('Y', '1', '6', 'D'),
+    DEPTH_JPEG        = MAKE_FOURCC('c', 'i', 'e', 'i'),
 };
 
+using AndroidFmtToAkFmtMap = QMap<__u32, AkVideoCaps::PixelFormat>;
+
+inline AndroidFmtToAkFmtMap initAndroidFmtToAkFmt()
+{
+    AndroidFmtToAkFmtMap androidFmtToAkFmt {
+        {RGBA_8888        , AkVideoCaps::Format_rgba       },
+        {RGBX_8888        , AkVideoCaps::Format_rgb0       },
+        {RGB_888          , AkVideoCaps::Format_rgb24      },
+        {RGB_565          , AkVideoCaps::Format_rgb565     },
+        {RGBA_5551        , AkVideoCaps::Format_rgba5551   },
+        {RGBA_4444        , AkVideoCaps::Format_rgba4444   },
+        {A_8              , AkVideoCaps::Format_gray8      },
+        {L_8              , AkVideoCaps::Format_gray8      },
+        {LA_88            , AkVideoCaps::Format_graya8     },
+        {RGB_332          , AkVideoCaps::Format_rgb332     },
+        {NV16             , AkVideoCaps::Format_nv16       },
+        {NV21             , AkVideoCaps::Format_nv21       },
+        {YUY2             , AkVideoCaps::Format_yuyv422    },
+        {YUV_420_888      , AkVideoCaps::Format_yuv420p    },
+        {YUV_422_888      , AkVideoCaps::Format_yuv422p    },
+        {FLEX_RGB_888     , AkVideoCaps::Format_rgb24p     },
+        {FLEX_RGBA_8888   , AkVideoCaps::Format_rgbap      },
+        {RGBA_1010102     , AkVideoCaps::Format_rgba1010102},
+        {Y8               , AkVideoCaps::Format_gray8      },
+        {YV12             , AkVideoCaps::Format_yvu420p    },
+    };
+
+    return androidFmtToAkFmt;
+}
+
+Q_GLOBAL_STATIC_WITH_ARGS(AndroidFmtToAkFmtMap,
+                          androidFmtToAkFmt,
+                          (initAndroidFmtToAkFmt()))
+
 class AndroidScreenDevPrivate: public QAndroidActivityResultReceiver
 {
     public:
@@ -125,12 +160,9 @@ class AndroidScreenDevPrivate: public QA
         static void imageAvailable(JNIEnv *env,
                                    jobject obj,
                                    jlong userPtr,
-                                   jint format,
-                                   jint width,
-                                   jint height,
-                                   jlong timestampNs,
-                                   jbyteArray data);
+                                   jobject image);
         static void captureStopped(JNIEnv *env, jobject obj, jlong userPtr);
+        void readFrame();
 };
 
 AndroidScreenDev::AndroidScreenDev():
@@ -144,7 +176,9 @@ AndroidScreenDev::AndroidScreenDev():
     QObject::connect(&this->d->m_timer,
                      &QTimer::timeout,
                      this,
-                     &AndroidScreenDev::readFrame);
+                     [this] () {
+                         this->d->readFrame();
+                     });
 }
 
 AndroidScreenDev::~AndroidScreenDev()
@@ -186,9 +220,9 @@ QList<int> AndroidScreenDev::streams() c
     return streams;
 }
 
-int AndroidScreenDev::defaultStream(const QString &mimeType)
+int AndroidScreenDev::defaultStream(AkCaps::CapsType type)
 {
-    if (mimeType == "video/x-raw")
+    if (type == AkCaps::CapsVideo)
         return 0;
 
     return -1;
@@ -203,14 +237,19 @@ QString AndroidScreenDev::description(co
     return QString();
 }
 
-AkCaps AndroidScreenDev::caps(int stream)
+AkVideoCaps AndroidScreenDev::caps(int stream)
 {
     if (this->d->m_curScreenNumber < 0
         || stream != 0)
-        return AkCaps();
+        return {};
 
+    auto curScreen = this->d->m_curScreenNumber;
     auto screens = QGuiApplication::screens();
-    auto screen = screens[this->d->m_curScreenNumber];
+
+    if (curScreen < 0 || curScreen >= screens.size())
+        return {};
+
+    auto screen = screens[curScreen];
 
     if (!screen)
         return {};
@@ -221,6 +260,130 @@ AkCaps AndroidScreenDev::caps(int stream
                        this->d->m_fps);
 }
 
+void AndroidScreenDev::setFps(const AkFrac &fps)
+{
+    if (this->d->m_fps == fps)
+        return;
+
+    this->d->m_mutex.lock();
+    this->d->m_fps = fps;
+    this->d->m_mutex.unlock();
+    emit this->fpsChanged(fps);
+    this->d->m_timer.setInterval(qRound(1.e3 *
+                                        this->d->m_fps.invert().value()));
+}
+
+void AndroidScreenDev::resetFps()
+{
+    this->setFps(AkFrac(30000, 1001));
+}
+
+void AndroidScreenDev::setMedia(const QString &media)
+{
+    for (int i = 0; i < QGuiApplication::screens().size(); i++) {
+        auto screen = QString("screen://%1").arg(i);
+
+        if (screen == media) {
+            if (this->d->m_curScreenNumber == i)
+                break;
+
+            this->d->m_curScreen = screen;
+            this->d->m_curScreenNumber = i;
+            emit this->mediaChanged(media);
+
+            break;
+        }
+    }
+}
+
+void AndroidScreenDev::resetMedia()
+{
+    int screen = QGuiApplication::screens().indexOf(QGuiApplication::primaryScreen());
+
+    if (this->d->m_curScreenNumber == screen)
+        return;
+
+    this->d->m_curScreen = QString("screen://%1").arg(screen);
+    this->d->m_curScreenNumber = screen;
+
+    emit this->mediaChanged(this->d->m_curScreen);
+}
+
+void AndroidScreenDev::setStreams(const QList<int> &streams)
+{
+    Q_UNUSED(streams)
+}
+
+void AndroidScreenDev::resetStreams()
+{
+
+}
+
+bool AndroidScreenDev::init()
+{
+    this->uninit();
+
+    this->d->m_canCapture = false;
+    auto serviceName = QAndroidJniObject::fromString(MEDIA_PROJECTION_SERVICE);
+    this->d->m_service =
+            this->d->m_activity.callObjectMethod("getSystemService",
+                                                 "(Ljava/lang/String;)Ljava/lang/Object;",
+                                                 serviceName.object());
+
+    if (!this->d->m_service.isValid())
+        return false;
+
+    auto intent =
+            this->d->m_service.callObjectMethod("createScreenCaptureIntent",
+                                                "()Landroid/content/Intent;");
+
+    if (!intent.isValid())
+        return false;
+
+    QtAndroid::startActivity(intent,
+                             SCREEN_CAPTURE_REQUEST_CODE,
+                             this->d);
+
+    this->d->m_mutex.lock();
+    this->d->m_captureSetupReady.wait(&this->d->m_mutex);
+    this->d->m_mutex.unlock();
+
+    if (!this->d->m_canCapture)
+        return false;
+
+    this->d->m_id = Ak::id();
+    this->d->m_timer.setInterval(qRound(1.e3 *
+                                        this->d->m_fps.invert().value()));
+    this->d->m_timer.start();
+
+    return true;
+}
+
+bool AndroidScreenDev::uninit()
+{
+    this->d->m_timer.stop();
+    this->d->m_threadStatus.waitForFinished();
+
+    if (this->d->m_mediaProjection.isValid()) {
+        this->d->m_mediaProjection.callMethod<void>("stop");
+        this->d->m_mediaProjection = {};
+    }
+
+    if (this->d->m_virtualDisplay.isValid()) {
+        this->d->m_virtualDisplay.callMethod<void>("release");
+        this->d->m_virtualDisplay = {};
+    }
+
+    if (this->d->m_imageReader.isValid()) {
+        this->d->m_imageReader.callMethod<void>("close");
+        this->d->m_imageReader = {};
+    }
+
+    this->d->m_service = {};
+
+    return true;
+}
+
 AndroidScreenDevPrivate::AndroidScreenDevPrivate(AndroidScreenDev *self):
     self(self)
 {
@@ -242,8 +405,8 @@ void AndroidScreenDevPrivate::registerNa
 
     if (auto jclass = jenv.findClass(JCLASS(AkAndroidScreenCallbacks))) {
         QVector<JNINativeMethod> methods {
-            {"imageAvailable", "(JIIIJ[B)V", reinterpret_cast<void *>(AndroidScreenDevPrivate::imageAvailable)},
-            {"captureStopped", "(J)V"      , reinterpret_cast<void *>(AndroidScreenDevPrivate::captureStopped)},
+            {"imageAvailable", "(JLandroid/media/Image;)V", reinterpret_cast<void *>(AndroidScreenDevPrivate::imageAvailable)},
+            {"captureStopped", "(J)V"                     , reinterpret_cast<void *>(AndroidScreenDevPrivate::captureStopped)},
         };
 
         jenv->RegisterNatives(jclass, methods.data(), methods.size());
@@ -358,207 +521,158 @@ handleActivityResult_fail:
 void AndroidScreenDevPrivate::imageAvailable(JNIEnv *env,
                                              jobject obj,
                                              jlong userPtr,
-                                             jint format,
-                                             jint width,
-                                             jint height,
-                                             jlong timestampNs,
-                                             jbyteArray data)
+                                             jobject image)
 {
-    Q_UNUSED(env)
     Q_UNUSED(obj)
-    Q_UNUSED(format)
 
-    auto dataSize = env->GetArrayLength(data);
-
-    if (dataSize < 1)
+    if (!image)
         return;
 
-    QByteArray oBuffer(dataSize, Qt::Uninitialized);
-    env->GetByteArrayRegion(data,
-                            0,
-                            dataSize,
-                            reinterpret_cast<jbyte *>(oBuffer.data()));
+    jobjectArray planesArray = nullptr;
 
-    auto self = reinterpret_cast<AndroidScreenDevPrivate *>(userPtr);
-    AkVideoCaps caps(AkVideoCaps::Format_0bgr,
-                     width,
-                     height,
-                     self->m_fps);
-    auto pts = qint64(timestampNs * self->m_fps.value() / 1e9);
+    if (auto getPlanesFunc = env->GetMethodID(env->GetObjectClass(image),
+                                              "getPlanes",
+                                              "()[Landroid/media/Image$Plane;"))
+        planesArray =
+                reinterpret_cast<jobjectArray>(env->CallObjectMethod(image,
+                                                                     getPlanesFunc));
 
-    AkVideoPacket packet;
-    packet.caps() = caps;
-    packet.buffer() = oBuffer;
-    packet.setPts(pts);
-    packet.setTimeBase(self->m_fps.invert());
-    packet.setIndex(0);
-    packet.setId(self->m_id);
-    packet = packet.convert(AkVideoCaps::Format_rgb24);
-
-    self->m_mutex.lock();
-    self->m_curPacket = packet;
-    self->m_packetReady.wakeAll();
-    self->m_mutex.unlock();
-}
+    if (!planesArray)
+        return;
 
-void AndroidScreenDevPrivate::captureStopped(JNIEnv *env,
-                                             jobject obj,
-                                             jlong userPtr)
-{
-    Q_UNUSED(env)
-    Q_UNUSED(obj)
-    Q_UNUSED(userPtr)
-}
+    auto planes = env->GetArrayLength(planesArray);
 
-void AndroidScreenDev::setFps(const AkFrac &fps)
-{
-    if (this->d->m_fps == fps)
+    if (planes < 1)
         return;
 
-    this->d->m_mutex.lock();
-    this->d->m_fps = fps;
-    this->d->m_mutex.unlock();
-    emit this->fpsChanged(fps);
-    this->d->m_timer.setInterval(qRound(1.e3 *
-                                        this->d->m_fps.invert().value()));
-}
-
-void AndroidScreenDev::resetFps()
-{
-    this->setFps(AkFrac(30000, 1001));
-}
+    jint format = 0;
 
-void AndroidScreenDev::setMedia(const QString &media)
-{
-    for (int i = 0; i < QGuiApplication::screens().size(); i++) {
-        auto screen = QString("screen://%1").arg(i);
+    if (auto getFormatFunc = env->GetMethodID(env->GetObjectClass(image),
+                                              "getFormat",
+                                              "()I"))
+        format = env->CallIntMethod(image, getFormatFunc);
 
-        if (screen == media) {
-            if (this->d->m_curScreenNumber == i)
-                break;
+    auto fmt = androidFmtToAkFmt->value(format, AkVideoCaps::Format_none);
 
-            this->d->m_curScreen = screen;
-            this->d->m_curScreenNumber = i;
-            emit this->mediaChanged(media);
+    if (fmt == AkVideoCaps::Format_none)
+        return;
 
-            break;
-        }
-    }
-}
+    jint width = 0;
 
-void AndroidScreenDev::resetMedia()
-{
-    int screen = QGuiApplication::screens().indexOf(QGuiApplication::primaryScreen());
+    if (auto getWidthFunc = env->GetMethodID(env->GetObjectClass(image),
+                                             "getWidth",
+                                             "()I"))
+        width = env->CallIntMethod(image, getWidthFunc);
 
-    if (this->d->m_curScreenNumber == screen)
+    if (width < 1)
         return;
 
-    this->d->m_curScreen = QString("screen://%1").arg(screen);
-    this->d->m_curScreenNumber = screen;
+    jint height = 0;
 
-    emit this->mediaChanged(this->d->m_curScreen);
-}
+    if (auto getHeightFunc = env->GetMethodID(env->GetObjectClass(image),
+                                              "getHeight",
+                                              "()I"))
+        height = env->CallIntMethod(image, getHeightFunc);
 
-void AndroidScreenDev::setStreams(const QList<int> &streams)
-{
-    Q_UNUSED(streams)
-}
-
-void AndroidScreenDev::resetStreams()
-{
+    if (height < 1)
+        return;
 
-}
+    auto self = reinterpret_cast<AndroidScreenDevPrivate *>(userPtr);
 
-bool AndroidScreenDev::init()
-{
-    this->uninit();
+    AkVideoPacket packet({fmt, width, height, self->m_fps}, true);
 
-    this->d->m_canCapture = false;
-    auto serviceName = QAndroidJniObject::fromString(MEDIA_PROJECTION_SERVICE);
-    this->d->m_service =
-            this->d->m_activity.callObjectMethod("getSystemService",
-                                                 "(Ljava/lang/String;)Ljava/lang/Object;",
-                                                 serviceName.object());
+    for(int plane = 0; plane < planes; plane++) {
+        auto planeObject = env->GetObjectArrayElement(planesArray, plane);
+        jint iLineSize = 0;
 
-    if (!this->d->m_service.isValid())
-        return false;
+        if (auto getPixelStrideFunc = env->GetMethodID(env->GetObjectClass(planeObject),
+                                                       "getRowStride",
+                                                       "()I"))
+            iLineSize = env->CallIntMethod(planeObject, getPixelStrideFunc);
 
-    auto intent =
-            this->d->m_service.callObjectMethod("createScreenCaptureIntent",
-                                                "()Landroid/content/Intent;");
+        if (iLineSize < 1)
+            continue;
 
-    if (!intent.isValid())
-        return false;
+        auto lineSize = qMin<size_t>(iLineSize, packet.lineSize(plane));
 
-    QtAndroid::startActivity(intent,
-                             SCREEN_CAPTURE_REQUEST_CODE,
-                             this->d);
+        jobject byteBuffer = nullptr;
 
-    this->d->m_mutex.lock();
-    this->d->m_captureSetupReady.wait(&this->d->m_mutex);
-    this->d->m_mutex.unlock();
+        if (auto getBufferFunc = env->GetMethodID(env->GetObjectClass(planeObject),
+                                                  "getBuffer",
+                                                  "()Ljava/nio/ByteBuffer;"))
+            byteBuffer = env->CallObjectMethod(planeObject, getBufferFunc);
 
-    if (!this->d->m_canCapture)
-        return false;
+        if (!byteBuffer)
+            continue;
 
-    this->d->m_id = Ak::id();
-    this->d->m_timer.setInterval(qRound(1.e3 *
-                                        this->d->m_fps.invert().value()));
-    this->d->m_timer.start();
+        auto planeData = reinterpret_cast<quint8 *>(env->GetDirectBufferAddress(byteBuffer));
 
-    return true;
-}
+        if (!planeData)
+            continue;
 
-bool AndroidScreenDev::uninit()
-{
-    this->d->m_timer.stop();
-    this->d->m_threadStatus.waitForFinished();
+        auto heightDiv = packet.heightDiv(plane);
 
-    if (this->d->m_mediaProjection.isValid()) {
-        this->d->m_mediaProjection.callMethod<void>("stop");
-        this->d->m_mediaProjection = {};
+        for (int y = 0; y < packet.caps().height(); ++y) {
+            int ys = y >> heightDiv;
+            auto srcLine = planeData + ys * iLineSize;
+            auto dstLine = packet.line(plane, y);
+            memcpy(dstLine, srcLine, lineSize);
+        }
     }
 
-    if (this->d->m_virtualDisplay.isValid()) {
-        this->d->m_virtualDisplay.callMethod<void>("release");
-        this->d->m_virtualDisplay = {};
-    }
+    jlong timestampNs = 0;
 
-    if (this->d->m_imageReader.isValid()) {
-        this->d->m_imageReader.callMethod<void>("close");
-        this->d->m_imageReader = {};
-    }
+    if (auto getTimestampFunc = env->GetMethodID(env->GetObjectClass(image),
+                                                 "getTimestamp",
+                                                 "()J"))
+        timestampNs = env->CallIntMethod(image, getTimestampFunc);
 
-    this->d->m_service = {};
+    auto pts = qint64(timestampNs * self->m_fps.value() / 1e9);
+    packet.setPts(pts);
+    packet.setTimeBase(self->m_fps.invert());
+    packet.setIndex(0);
+    packet.setId(self->m_id);
 
-    return true;
+    self->m_mutex.lock();
+    self->m_curPacket = packet;
+    self->m_packetReady.wakeAll();
+    self->m_mutex.unlock();
 }
 
-void AndroidScreenDev::readFrame()
+void AndroidScreenDevPrivate::captureStopped(JNIEnv *env,
+                                             jobject obj,
+                                             jlong userPtr)
 {
-    this->d->m_mutex.lock();
+    Q_UNUSED(env)
+    Q_UNUSED(obj)
+    Q_UNUSED(userPtr)
+}
+
+void AndroidScreenDevPrivate::readFrame()
+{
+    this->m_mutex.lock();
 
-    if (!this->d->m_curPacket)
-        if (!this->d->m_packetReady.wait(&this->d->m_mutex, 1000)) {
-            this->d->m_mutex.unlock();
+    if (!this->m_curPacket)
+        if (!this->m_packetReady.wait(&this->m_mutex, 1000)) {
+            this->m_mutex.unlock();
 
             return;
         }
 
-    auto packet = this->d->m_curPacket;
-    this->d->m_curPacket = {};
-    this->d->m_mutex.unlock();
+    auto packet = this->m_curPacket;
+    this->m_curPacket = {};
+    this->m_mutex.unlock();
 
-    if (!this->d->m_threadedRead) {
-        emit this->oStream(packet);
+    if (!this->m_threadedRead) {
+        emit self->oStream(packet);
 
         return;
     }
 
-    if (!this->d->m_threadStatus.isRunning()) {
-        this->d->m_threadStatus =
-                QtConcurrent::run(&this->d->m_threadPool,
-                                  this->d,
+    if (!this->m_threadStatus.isRunning()) {
+        this->m_threadStatus =
+                QtConcurrent::run(&this->m_threadPool,
+                                  this,
                                   &AndroidScreenDevPrivate::sendPacket,
                                   packet);
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/src/androidscreen/src/androidscreendev.h
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/src/androidscreen/src/androidscreendev.h
@@ -50,13 +50,13 @@ class AndroidScreenDev: public ScreenDev
         AndroidScreenDev();
         ~AndroidScreenDev();
 
-        Q_INVOKABLE AkFrac fps() const;
-        Q_INVOKABLE QStringList medias();
-        Q_INVOKABLE QString media() const;
-        Q_INVOKABLE QList<int> streams() const;
-        Q_INVOKABLE int defaultStream(const QString &mimeType);
-        Q_INVOKABLE QString description(const QString &media);
-        Q_INVOKABLE AkCaps caps(int stream);
+        Q_INVOKABLE AkFrac fps() const override;
+        Q_INVOKABLE QStringList medias() override;
+        Q_INVOKABLE QString media() const override;
+        Q_INVOKABLE QList<int> streams() const override;
+        Q_INVOKABLE int defaultStream(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString description(const QString &media) override;
+        Q_INVOKABLE AkVideoCaps caps(int stream) override;
 
     private:
         AndroidScreenDevPrivate *d;
@@ -71,17 +71,16 @@ class AndroidScreenDev: public ScreenDev
         void error(const QString &message);
 
     public slots:
-        void setFps(const AkFrac &fps);
-        void resetFps();
-        void setMedia(const QString &media);
-        void resetMedia();
-        void setStreams(const QList<int> &streams);
-        void resetStreams();
-        bool init();
-        bool uninit();
+        void setFps(const AkFrac &fps) override;
+        void resetFps() override;
+        void setMedia(const QString &media) override;
+        void resetMedia() override;
+        void setStreams(const QList<int> &streams) override;
+        void resetStreams() override;
+        bool init() override;
+        bool uninit() override;
 
-    private slots:
-        void readFrame();
+    friend class AndroidScreenDevPrivate;
 };
 
 #endif // ANDROIDSCREENDEV_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/src/avfoundation/src/avfoundationscreendev.h
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/src/avfoundation/src/avfoundationscreendev.h
@@ -25,6 +25,7 @@
 #include "screendev.h"
 
 class AVFoundationScreenDevPrivate;
+class AkVideoPacket;
 class QScreen;
 
 class AVFoundationScreenDev: public ScreenDev
@@ -53,25 +54,17 @@ class AVFoundationScreenDev: public Scre
         AVFoundationScreenDev();
         ~AVFoundationScreenDev();
 
-        Q_INVOKABLE AkFrac fps() const;
-        Q_INVOKABLE QStringList medias();
-        Q_INVOKABLE QString media() const;
-        Q_INVOKABLE QList<int> streams() const;
-        Q_INVOKABLE int defaultStream(const QString &mimeType);
-        Q_INVOKABLE QString description(const QString &media);
-        Q_INVOKABLE AkCaps caps(int stream);
-
-        void frameReceived(CGDirectDisplayID screen,
-                           const QByteArray &buffer,
-                           qint64 pts,
-                           const AkFrac &fps,
-                           qint64 id);
+        Q_INVOKABLE AkFrac fps() const override;
+        Q_INVOKABLE QStringList medias() override;
+        Q_INVOKABLE QString media() const override;
+        Q_INVOKABLE QList<int> streams() const override;
+        Q_INVOKABLE int defaultStream(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString description(const QString &media) override;
+        Q_INVOKABLE AkVideoCaps caps(int stream) override;
 
     private:
         AVFoundationScreenDevPrivate *d;
 
-        void sendPacket(const AkPacket &packet);
-
     signals:
         void mediasChanged(const QStringList &medias);
         void mediaChanged(const QString &media);
@@ -82,14 +75,15 @@ class AVFoundationScreenDev: public Scre
         void error(const QString &message);
 
     public slots:
-        void setFps(const AkFrac &fps);
-        void resetFps();
-        void setMedia(const QString &media);
-        void resetMedia();
-        void setStreams(const QList<int> &streams);
-        void resetStreams();
-        bool init();
-        bool uninit();
+        void setFps(const AkFrac &fps) override;
+        void resetFps() override;
+        void setMedia(const QString &media) override;
+        void resetMedia() override;
+        void setStreams(const QList<int> &streams) override;
+        void resetStreams() override;
+        bool init() override;
+        bool uninit() override;
+        void frameReceived(const AkVideoPacket &videoPacket);
 
     private slots:
         void screenAdded(QScreen *screen);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/src/avfoundation/src/avfoundationscreendev.mm
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/src/avfoundation/src/avfoundationscreendev.mm
@@ -18,7 +18,6 @@
  */
 
 #include <QApplication>
-#include <QDesktopWidget>
 #include <QScreen>
 #include <QThreadPool>
 #include <QtConcurrent>
@@ -55,6 +54,7 @@ AVFoundationScreenDev::AVFoundationScree
     for (auto screen: QGuiApplication::screens()) {
         QObject::connect(screen,
                          &QScreen::geometryChanged,
+                         this,
                          [=]() { this->srceenResized(int(i)); });
         i++;
     }
@@ -108,9 +108,9 @@ QList<int> AVFoundationScreenDev::stream
     return streams;
 }
 
-int AVFoundationScreenDev::defaultStream(const QString &mimeType)
+int AVFoundationScreenDev::defaultStream(AkCaps::CapsType type)
 {
-    if (mimeType == "video/x-raw")
+    if (type == AkCaps::CapsVideo)
         return 0;
 
     return -1;
@@ -125,13 +125,19 @@ QString AVFoundationScreenDev::descripti
     return QString();
 }
 
-AkCaps AVFoundationScreenDev::caps(int stream)
+AkVideoCaps AVFoundationScreenDev::caps(int stream)
 {
     if (this->d->m_curScreenNumber < 0
         || stream != 0)
         return {};
 
-    auto screen = QGuiApplication::screens()[this->d->m_curScreenNumber];
+    auto curScreen = this->d->m_curScreenNumber;
+    auto screens = QGuiApplication::screens();
+
+    if (curScreen < 0 || curScreen >= screens.size())
+        return {};
+
+    auto screen = screens[curScreen];
 
     if (!screen)
         return {};
@@ -142,33 +148,6 @@ AkCaps AVFoundationScreenDev::caps(int s
                        this->d->m_fps);
 }
 
-void AVFoundationScreenDev::frameReceived(CGDirectDisplayID screen,
-                                          const QByteArray &buffer,
-                                          qint64 pts,
-                                          const AkFrac &fps,
-                                          qint64 id)
-{
-    CGImageRef image = CGDisplayCreateImage(screen);
-
-    AkVideoPacket videoPacket;
-    videoPacket.caps() = {AkVideoCaps::Format_argb,
-                          int(CGImageGetWidth(image)),
-                          int(CGImageGetHeight(image)),
-                          fps};
-    videoPacket.buffer() = buffer;
-    videoPacket.pts() = pts;
-    videoPacket.timeBase() = fps.invert();
-    videoPacket.index() = 0;
-    videoPacket.id() = id;
-
-    emit this->oStream(videoPacket);
-}
-
-void AVFoundationScreenDev::sendPacket(const AkPacket &packet)
-{
-    emit this->oStream(packet);
-}
-
 void AVFoundationScreenDev::setFps(const AkFrac &fps)
 {
     if (this->d->m_fps == fps)
@@ -267,7 +246,7 @@ bool AVFoundationScreenDev::init()
 
     auto videoOutputSettings =
             [NSDictionary
-             dictionaryWithObject: [NSNumber numberWithUnsignedInt: kCVPixelFormatType_32BGRA]
+             dictionaryWithObject: [NSNumber numberWithUnsignedInt: kCVPixelFormatType_32ARGB]
              forKey: id(kCVPixelBufferPixelFormatTypeKey)];
     [this->d->m_videoOutput setVideoSettings: videoOutputSettings];
     [this->d->m_videoOutput setAlwaysDiscardsLateVideoFrames: YES];
@@ -314,6 +293,11 @@ bool AVFoundationScreenDev::uninit()
     return true;
 }
 
+void AVFoundationScreenDev::frameReceived(const AkVideoPacket &videoPacket)
+{
+    emit this->oStream(videoPacket);
+}
+
 void AVFoundationScreenDev::screenAdded(QScreen *screen)
 {
     Q_UNUSED(screen)
@@ -323,6 +307,7 @@ void AVFoundationScreenDev::screenAdded(
         if (screen_ == screen)
             QObject::connect(screen_,
                              &QScreen::geometryChanged,
+                             this,
                              [=]() { this->srceenResized(int(i)); });
 
         i++;
@@ -341,7 +326,15 @@ void AVFoundationScreenDev::screenRemove
 void AVFoundationScreenDev::srceenResized(int screen)
 {
     auto media = QString("screen://%1").arg(screen);
-    auto widget = QGuiApplication::screens()[screen];
+    auto screens = QGuiApplication::screens();
+
+    if (screen < 0 || screen >= screens.size())
+        return;
+
+    auto widget = screens[screen];
+
+    if (!widget)
+        return;
 
     emit this->sizeChanged(media, widget->size());
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/src/avfoundation/src/framegrabber.mm
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/src/avfoundation/src/framegrabber.mm
@@ -19,6 +19,7 @@
 
 #include <QTime>
 #include <ak.h>
+#include <akvideopacket.h>
 
 #import "framegrabber.h"
 
@@ -52,7 +53,9 @@
         return;
 
     CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(videoFrame);
-    auto bufferSize = CVPixelBufferGetDataSize(imageBuffer);
+
+    if (!imageBuffer)
+        return;
 
     CMItemCount count;
     CMSampleTimingInfo timingInfo;
@@ -71,15 +74,31 @@
         fps = m_fps;
     }
 
-    QByteArray buffer(int(bufferSize), 0);
+    AkVideoPacket videoPacket({AkVideoCaps::Format_argb,
+                               int(CVPixelBufferGetWidth(imageBuffer)),
+                               int(CVPixelBufferGetHeight(imageBuffer)),
+                               fps});
 
     CVPixelBufferLockBaseAddress(imageBuffer, 0);
-    memcpy(buffer.data(),
-           CVPixelBufferGetBaseAddress(imageBuffer),
-           bufferSize);
+    auto iData = reinterpret_cast<const quint8 *>(CVPixelBufferGetBaseAddress(imageBuffer));
+    auto iLineSize = CVPixelBufferGetBytesPerRow(imageBuffer);
+    auto lineSize = qMin<size_t>(videoPacket.lineSize(0),
+                                 iLineSize);
+
+    for (int y = 0; y < videoPacket.caps().height(); ++y) {
+        auto srcLine = iData + y * iLineSize;
+        auto dstLine = videoPacket.line(0, y);
+        memcpy(dstLine, srcLine, lineSize);
+    }
+
     CVPixelBufferUnlockBaseAddress(imageBuffer, 0);
 
-    m_screenDev->frameReceived(m_screen, buffer, pts, fps, m_id);
+    videoPacket.setPts(pts);
+    videoPacket.setTimeBase(fps.invert());
+    videoPacket.setIndex(0);
+    videoPacket.setId(m_id);
+
+    m_screenDev->frameReceived(videoPacket);
 }
 
 @end
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/src/desktopcapture.h
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/src/desktopcapture.h
@@ -29,8 +29,8 @@ class DesktopCapture: public QObject, pu
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "../pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // DESKTOPCAPTURE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/src/desktopcaptureelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/src/desktopcaptureelement.cpp
@@ -101,12 +101,13 @@ DesktopCaptureElement::~DesktopCaptureEl
 AkFrac DesktopCaptureElement::fps() const
 {
     this->d->m_mutex.lock();
-    AkFrac fps;
+    auto screenCapture = this->d->m_screenCapture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_screenCapture)
-        fps = this->d->m_screenCapture->fps();
+    AkFrac fps;
 
-    this->d->m_mutex.unlock();
+    if (screenCapture)
+        fps = screenCapture->fps();
 
     return fps;
 }
@@ -114,12 +115,13 @@ AkFrac DesktopCaptureElement::fps() cons
 QStringList DesktopCaptureElement::medias()
 {
     this->d->m_mutex.lock();
-    QStringList medias;
+    auto screenCapture = this->d->m_screenCapture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_screenCapture)
-        medias = this->d->m_screenCapture->medias();
+    QStringList medias;
 
-    this->d->m_mutex.unlock();
+    if (screenCapture)
+        medias = screenCapture->medias();
 
     return medias;
 }
@@ -127,12 +129,13 @@ QStringList DesktopCaptureElement::media
 QString DesktopCaptureElement::media() const
 {
     this->d->m_mutex.lock();
+    auto screenCapture = this->d->m_screenCapture;
+    this->d->m_mutex.unlock();
+
     QString media;
 
-    if (this->d->m_screenCapture)
-        media = this->d->m_screenCapture->media();
-
-    this->d->m_mutex.unlock();
+    if (screenCapture)
+        media = screenCapture->media();
 
     return media;
 }
@@ -140,25 +143,27 @@ QString DesktopCaptureElement::media() c
 QList<int> DesktopCaptureElement::streams()
 {
     this->d->m_mutex.lock();
-    QList<int> streams;
+    auto screenCapture = this->d->m_screenCapture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_screenCapture)
-        streams = this->d->m_screenCapture->streams();
+    QList<int> streams;
 
-    this->d->m_mutex.unlock();
+    if (screenCapture)
+        streams = screenCapture->streams();
 
     return streams;
 }
 
-int DesktopCaptureElement::defaultStream(const QString &mimeType)
+int DesktopCaptureElement::defaultStream(AkCaps::CapsType type)
 {
     this->d->m_mutex.lock();
+    auto screenCapture = this->d->m_screenCapture;
+    this->d->m_mutex.unlock();
+
     int stream = 0;
 
-    if (this->d->m_screenCapture)
-        stream = this->d->m_screenCapture->defaultStream(mimeType);
-
-    this->d->m_mutex.unlock();
+    if (screenCapture)
+        stream = screenCapture->defaultStream(type);
 
     return stream;
 }
@@ -166,12 +171,13 @@ int DesktopCaptureElement::defaultStream
 QString DesktopCaptureElement::description(const QString &media)
 {
     this->d->m_mutex.lock();
-    QString description;
+    auto screenCapture = this->d->m_screenCapture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_screenCapture)
-        description = this->d->m_screenCapture->description(media);
+    QString description;
 
-    this->d->m_mutex.unlock();
+    if (screenCapture)
+        description = screenCapture->description(media);
 
     return description;
 }
@@ -179,12 +185,13 @@ QString DesktopCaptureElement::descripti
 AkCaps DesktopCaptureElement::caps(int stream)
 {
     this->d->m_mutex.lock();
-    AkCaps caps;
+    auto screenCapture = this->d->m_screenCapture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_screenCapture)
-        caps = this->d->m_screenCapture->caps(stream);
+    AkVideoCaps caps;
 
-    this->d->m_mutex.unlock();
+    if (screenCapture)
+        caps = screenCapture->caps(stream);
 
     return caps;
 }
@@ -208,12 +215,12 @@ void DesktopCaptureElement::controlInter
 void DesktopCaptureElement::setFps(const AkFrac &fps)
 {
     this->d->m_mutex.lock();
-
-    if (this->d->m_screenCapture)
-        this->d->m_screenCapture->setFps(fps);
-
+    auto screenCapture = this->d->m_screenCapture;
     this->d->m_mutex.unlock();
 
+    if (screenCapture)
+        screenCapture->setFps(fps);
+
     QSettings settings;
     settings.beginGroup("DesktopCapture");
     settings.setValue("fps", fps.toString());
@@ -223,36 +230,40 @@ void DesktopCaptureElement::setFps(const
 void DesktopCaptureElement::resetFps()
 {
     this->d->m_mutex.lock();
-
-    if (this->d->m_screenCapture)
-        this->d->m_screenCapture->resetFps();
-
+    auto screenCapture = this->d->m_screenCapture;
     this->d->m_mutex.unlock();
+
+    if (screenCapture)
+        screenCapture->resetFps();
 }
 
 void DesktopCaptureElement::setMedia(const QString &media)
 {
     this->d->m_mutex.lock();
-
-    if (this->d->m_screenCapture)
-        this->d->m_screenCapture->setMedia(media);
-
+    auto screenCapture = this->d->m_screenCapture;
     this->d->m_mutex.unlock();
+
+    if (screenCapture)
+        screenCapture->setMedia(media);
 }
 
 void DesktopCaptureElement::resetMedia()
 {
     this->d->m_mutex.lock();
-
-    if (this->d->m_screenCapture)
-        this->d->m_screenCapture->resetMedia();
-
+    auto screenCapture = this->d->m_screenCapture;
     this->d->m_mutex.unlock();
+
+    if (screenCapture)
+        screenCapture->resetMedia();
 }
 
 bool DesktopCaptureElement::setState(AkElement::ElementState state)
 {
-    if (!this->d->m_screenCapture)
+    this->d->m_mutex.lock();
+    auto screenCapture = this->d->m_screenCapture;
+    this->d->m_mutex.unlock();
+
+    if (!screenCapture)
         return false;
 
     AkElement::ElementState curState = this->state();
@@ -263,7 +274,7 @@ bool DesktopCaptureElement::setState(AkE
         case AkElement::ElementStatePaused:
             return AkElement::setState(state);
         case AkElement::ElementStatePlaying:
-            if (!this->d->m_screenCapture->init())
+            if (!screenCapture->init())
                 return false;
 
             return AkElement::setState(state);
@@ -278,7 +289,7 @@ bool DesktopCaptureElement::setState(AkE
         case AkElement::ElementStateNull:
             return AkElement::setState(state);
         case AkElement::ElementStatePlaying:
-            if (!this->d->m_screenCapture->init())
+            if (!screenCapture->init())
                 return false;
 
             return AkElement::setState(state);
@@ -292,7 +303,7 @@ bool DesktopCaptureElement::setState(AkE
         switch (state) {
         case AkElement::ElementStateNull:
         case AkElement::ElementStatePaused:
-            this->d->m_screenCapture->uninit();
+            screenCapture->uninit();
 
             return AkElement::setState(state);
         case AkElement::ElementStatePlaying:
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/src/desktopcaptureelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/src/desktopcaptureelement.h
@@ -20,6 +20,7 @@
 #ifndef DESKTOPCAPTUREELEMENT_H
 #define DESKTOPCAPTUREELEMENT_H
 
+#include "akvideocaps.h"
 #include <akmultimediasourceelement.h>
 
 class DesktopCaptureElementPrivate;
@@ -57,20 +58,20 @@ class DesktopCaptureElement: public AkMu
         ~DesktopCaptureElement();
 
         Q_INVOKABLE AkFrac fps() const;
-        Q_INVOKABLE QStringList medias();
-        Q_INVOKABLE QString media() const;
-        Q_INVOKABLE QList<int> streams();
-        Q_INVOKABLE int defaultStream(const QString &mimeType);
-        Q_INVOKABLE QString description(const QString &media);
-        Q_INVOKABLE AkCaps caps(int stream);
+        Q_INVOKABLE QStringList medias() override;
+        Q_INVOKABLE QString media() const override;
+        Q_INVOKABLE QList<int> streams() override;
+        Q_INVOKABLE int defaultStream(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString description(const QString &media) override;
+        Q_INVOKABLE AkCaps caps(int stream) override;
 
     private:
         DesktopCaptureElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
+                                       const QString &controlId) const override;
 
     signals:
         void mediasChanged(const QStringList &medias);
@@ -84,9 +85,9 @@ class DesktopCaptureElement: public AkMu
     public slots:
         void setFps(const AkFrac &fps);
         void resetFps();
-        void setMedia(const QString &media);
-        void resetMedia();
-        bool setState(AkElement::ElementState state);
+        void setMedia(const QString &media) override;
+        void resetMedia() override;
+        bool setState(AkElement::ElementState state) override;
 };
 
 #endif // DESKTOPCAPTUREELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.cpp
@@ -21,7 +21,6 @@
 #include <QDBusInterface>
 #include <QDBusReply>
 #include <QDBusUnixFileDescriptor>
-#include <QDesktopWidget>
 #include <QFuture>
 #include <QMutex>
 #include <QScreen>
@@ -201,9 +200,9 @@ QList<int> PipewireScreenDev::streams()
     return {0};
 }
 
-int PipewireScreenDev::defaultStream(const QString &mimeType)
+int PipewireScreenDev::defaultStream(AkCaps::CapsType type)
 {
-    if (mimeType == "video/x-raw")
+    if (type == AkCaps::CapsVideo)
         return 0;
 
     return -1;
@@ -217,10 +216,10 @@ QString PipewireScreenDev::description(c
     return {tr("PipeWire Screen")};
 }
 
-AkCaps PipewireScreenDev::caps(int stream)
+AkVideoCaps PipewireScreenDev::caps(int stream)
 {
     if (stream != 0)
-        return AkCaps();
+        return {};
 
     auto screen = QGuiApplication::primaryScreen();
 
@@ -339,8 +338,15 @@ void PipewireScreenDev::screenRemoved(QS
 void PipewireScreenDev::srceenResized(int screen)
 {
     auto screens = QGuiApplication::screens();
+
+    if (screen < 0 || screen >= screens.size())
+        return;
+
     auto widget = screens[screen];
 
+    if (!widget)
+        return;
+
     emit this->sizeChanged("screen://pipewire", widget->size());
 }
 
@@ -702,10 +708,10 @@ void PipewireScreenDevPrivate::streamPar
     static const QMap<spa_video_format, AkVideoCaps::PixelFormat> spaFmtToAk {
         {SPA_VIDEO_FORMAT_RGB , AkVideoCaps::Format_bgr24},
         {SPA_VIDEO_FORMAT_BGR , AkVideoCaps::Format_rgb24},
-        {SPA_VIDEO_FORMAT_RGBA, AkVideoCaps::Format_abgr},
-        {SPA_VIDEO_FORMAT_BGRA, AkVideoCaps::Format_argb},
-        {SPA_VIDEO_FORMAT_RGBx, AkVideoCaps::Format_0bgr},
-        {SPA_VIDEO_FORMAT_BGRx, AkVideoCaps::Format_0rgb},
+        {SPA_VIDEO_FORMAT_RGBA, AkVideoCaps::Format_abgrpack},
+        {SPA_VIDEO_FORMAT_BGRA, AkVideoCaps::Format_argbpack},
+        {SPA_VIDEO_FORMAT_RGBx, AkVideoCaps::Format_0bgrpack},
+        {SPA_VIDEO_FORMAT_BGRx, AkVideoCaps::Format_0rgbpack},
     };
 
     if (spaFmtToAk.contains(videoInfo.format)) {
@@ -739,15 +745,19 @@ void PipewireScreenDevPrivate::streamPro
     if (!buffer->buffer->datas[0].data)
         return;
 
-    AkVideoPacket packet;
-    packet.caps() = self->m_curCaps;
-    packet.buffer() =
-            QByteArray(reinterpret_cast<const char *>(buffer->buffer->datas[0].data),
-                       buffer->buffer->datas[0].chunk->size);
+    AkVideoPacket packet(self->m_curCaps);
+    auto iLineSize = buffer->buffer->datas[0].chunk->stride;
+    auto oLineSize = packet.lineSize(0);
+    auto lineSize = qMin<size_t>(iLineSize, oLineSize);
+
+    for (int y = 0; y < packet.caps().height(); y++)
+        memcpy(packet.line(0, y),
+               reinterpret_cast<quint8 *>(buffer->buffer->datas[0].data) + y * iLineSize,
+               lineSize);
+
     auto fps = self->m_curCaps.fps();
     auto pts = qRound64(QTime::currentTime().msecsSinceStartOfDay()
                         * fps.value() / 1e3);
-
     packet.setPts(pts);
     packet.setTimeBase(fps.invert());
     packet.setIndex(0);
@@ -759,8 +769,6 @@ void PipewireScreenDevPrivate::streamPro
         return;
     }
 
-    packet = packet.convert(AkVideoCaps::Format_0rgb);
-
     if (!self->m_threadStatus.isRunning()) {
         self->m_curPacket = packet;
 
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.h
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/src/pipewire/src/pipewirescreendev.h
@@ -51,13 +51,13 @@ class PipewireScreenDev: public ScreenDe
         PipewireScreenDev();
         ~PipewireScreenDev();
 
-        Q_INVOKABLE AkFrac fps() const;
-        Q_INVOKABLE QStringList medias();
-        Q_INVOKABLE QString media() const;
-        Q_INVOKABLE QList<int> streams() const;
-        Q_INVOKABLE int defaultStream(const QString &mimeType);
-        Q_INVOKABLE QString description(const QString &media);
-        Q_INVOKABLE AkCaps caps(int stream);
+        Q_INVOKABLE AkFrac fps() const override;
+        Q_INVOKABLE QStringList medias() override;
+        Q_INVOKABLE QString media() const override;
+        Q_INVOKABLE QList<int> streams() const override;
+        Q_INVOKABLE int defaultStream(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString description(const QString &media) override;
+        Q_INVOKABLE AkVideoCaps caps(int stream) override;
 
     private:
         PipewireScreenDevPrivate *d;
@@ -72,14 +72,14 @@ class PipewireScreenDev: public ScreenDe
         void error(const QString &message);
 
     public slots:
-        void setFps(const AkFrac &fps);
-        void resetFps();
-        void setMedia(const QString &media);
-        void resetMedia();
-        void setStreams(const QList<int> &streams);
-        void resetStreams();
-        bool init();
-        bool uninit();
+        void setFps(const AkFrac &fps) override;
+        void resetFps() override;
+        void setMedia(const QString &media) override;
+        void resetMedia() override;
+        void setStreams(const QList<int> &streams) override;
+        void resetStreams() override;
+        bool init() override;
+        bool uninit() override;
 
     private slots:
         void screenAdded(QScreen *screen);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/src/qtscreen/src/qtscreendev.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/src/qtscreen/src/qtscreendev.cpp
@@ -27,13 +27,32 @@
 #include <QFuture>
 #include <QMutex>
 #include <ak.h>
+#include <akcaps.h>
 #include <akfrac.h>
 #include <akpacket.h>
-#include <akcaps.h>
 #include <akvideopacket.h>
 
 #include "qtscreendev.h"
 
+using ImageToPixelFormatMap = QMap<QImage::Format, AkVideoCaps::PixelFormat>;
+
+inline ImageToPixelFormatMap initImageToPixelFormatMap()
+{
+    ImageToPixelFormatMap imageToAkFormat {
+        {QImage::Format_RGB32     , AkVideoCaps::Format_0rgbpack},
+        {QImage::Format_ARGB32    , AkVideoCaps::Format_argbpack},
+        {QImage::Format_RGB16     , AkVideoCaps::Format_rgb565  },
+        {QImage::Format_RGB555    , AkVideoCaps::Format_rgb555  },
+        {QImage::Format_RGB888    , AkVideoCaps::Format_rgb24   },
+        {QImage::Format_RGB444    , AkVideoCaps::Format_rgb444  },
+        {QImage::Format_Grayscale8, AkVideoCaps::Format_gray8   }
+    };
+
+    return imageToAkFormat;
+}
+
+Q_GLOBAL_STATIC_WITH_ARGS(ImageToPixelFormatMap, imageToAkFormat, (initImageToPixelFormatMap()))
+
 class QtScreenDevPrivate
 {
     public:
@@ -50,6 +69,7 @@ class QtScreenDevPrivate
         bool m_threadedRead {true};
 
         explicit QtScreenDevPrivate(QtScreenDev *self);
+        void readFrame();
         void sendPacket(const AkPacket &packet);
 };
 
@@ -80,7 +100,9 @@ QtScreenDev::QtScreenDev():
     QObject::connect(&this->d->m_timer,
                      &QTimer::timeout,
                      this,
-                     &QtScreenDev::readFrame);
+                     [this] () {
+        this->d->readFrame();
+    });
 }
 
 QtScreenDev::~QtScreenDev()
@@ -122,9 +144,9 @@ QList<int> QtScreenDev::streams() const
     return streams;
 }
 
-int QtScreenDev::defaultStream(const QString &mimeType)
+int QtScreenDev::defaultStream(AkCaps::CapsType type)
 {
-    if (mimeType == "video/x-raw")
+    if (type == AkCaps::CapsVideo)
         return 0;
 
     return -1;
@@ -139,14 +161,19 @@ QString QtScreenDev::description(const Q
     return QString();
 }
 
-AkCaps QtScreenDev::caps(int stream)
+AkVideoCaps QtScreenDev::caps(int stream)
 {
     if (this->d->m_curScreenNumber < 0
         || stream != 0)
-        return AkCaps();
+        return {};
 
+    auto curScreen = this->d->m_curScreenNumber;
     auto screens = QGuiApplication::screens();
-    auto screen = screens[this->d->m_curScreenNumber];
+
+    if (curScreen < 0 || curScreen >= screens.size())
+        return {};
+
+    auto screen = screens[curScreen];
 
     if (!screen)
         return {};
@@ -162,6 +189,72 @@ QtScreenDevPrivate::QtScreenDevPrivate(Q
 {
 }
 
+void QtScreenDevPrivate::readFrame()
+{
+    auto curScreen = this->m_curScreenNumber;
+    auto screens = QGuiApplication::screens();
+
+    if (curScreen < 0 || curScreen >= screens.size())
+        return;
+
+    auto screen = screens[curScreen];
+
+    if (!screen)
+        return;
+
+    auto frame =
+            screen->grabWindow(QApplication::desktop()->winId(),
+                               screen->geometry().x(),
+                               screen->geometry().y(),
+                               screen->geometry().width(),
+                               screen->geometry().height());
+    auto oFrame = frame.toImage();
+
+    if (!imageToAkFormat->contains(oFrame.format()))
+        oFrame = oFrame.convertToFormat(QImage::Format_ARGB32);
+
+    this->m_mutex.lock();
+    auto fps = this->m_fps;
+    this->m_mutex.unlock();
+
+    AkVideoCaps caps(imageToAkFormat->value(oFrame.format()),
+                     oFrame.width(),
+                     oFrame.height(),
+                     fps);
+    AkVideoPacket packet(caps);
+    auto lineSize = qMin<size_t>(oFrame.bytesPerLine(), packet.lineSize(0));
+
+    for (int y = 0; y < oFrame.height(); ++y) {
+        auto srcLine = oFrame.constScanLine(y);
+        auto dstLine = packet.line(0, y);
+        memcpy(dstLine, srcLine, lineSize);
+    }
+
+    auto pts = qRound64(QTime::currentTime().msecsSinceStartOfDay()
+                        * fps.value() / 1e3);
+
+    packet.setPts(pts);
+    packet.setTimeBase(fps.invert());
+    packet.setIndex(0);
+    packet.setId(this->m_id);
+
+    if (!this->m_threadedRead) {
+        emit self->oStream(packet);
+
+        return;
+    }
+
+    if (!this->m_threadStatus.isRunning()) {
+        this->m_curPacket = packet;
+
+        this->m_threadStatus =
+                QtConcurrent::run(&this->m_threadPool,
+                                  this,
+                                  &QtScreenDevPrivate::sendPacket,
+                                  this->m_curPacket);
+    }
+}
+
 void QtScreenDevPrivate::sendPacket(const AkPacket &packet)
 {
     emit self->oStream(packet);
@@ -245,57 +338,6 @@ bool QtScreenDev::uninit()
     return true;
 }
 
-void QtScreenDev::readFrame()
-{
-    auto screens = QGuiApplication::screens();
-    auto screen = screens[this->d->m_curScreenNumber];
-    this->d->m_mutex.lock();
-    auto fps = this->d->m_fps;
-    this->d->m_mutex.unlock();
-
-    AkVideoPacket packet;
-    packet.caps() = {AkVideoCaps::Format_rgb24,
-                     screen->size().width(),
-                     screen->size().height(),
-                     fps};
-
-    auto frame =
-            screen->grabWindow(QApplication::desktop()->winId(),
-                               screen->geometry().x(),
-                               screen->geometry().y(),
-                               screen->geometry().width(),
-                               screen->geometry().height());
-    auto frameImg = frame.toImage().convertToFormat(QImage::Format_RGB888);
-    packet = AkVideoPacket::fromImage(frameImg, packet);
-
-    if (!packet)
-        return;
-
-    auto pts = qRound64(QTime::currentTime().msecsSinceStartOfDay()
-                        * fps.value() / 1e3);
-
-    packet.setPts(pts);
-    packet.setTimeBase(fps.invert());
-    packet.setIndex(0);
-    packet.setId(this->d->m_id);
-
-    if (!this->d->m_threadedRead) {
-        emit this->oStream(packet);
-
-        return;
-    }
-
-    if (!this->d->m_threadStatus.isRunning()) {
-        this->d->m_curPacket = packet;
-
-        this->d->m_threadStatus =
-                QtConcurrent::run(&this->d->m_threadPool,
-                                  this->d,
-                                  &QtScreenDevPrivate::sendPacket,
-                                  this->d->m_curPacket);
-    }
-}
-
 void QtScreenDev::screenAdded(QScreen *screen)
 {
     Q_UNUSED(screen)
@@ -325,8 +367,15 @@ void QtScreenDev::srceenResized(int scre
 {
     auto media = QString("screen://%1").arg(screen);
     auto screens = QGuiApplication::screens();
+
+    if (screen < 0 || screen >= screens.size())
+        return;
+
     auto widget = screens[screen];
 
+    if (!widget)
+        return;
+
     emit this->sizeChanged(media, widget->size());
 }
 
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/src/qtscreen/src/qtscreendev.h
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/src/qtscreen/src/qtscreendev.h
@@ -51,13 +51,13 @@ class QtScreenDev: public ScreenDev
         QtScreenDev();
         ~QtScreenDev();
 
-        Q_INVOKABLE AkFrac fps() const;
-        Q_INVOKABLE QStringList medias();
-        Q_INVOKABLE QString media() const;
-        Q_INVOKABLE QList<int> streams() const;
-        Q_INVOKABLE int defaultStream(const QString &mimeType);
-        Q_INVOKABLE QString description(const QString &media);
-        Q_INVOKABLE AkCaps caps(int stream);
+        Q_INVOKABLE AkFrac fps() const override;
+        Q_INVOKABLE QStringList medias() override;
+        Q_INVOKABLE QString media() const override;
+        Q_INVOKABLE QList<int> streams() const override;
+        Q_INVOKABLE int defaultStream(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString description(const QString &media) override;
+        Q_INVOKABLE AkVideoCaps caps(int stream) override;
 
     private:
         QtScreenDevPrivate *d;
@@ -72,17 +72,16 @@ class QtScreenDev: public ScreenDev
         void error(const QString &message);
 
     public slots:
-        void setFps(const AkFrac &fps);
-        void resetFps();
-        void setMedia(const QString &media);
-        void resetMedia();
-        void setStreams(const QList<int> &streams);
-        void resetStreams();
-        bool init();
-        bool uninit();
+        void setFps(const AkFrac &fps) override;
+        void resetFps() override;
+        void setMedia(const QString &media) override;
+        void resetMedia() override;
+        void setStreams(const QList<int> &streams) override;
+        void resetStreams() override;
+        bool init() override;
+        bool uninit() override;
 
     private slots:
-        void readFrame();
         void screenAdded(QScreen *screen);
         void screenRemoved(QScreen *screen);
         void srceenResized(int screen);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/src/screendev.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/src/screendev.cpp
@@ -17,9 +17,6 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <akfrac.h>
-#include <akcaps.h>
-
 #include "screendev.h"
 
 ScreenDev::ScreenDev(QObject *parent):
@@ -27,83 +24,4 @@ ScreenDev::ScreenDev(QObject *parent):
 {
 }
 
-AkFrac ScreenDev::fps() const
-{
-    return AkFrac();
-}
-
-QStringList ScreenDev::medias()
-{
-    return QStringList();
-}
-
-QString ScreenDev::media() const
-{
-    return QString();
-}
-
-QList<int> ScreenDev::streams() const
-{
-    return QList<int>();
-}
-
-int ScreenDev::defaultStream(const QString &mimeType)
-{
-    Q_UNUSED(mimeType)
-
-    return -1;
-}
-
-QString ScreenDev::description(const QString &media)
-{
-    Q_UNUSED(media)
-
-    return QString();
-}
-
-AkCaps ScreenDev::caps(int stream)
-{
-    Q_UNUSED(stream)
-
-    return AkCaps();
-}
-
-void ScreenDev::setFps(const AkFrac &fps)
-{
-    Q_UNUSED(fps)
-}
-
-void ScreenDev::resetFps()
-{
-}
-
-void ScreenDev::setMedia(const QString &media)
-{
-    Q_UNUSED(media)
-}
-
-void ScreenDev::resetMedia()
-{
-}
-
-void ScreenDev::setStreams(const QList<int> &streams)
-{
-    Q_UNUSED(streams)
-}
-
-void ScreenDev::resetStreams()
-{
-
-}
-
-bool ScreenDev::init()
-{
-    return false;
-}
-
-bool ScreenDev::uninit()
-{
-    return true;
-}
-
 #include "moc_screendev.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/DesktopCapture/src/screendev.h
+++ webcamoid-9.0.0/libAvKys/Plugins/DesktopCapture/src/screendev.h
@@ -20,11 +20,11 @@
 #ifndef SCREENDEV_H
 #define SCREENDEV_H
 
-#include <QObject>
+#include <akfrac.h>
+#include <akcaps.h>
+#include <akvideocaps.h>
 
 class DesktopCaptureElement;
-class AkFrac;
-class AkCaps;
 class AkPacket;
 
 class ScreenDev: public QObject
@@ -35,13 +35,13 @@ class ScreenDev: public QObject
         ScreenDev(QObject *parent=nullptr);
         virtual ~ScreenDev() = default;
 
-        Q_INVOKABLE virtual AkFrac fps() const;
-        Q_INVOKABLE virtual QStringList medias();
-        Q_INVOKABLE virtual QString media() const;
-        Q_INVOKABLE virtual QList<int> streams() const;
-        Q_INVOKABLE virtual int defaultStream(const QString &mimeType);
-        Q_INVOKABLE virtual QString description(const QString &media);
-        Q_INVOKABLE virtual AkCaps caps(int stream);
+        Q_INVOKABLE virtual AkFrac fps() const = 0;
+        Q_INVOKABLE virtual QStringList medias() = 0;
+        Q_INVOKABLE virtual QString media() const = 0;
+        Q_INVOKABLE virtual QList<int> streams() const = 0;
+        Q_INVOKABLE virtual int defaultStream(AkCaps::CapsType type) = 0;
+        Q_INVOKABLE virtual QString description(const QString &media) = 0;
+        Q_INVOKABLE virtual AkVideoCaps caps(int stream) = 0;
 
     signals:
         void mediasChanged(const QStringList &medias);
@@ -52,14 +52,14 @@ class ScreenDev: public QObject
         void oStream(const AkPacket &packet);
 
     public slots:
-        virtual void setFps(const AkFrac &fps);
-        virtual void resetFps();
-        virtual void setMedia(const QString &media);
-        virtual void resetMedia();
-        virtual void setStreams(const QList<int> &streams);
-        virtual void resetStreams();
-        virtual bool init();
-        virtual bool uninit();
+        virtual void setFps(const AkFrac &fps) = 0;
+        virtual void resetFps() = 0;
+        virtual void setMedia(const QString &media) = 0;
+        virtual void resetMedia() = 0;
+        virtual void setStreams(const QList<int> &streams) = 0;
+        virtual void resetStreams() = 0;
+        virtual bool init() = 0;
+        virtual bool uninit() = 0;
 
     friend class DesktopCaptureElement;
 };
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Dice/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Dice/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Dice
 target_compile_definitions(Dice PRIVATE AVKYS_PLUGIN_DICE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Dice avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Dice RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Dice/pspec.json
+++ webcamoid-9.0.0/libAvKys/Plugins/Dice/pspec.json
@@ -6,6 +6,7 @@
             "description": "Dice",
             "id": "VideoFilter/Dice",
             "implements": ["Element", "VideoFilter"],
+            "depends": ["VideoFilter/Rotate"],
             "type": "qtplugin"
         }
     ]
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Dice/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Dice/share/qml/main.qml
@@ -45,6 +45,7 @@ GridLayout {
         from: 1
         to: 256
         Layout.fillWidth: true
+        Accessible.name: lblDiceSize.text
 
         onValueChanged: Dice.diceSize = value
     }
@@ -55,6 +56,7 @@ GridLayout {
         to: sldDiceSize.to
         stepSize: sldDiceSize.stepSize
         editable: true
+        Accessible.name: lblDiceSize.text
 
         onValueChanged: Dice.diceSize = value
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Dice/src/dice.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Dice/src/dice.h
@@ -29,8 +29,8 @@ class Dice: public QObject, public AkPlu
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // DICE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Dice/src/diceelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Dice/src/diceelement.cpp
@@ -17,14 +17,17 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QDateTime>
-#include <QImage>
 #include <QMutex>
-#include <QPainter>
 #include <QQmlContext>
 #include <QRandomGenerator>
+#include <QSize>
 #include <QtMath>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akpluginmanager.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
+#include <akvideomixer.h>
 #include <akvideopacket.h>
 
 #include "diceelement.h"
@@ -32,15 +35,27 @@
 class DiceElementPrivate
 {
     public:
-        QMutex m_mutex;
-        QImage m_diceMap;
+        AkVideoPacket m_diceMap;
         QSize m_frameSize;
         int m_diceSize {24};
+        int m_currentDiceSize {0};
+        AkElementPtr m_rotate90 {akPluginManager->create<AkElement>("VideoFilter/Rotate")};
+        AkElementPtr m_rotate180 {akPluginManager->create<AkElement>("VideoFilter/Rotate")};
+        AkElementPtr m_rotate270 {akPluginManager->create<AkElement>("VideoFilter/Rotate")};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+        AkVideoMixer m_videoMixer;
+
+        void updateDiceMap(const QSize &frameSize, int diceSize);
 };
 
 DiceElement::DiceElement(): AkElement()
 {
     this->d = new DiceElementPrivate;
+    this->d->m_rotate90->setProperty("angle", 90);
+    this->d->m_rotate180->setProperty("angle", 180);
+    this->d->m_rotate270->setProperty("angle", 270);
+    this->d->m_videoMixer.setFlags(AkVideoMixer::MixerFlagLightweightCache
+                                   | AkVideoMixer::MixerFlagForceBlit);
 }
 
 DiceElement::~DiceElement()
@@ -71,60 +86,64 @@ void DiceElement::controlInterfaceConfig
 
 AkPacket DiceElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+    QSize frameSize(src.caps().width(), src.caps().height());
+
+    if (frameSize != this->d->m_frameSize
+        || this->d->m_diceSize != this->d->m_currentDiceSize) {
+        this->d->updateDiceMap(frameSize, this->d->m_diceSize);
+        this->d->m_frameSize = frameSize;
+        this->d->m_currentDiceSize = this->d->m_diceSize;
+    }
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame = src.copy();
+    this->d->m_videoMixer.begin(&dst);
 
-    static int diceSize = this->d->m_diceSize;
-
-    if (src.size() != this->d->m_frameSize
-        || this->d->m_diceSize != diceSize) {
-        diceSize = this->d->m_diceSize;
-        this->d->m_frameSize = src.size();
-        this->updateDiceMap();
-        emit this->frameSizeChanged(this->d->m_frameSize);
-    }
+    for (int y = 0; y < this->d->m_diceMap.caps().height(); y++) {
+        auto diceLine = this->d->m_diceMap.constLine(0, y);
 
-    QTransform rotateLeft;
-    QTransform rotateRight;
-    QTransform rotate180;
-
-    rotateLeft.rotate(90);
-    rotateRight.rotate(-90);
-    rotate180.rotate(180);
-
-    QPainter painter;
-    painter.begin(&oFrame);
-
-    for (int y = 0; y < this->d->m_diceMap.height(); y++) {
-        auto diceLine = reinterpret_cast<const quint8 *>(this->d->m_diceMap.constScanLine(y));
-
-        for (int x = 0; x < this->d->m_diceMap.width(); x++) {
-            int xp = this->d->m_diceSize * x;
-            int yp = this->d->m_diceSize * y;
-            QImage dice = src.copy(xp, yp,
-                                   this->d->m_diceSize, this->d->m_diceSize);
-            quint8 direction = diceLine[x];
-
-            if (direction == 0)
-                dice = dice.transformed(rotateLeft);
-            else if (direction == 1)
-                dice = dice.transformed(rotateRight);
-            else if (direction == 2)
-                dice = dice.transformed(rotate180);
+        for (int x = 0; x < this->d->m_diceMap.caps().width(); x++) {
+            int xp = this->d->m_currentDiceSize * x;
+            int yp = this->d->m_currentDiceSize * y;
+            auto dice = src.copy(xp,
+                                 yp,
+                                 this->d->m_currentDiceSize,
+                                 this->d->m_currentDiceSize);
+
+            switch (diceLine[x]) {
+            case 0:
+                dice = this->d->m_rotate90->iStream(dice);
+
+                break;
+            case 1:
+                dice = this->d->m_rotate180->iStream(dice);
+
+                break;
+            case 2:
+                dice = this->d->m_rotate270->iStream(dice);
+
+                break;
+            default:
+                break;
+            }
 
-            painter.drawImage(xp, yp, dice);
+            this->d->m_videoMixer.draw(xp, yp, dice);
         }
     }
 
-    painter.end();
+    this->d->m_videoMixer.end();
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void DiceElement::setDiceSize(int diceSize)
@@ -141,20 +160,23 @@ void DiceElement::resetDiceSize()
     this->setDiceSize(24);
 }
 
-void DiceElement::updateDiceMap()
+void DiceElementPrivate::updateDiceMap(const QSize &frameSize, int diceSize)
 {
-    int width = qCeil(this->d->m_frameSize.width() / qreal(this->d->m_diceSize));
-    int height = qCeil(this->d->m_frameSize.height() / qreal(this->d->m_diceSize));
-    QImage diceMap(width, height, QImage::Format_Grayscale8);
+    qreal diceSize_ = qMax(1, diceSize);
+
+    int width = qCeil(frameSize.width() / diceSize_);
+    int height = qCeil(frameSize.height() / diceSize_);
+
+    AkVideoPacket diceMap({AkVideoCaps::Format_gray8, width, height, {}});
 
-    for (int y = 0; y < diceMap.height(); y++) {
-        auto oLine = reinterpret_cast<quint8 *>(diceMap.scanLine(y));
+    for (int y = 0; y < diceMap.caps().height(); y++) {
+        auto oLine = diceMap.line(0, y);
 
-        for (int x = 0; x < diceMap.width(); x++)
+        for (int x = 0; x < diceMap.caps().width(); x++)
             oLine[x] = quint8(QRandomGenerator::global()->bounded(4));
     }
 
-    this->d->m_diceMap = diceMap;
+    this->m_diceMap = diceMap;
 }
 
 #include "moc_diceelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Dice/src/diceelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Dice/src/diceelement.h
@@ -43,21 +43,17 @@ class DiceElement: public AkElement
         DiceElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void diceSizeChanged(int diceSize);
-        void frameSizeChanged(const QSize &frameSize);
 
     public slots:
         void setDiceSize(int diceSize);
         void resetDiceSize();
-
-    private slots:
-        void updateDiceMap();
 };
 
 #endif // DICEELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Distort/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Distort/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Distort
 target_compile_definitions(Distort PRIVATE AVKYS_PLUGIN_DISTORT)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Distort avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Distort RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Distort/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Distort/share/qml/main.qml
@@ -26,6 +26,7 @@ GridLayout {
 
     // Configure amplitude.
     Label {
+        id: txtAmplitude
         text: qsTr("Amplitude")
     }
     TextField {
@@ -36,12 +37,14 @@ GridLayout {
             regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
         }
         Layout.fillWidth: true
+        Accessible.name: txtAmplitude.text
 
         onTextChanged: Distort.amplitude = Number(text)
     }
 
     // Configure frequency.
     Label {
+        id: txtFrequency
         text: qsTr("Frequency")
     }
     TextField {
@@ -52,12 +55,14 @@ GridLayout {
             regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
         }
         Layout.fillWidth: true
+        Accessible.name: txtFrequency.text
 
         onTextChanged: Distort.frequency = Number(text)
     }
 
     // Configure grid size.
     Label {
+        id: txtGridSize
         text: qsTr("Grid size")
     }
     TextField {
@@ -68,6 +73,7 @@ GridLayout {
             regExp: /\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtGridSize.text
 
         onTextChanged: Distort.gridSizeLog = Number(text)
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Distort/src/distort.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Distort/src/distort.h
@@ -29,8 +29,8 @@ class Distort: public QObject, public Ak
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // DISTORT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Distort/src/distortelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Distort/src/distortelement.cpp
@@ -17,13 +17,17 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QVector>
 #include <QPoint>
-#include <QImage>
 #include <QQmlContext>
+#include <QSize>
+#include <QTime>
+#include <QVector>
 #include <QtMath>
+#include <qrgb.h>
 #include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "distortelement.h"
@@ -34,6 +38,7 @@ class DistortElementPrivate
         qreal m_amplitude {1.0};
         qreal m_frequency {1.0};
         int m_gridSizeLog {1};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 
         QPoint plasmaFunction(const QPoint &point, const QSize &size,
                               qreal amp, qreal freq, qreal t);
@@ -67,7 +72,7 @@ int DistortElement::gridSizeLog() const
 }
 
 // this will compute a displacement value such that
-// 0<=x_retval<xsize and 0<=y_retval<ysize.
+// 0 <= x_retval < xsize and 0 <= y_retval < ysize.
 QPoint DistortElementPrivate::plasmaFunction(const QPoint &point,
                                              const QSize &size,
                                              qreal amp,
@@ -123,52 +128,54 @@ void DistortElement::controlInterfaceCon
 
 AkPacket DistortElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame = QImage(src.size(), src.format());
+    if (!src)
+        return {};
 
-    const QRgb *srcBits = reinterpret_cast<const QRgb *>(src.constBits());
-    QRgb *destBits = reinterpret_cast<QRgb *>(oFrame.bits());
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
 
     int gridSizeLog = this->d->m_gridSizeLog > 0? this->d->m_gridSizeLog: 1;
     int gridSize = 1 << gridSizeLog;
-    qreal time = packet.pts() * packet.timeBase().value();
-    auto grid = this->d->createGrid(src.width(), src.height(), gridSize, time);
 
-    int gridX = src.width() / gridSize;
-    int gridY = src.height() / gridSize;
+#if 0
+    qreal time = packet.pts() * packet.timeBase().value();
+#else
+    auto time = QTime::currentTime().msecsSinceStartOfDay() / 1e3;
+#endif
+
+    auto grid = this->d->createGrid(src.caps().width(),
+                                    src.caps().height(),
+                                    gridSize,
+                                    time);
+
+    int gridX = src.caps().width() / gridSize;
+    int gridY = src.caps().height() / gridSize;
+
+    for (int y = 0; y < gridY; y++) {
+        auto gridLine = grid.constData() + y * (gridX + 1);
+        auto destLine = reinterpret_cast<QRgb *>(dst.line(0, y << gridSizeLog));
 
-    for (int y = 0; y < gridY; y++)
         for (int x = 0; x < gridX; x++) {
-            int offset = x + y * (gridX + 1);
-
-            QPoint upperLeft  = grid[offset];
-            QPoint lowerLeft  = grid[offset + gridX + 1];
-            QPoint upperRight = grid[offset + 1];
-            QPoint lowerRight = grid[offset + gridX + 2];
+            auto upperLeft  = gridLine[x];
+            auto lowerLeft  = gridLine[x + gridX + 1];
+            auto upperRight = gridLine[x + 1];
+            auto lowerRight = gridLine[x + gridX + 2];
 
             int startColXX = upperLeft.x();
             int startColYY = upperLeft.y();
             int endColXX = upperRight.x();
             int endColYY = upperRight.y();
 
-            int stepStartColX = (lowerLeft.x() - upperLeft.x())
-                                >> gridSizeLog;
+            int stepStartColX = (lowerLeft.x() - upperLeft.x()) >> gridSizeLog;
+            int stepStartColY = (lowerLeft.y() - upperLeft.y()) >> gridSizeLog;
+            int stepEndColX = (lowerRight.x() - upperRight.x()) >> gridSizeLog;
+            int stepEndColY = (lowerRight.y() - upperRight.y()) >> gridSizeLog;
 
-            int stepStartColY = (lowerLeft.y() - upperLeft.y())
-                                >> gridSizeLog;
-
-            int stepEndColX = (lowerRight.x() - upperRight.x())
-                              >> gridSizeLog;
-
-            int stepEndColY = (lowerRight.y() - upperRight.y())
-                              >> gridSizeLog;
-
-            int pos = (y << gridSizeLog) * src.width() + (x << gridSizeLog);
+            int xLog = x << gridSizeLog;
 
             for (int blockY = 0; blockY < gridSize; blockY++) {
                 int xLineIndex = startColXX;
@@ -178,13 +185,11 @@ AkPacket DistortElement::iVideoStream(co
                 int stepLineY = (endColYY - startColYY) >> gridSizeLog;
 
                 for (int i = 0, blockX = 0; blockX < gridSize; i++, blockX++) {
-                    int xx = qBound(0, xLineIndex, src.width() - 1);
-                    int yy = qBound(0, yLineIndex, src.height() - 1);
-
+                    int xx = qBound(0, xLineIndex, src.caps().width() - 1);
+                    int yy = qBound(0, yLineIndex, src.caps().height() - 1);
+                    destLine[xLog + i] = src.pixel<QRgb>(0, xx, yy);
                     xLineIndex += stepLineX;
                     yLineIndex += stepLineY;
-
-                    destBits[pos + i] = srcBits[xx + yy * src.width()];
                 }
 
                 startColXX += stepStartColX;
@@ -192,12 +197,15 @@ AkPacket DistortElement::iVideoStream(co
                 startColYY += stepStartColY;
                 endColYY   += stepEndColY;
 
-                pos += src.width() - gridSize + gridSize;
+                xLog += src.caps().width();
             }
         }
+    }
+
+    if (dst)
+        emit this->oStream(dst);
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    return dst;
 }
 
 void DistortElement::setAmplitude(qreal amplitude)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Distort/src/distortelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Distort/src/distortelement.h
@@ -55,10 +55,10 @@ class DistortElement: public AkElement
         DistortElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void amplitudeChanged(qreal amplitude);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Dizzy/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Dizzy/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Dizzy
 target_compile_definitions(Dizzy PRIVATE AVKYS_PLUGIN_DIZZY)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Dizzy avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Dizzy RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Dizzy/pspec.json
+++ webcamoid-9.0.0/libAvKys/Plugins/Dizzy/pspec.json
@@ -6,6 +6,10 @@
             "description": "Stoned",
             "id": "VideoFilter/Dizzy",
             "implements": ["Element", "VideoFilter"],
+            "depends": [
+                "VideoFilter/MatrixTransform",
+                "VideoFilter/Opacity"
+            ],
             "type": "qtplugin"
         }
     ]
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Dizzy/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Dizzy/share/qml/main.qml
@@ -30,19 +30,19 @@ GridLayout {
         function onSpeedChanged(speed)
         {
             sldSpeed.value = speed
-            spbSpeed.value = spbSpeed.multiplier * speed
+            spbSpeed.value = speed * spbSpeed.multiplier
         }
 
         function onZoomRateChanged(zoomRate)
         {
             sldZoomRate.value = zoomRate
-            spbZoomRate.value = spbZoomRate.multiplier * zoomRate
+            spbZoomRate.value = zoomRate * spbZoomRate.multiplier
         }
 
         function onStrengthChanged(strength)
         {
             sldStrength.value = strength
-            spbStrength.value = spbStrength.multiplier * strength
+            spbStrength.value = strength * spbStrength.multiplier
         }
     }
 
@@ -57,6 +57,7 @@ GridLayout {
         from: 0.01
         to: 60
         Layout.fillWidth: true
+        Accessible.name: lblSpeed.text
 
         onValueChanged: Dizzy.speed = value
     }
@@ -67,6 +68,7 @@ GridLayout {
         to: multiplier * sldSpeed.to
         stepSize: multiplier * sldSpeed.stepSize
         editable: true
+        Accessible.name: lblSpeed.text
 
         readonly property int decimals: 2
         readonly property int multiplier: Math.pow(10, decimals)
@@ -94,6 +96,7 @@ GridLayout {
         stepSize: 0.001
         to: 0.25
         Layout.fillWidth: true
+        Accessible.name: lblZoomRate.text
 
         onValueChanged: Dizzy.zoomRate = value
     }
@@ -103,6 +106,7 @@ GridLayout {
         to: multiplier * sldZoomRate.to
         stepSize: multiplier * sldZoomRate.stepSize
         editable: true
+        Accessible.name: lblZoomRate.text
 
         readonly property int decimals: 3
         readonly property int multiplier: Math.pow(10, decimals)
@@ -130,6 +134,7 @@ GridLayout {
         stepSize: 0.01
         to: 1
         Layout.fillWidth: true
+        Accessible.name: lblStrength.text
 
         onValueChanged: Dizzy.strength = value
     }
@@ -139,6 +144,7 @@ GridLayout {
         to: multiplier * sldStrength.to
         stepSize: multiplier * sldStrength.stepSize
         editable: true
+        Accessible.name: lblStrength.text
 
         readonly property int decimals: 2
         readonly property int multiplier: Math.pow(10, decimals)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Dizzy/src/dizzy.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Dizzy/src/dizzy.h
@@ -29,8 +29,8 @@ class Dizzy: public QObject, public AkPl
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // DIZZY_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Dizzy/src/dizzyelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Dizzy/src/dizzyelement.cpp
@@ -17,11 +17,15 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QtMath>
-#include <QPainter>
 #include <QQmlContext>
+#include <QRect>
+#include <QtMath>
 #include <akfrac.h>
 #include <akpacket.h>
+#include <akpluginmanager.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
+#include <akvideomixer.h>
 #include <akvideopacket.h>
 
 #include "dizzyelement.h"
@@ -32,12 +36,11 @@ class DizzyElementPrivate
         qreal m_speed {5.0};
         qreal m_zoomRate {0.02};
         qreal m_strength {0.75};
-        QImage m_prevFrame;
-
-        void setParams(int *dx, int *dy,
-                       int *sx, int *sy,
-                       int width, int height,
-                       qreal phase, qreal zoomRate);
+        AkVideoPacket m_prevFrame;
+        AkElementPtr m_transform {akPluginManager->create<AkElement>("VideoFilter/MatrixTransform")};
+        AkElementPtr m_opacity {akPluginManager->create<AkElement>("VideoFilter/Opacity")};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+        AkVideoMixer m_videoMixer;
 };
 
 DizzyElement::DizzyElement():
@@ -84,45 +87,55 @@ void DizzyElement::controlInterfaceConfi
 
 AkPacket DizzyElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull())
-        return AkPacket();
+    if (!src)
+        return {};
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
-    oFrame.fill(0);
+    AkVideoPacket dst(src.caps(), true);
+    dst.copyMetadata(src);
 
-    if (this->d->m_prevFrame.isNull()) {
-        this->d->m_prevFrame = QImage(src.size(), src.format());
-        this->d->m_prevFrame.fill(0);
-    }
+    if (!this->d->m_prevFrame)
+        this->d->m_prevFrame = AkVideoPacket(src.caps(), true);
 
-    qreal pts = 2 * M_PI * packet.pts() * packet.timeBase().value()
+    qreal pts = 2.0 * M_PI * packet.pts() * packet.timeBase().value()
                 / this->d->m_speed;
-
-    qreal angle = (2 * M_PI / 180) * sin(pts) + (M_PI / 180) * sin(pts + 2.5);
+    qreal angle = (2.0 * qSin(pts) + qSin(pts + 2.5)) * M_PI / 180.0;
     qreal scale = 1.0 + this->d->m_zoomRate;
+    QVariantList kernel {
+        scale * qCos(angle), -scale * qSin(angle), 0,
+        scale * qSin(angle),  scale * qCos(angle), 0,
+    };
+    this->d->m_transform->setProperty("kernel", kernel);
+    AkVideoPacket transformedFrame =
+            this->d->m_transform->iStream(this->d->m_prevFrame);
+
+    auto opacity = qBound(0.0, 1.0 - this->d->m_strength, 1.0);;
+    this->d->m_opacity->setProperty("opacity", opacity);
+    auto topFrame = this->d->m_opacity->iStream(src);
+
+    QRect rect(0,
+               0,
+               transformedFrame.caps().width(),
+               transformedFrame.caps().height());
+    rect.moveCenter({dst.caps().width() >> 1,
+                     dst.caps().height() >> 1});
+
+    this->d->m_videoMixer.begin(&dst);
+    this->d->m_videoMixer.draw(rect.x(),
+                               rect.y(),
+                               transformedFrame);
+    this->d->m_videoMixer.draw(topFrame);
+    this->d->m_videoMixer.end();
 
-    QTransform transform;
-    transform.scale(scale, scale);
-    transform.rotateRadians(angle);
-    this->d->m_prevFrame = this->d->m_prevFrame.transformed(transform);
-
-    QRect rect(this->d->m_prevFrame.rect());
-    rect.moveCenter(oFrame.rect().center());
-
-    QPainter painter;
-    painter.begin(&oFrame);
-    painter.drawImage(rect, this->d->m_prevFrame);
-    painter.setOpacity(1.0 - this->d->m_strength);
-    painter.drawImage(0, 0, src);
-    painter.end();
+    this->d->m_prevFrame = dst;
 
-    this->d->m_prevFrame = oFrame;
+    if (dst)
+        emit this->oStream(dst);
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    return dst;
 }
 
 void DizzyElement::setSpeed(qreal speed)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Dizzy/src/dizzyelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Dizzy/src/dizzyelement.h
@@ -55,10 +55,10 @@ class DizzyElement: public AkElement
         DizzyElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void speedChanged(qreal speed);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Edge/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Edge/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Edge
 target_compile_definitions(Edge PRIVATE AVKYS_PLUGIN_EDGE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Edge avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Edge RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Edge/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Edge/share/qml/main.qml
@@ -42,6 +42,7 @@ GridLayout {
 
     // Canny
     Label {
+        id: txtCannyMode
         //: https://en.wikipedia.org/wiki/Canny_edge_detector
         text: qsTr("Canny mode")
     }
@@ -52,6 +53,7 @@ GridLayout {
         Switch {
             id: chkCanny
             checked: Edge.canny
+            Accessible.name: txtCannyMode.text
 
             onCheckedChanged: Edge.canny = checked
         }
@@ -59,6 +61,7 @@ GridLayout {
 
     // Threshold
     Label {
+        id: txtCannyThreshold
         text: qsTr("Canny threshold")
         enabled: chkCanny.checked
     }
@@ -70,8 +73,9 @@ GridLayout {
             stepSize: sldThreshold.stepSize
             enabled: chkCanny.checked
             editable: true
+            Accessible.name: qsTr("Canny threshold low")
 
-            onValueChanged: Edge.thLow = value
+            onValueChanged: Edge.thLow = Number(value)
         }
         RangeSlider {
             id: sldThreshold
@@ -81,6 +85,7 @@ GridLayout {
             to: 1530
             enabled: chkCanny.checked
             Layout.fillWidth: true
+            Accessible.name: txtCannyThreshold.text
 
             first.onValueChanged: Edge.thLow = first.value
             second.onValueChanged: Edge.thHi = second.value
@@ -92,6 +97,7 @@ GridLayout {
             stepSize: sldThreshold.stepSize
             enabled: chkCanny.checked
             editable: true
+            Accessible.name: qsTr("Canny threshold hi")
 
             onValueChanged: Edge.thHi = Number(value)
         }
@@ -99,6 +105,7 @@ GridLayout {
 
     // Equalize
     Label {
+        id: txtEqualize
         //: https://en.wikipedia.org/wiki/Histogram_equalization
         text: qsTr("Equalize")
     }
@@ -108,6 +115,7 @@ GridLayout {
         }
         Switch {
             checked: Edge.equalize
+            Accessible.name: txtEqualize.text
 
             onCheckedChanged: Edge.equalize = checked
         }
@@ -115,6 +123,7 @@ GridLayout {
 
     // Invert
     Label {
+        id: txtInvert
         text: qsTr("Invert")
     }
     RowLayout {
@@ -123,6 +132,7 @@ GridLayout {
         }
         Switch {
             checked: Edge.invert
+            Accessible.name: txtInvert.text
 
             onCheckedChanged: Edge.invert = checked
         }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Edge/src/edge.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Edge/src/edge.h
@@ -29,8 +29,8 @@ class Edge: public QObject, public AkPlu
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // EDGE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Edge/src/edgeelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Edge/src/edgeelement.cpp
@@ -17,11 +17,13 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
 #include <QVector>
 #include <QtMath>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "edgeelement.h"
@@ -34,29 +36,21 @@ class EdgeElementPrivate
         bool m_canny {false};
         bool m_equalize {false};
         bool m_invert {false};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_graya8pack, 0, 0, {}}};
 
-        QVector<quint8> equalize(const QImage &image);
-        void sobel(int width,
-                   int height,
-                   const QVector<quint8> &gray,
-                   QVector<quint16> &gradient,
-                   QVector<quint8> &direction) const;
-        QVector<quint16> thinning(int width, int height,
-                                  const QVector<quint16> &gradient,
-                                  const QVector<quint8> &direction) const;
-        QVector<quint8> threshold(int width,
-                                  int height,
-                                  const QVector<quint16> &image,
-                                  const QVector<int> &thresholds,
-                                  const QVector<int> &map) const;
-        void trace(int width,
-                   int height,
-                   QVector<quint8> &canny,
+        AkVideoPacket equalize(const AkVideoPacket &src);
+        void sobel(const AkVideoPacket &gray,
+                   AkVideoPacket &gradient,
+                   AkVideoPacket &direction) const;
+        AkVideoPacket thinning(const AkVideoPacket &gradient,
+                               const AkVideoPacket &direction) const;
+        AkVideoPacket threshold(const AkVideoPacket &thinned,
+                                const QVector<int> &thresholds,
+                                const QVector<int> &map) const;
+        void trace(AkVideoPacket &canny,
                    int x,
                    int y) const;
-        QVector<quint8> hysteresisThresholding(int width,
-                                               int height,
-                                               const QVector<quint8> &thresholded) const;
+        AkVideoPacket hysteresisThresholding(const AkVideoPacket &thresholded) const;
 };
 
 EdgeElement::EdgeElement(): AkElement()
@@ -112,67 +106,65 @@ void EdgeElement::controlInterfaceConfig
 
 AkPacket EdgeElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_Grayscale8);
-    QImage oFrame(src.size(), src.format());
-    QVector<quint8> in;
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+    AkVideoPacket src_;
 
     if (this->d->m_equalize)
-        in = this->d->equalize(src);
-    else {
-        int videoArea = src.width() * src.height();
-        in.resize(videoArea);
-        memcpy(in.data(), src.constBits(), size_t(videoArea));
-    }
-
-    QVector<quint16> gradient;
-    QVector<quint8> direction;
-    this->d->sobel(src.width(), src.height(), in, gradient, direction);
+        src_ = this->d->equalize(src);
+    else
+        src_ = src;
+
+    AkVideoPacket gradient;
+    AkVideoPacket direction;
+    this->d->sobel(src_, gradient, direction);
+    auto invert = this->d->m_invert;
 
     if (this->d->m_canny) {
-        auto thinned = this->d->thinning(src.width(),
-                                         src.height(),
-                                         gradient,
-                                         direction);
+        auto thinned = this->d->thinning(gradient, direction);
         QVector<int> thresholds {this->d->m_thLow, this->d->m_thHi};
         QVector<int> colors {0, 127, 255};
-        auto thresholded = this->d->threshold(src.width(),
-                                              src.height(),
-                                              thinned,
-                                              thresholds,
-                                              colors);
-        auto canny = this->d->hysteresisThresholding(src.width(),
-                                                     src.height(),
-                                                     thresholded);
-
-        for (int y = 0; y < src.height(); y++) {
-            auto srcLine = canny.constData() + y * src.width();
-            auto dstLine = oFrame.scanLine(y);
+        auto thresholded = this->d->threshold(thinned, thresholds, colors);
+        auto canny = this->d->hysteresisThresholding(thresholded);
 
-            for (int x = 0; x < src.width(); x++)
-                dstLine[x] = this->d->m_invert? 255 - srcLine[x]: srcLine[x];
+        for (int y = 0; y < src.caps().height(); y++) {
+            auto cannyLine = canny.constLine(0, y);
+            auto srcLine = reinterpret_cast<const quint16 *>(src_.constLine(0, y));
+            auto dstLine = reinterpret_cast<quint16 *>(dst.line(0, y));
+
+            for (int x = 0; x < src.caps().width(); x++) {
+                auto &pixel = cannyLine[x];
+                quint16 y = invert? 255 - pixel: pixel;
+                quint16 a = srcLine[x] & 0xff;
+                dstLine[x] = y << 8 | a;
+            }
         }
-    } else
-        for (int y = 0; y < src.height(); y++) {
-            auto srcLine = gradient.constData() + y * src.width();
-            auto dstLine = oFrame.scanLine(y);
-
-            for (int x = 0; x < src.width(); x++) {
-                int gray = qBound<int>(0, srcLine[x], 255);
-                dstLine[x] = this->d->m_invert? quint8(255 - gray): quint8(gray);
+    } else {
+        for (int y = 0; y < src.caps().height(); y++) {
+            auto gradientLine = reinterpret_cast<const quint16 *>(gradient.constLine(0, y));
+            auto srcLine = reinterpret_cast<const quint16 *>(src_.constLine(0, y));
+            auto dstLine = reinterpret_cast<quint16 *>(dst.line(0, y));
+
+            for (int x = 0; x < src.caps().width(); x++) {
+                auto pixel = quint8(qBound<int>(0, gradientLine[x], 255));
+                quint16 y = invert? 255 - pixel: pixel;
+                quint16 a = srcLine[x] & 0xff;
+                dstLine[x] = y << 8 | a;
             }
         }
+    }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-
-    if (oPacket)
-        emit this->oStream(oPacket);
+    if (dst)
+        emit this->oStream(dst);
 
-    return oPacket;
+    return dst;
 }
 
 void EdgeElement::setCanny(bool canny)
@@ -245,71 +237,103 @@ void EdgeElement::resetInvert()
     this->setInvert(false);
 }
 
-QVector<quint8> EdgeElementPrivate::equalize(const QImage &image)
+AkVideoPacket EdgeElementPrivate::equalize(const AkVideoPacket &src)
 {
-    int videoArea = image.width() * image.height();
-    const quint8 *imgPtr = image.constBits();
-    QVector<quint8> out(videoArea);
-    quint8 *outPtr = out.data();
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
     int minGray = 255;
     int maxGray = 0;
 
-    for (int i = 0; i < videoArea; i++) {
-        if (imgPtr[i] < minGray)
-            minGray = imgPtr[i];
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto line = reinterpret_cast<const quint16 *>(src.constLine(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto gray = line[x] >> 8;
 
-        if (imgPtr[i] > maxGray)
-            maxGray = imgPtr[i];
+            if (gray < minGray)
+                minGray = gray;
+
+            if (gray > maxGray)
+                maxGray = gray;
+        }
     }
 
-    if (maxGray == minGray)
-        memset(outPtr, minGray, size_t(videoArea));
-    else {
+    if (maxGray == minGray) {
+        for (int y = 0; y < src.caps().height(); y++) {
+            auto srcLine = reinterpret_cast<const quint16 *>(src.constLine(0, y));
+            auto dstLine = reinterpret_cast<quint16 *>(dst.line(0, y));
+
+            for (int x = 0; x < src.caps().width(); x++)
+                dstLine[x] = minGray << 8 | srcLine[x] & 0xff;
+        }
+    } else {
         int diffGray = maxGray - minGray;
+        quint8 colorTable[256];
 
-        for (int i = 0; i < videoArea; i++)
-            outPtr[i] = quint8(255 * (imgPtr[i] - minGray) / diffGray);
+        for (int i = 0; i < 256; i++)
+            colorTable[i] = quint8(255 * (i - minGray) / diffGray);
+
+        for (int y = 0; y < src.caps().height(); y++) {
+            auto srcLine = reinterpret_cast<const quint16 *>(src.constLine(0, y));
+            auto dstLine = reinterpret_cast<quint16 *>(dst.line(0, y));
+
+            for (int x = 0; x < src.caps().width(); x++) {
+                auto &pixel = srcLine[x];
+                auto y = pixel >> 8;
+                auto a = pixel & 0xff;
+                dstLine[x] = colorTable[y] << 8 | a;
+            }
+        }
     }
 
-    return out;
+    return dst;
 }
 
-void EdgeElementPrivate::sobel(int width,
-                               int height,
-                               const QVector<quint8> &gray,
-                               QVector<quint16> &gradient,
-                               QVector<quint8> &direction) const
-{
-    gradient.resize(gray.size());
-    direction.resize(gray.size());
-
-    for (int y = 0; y < height; y++) {
-        int yOffset = y * width;
-        const quint8 *grayLine = gray.constData() + yOffset;
-
-        const quint8 *grayLine_m1 = y < 1? grayLine: grayLine - width;
-        const quint8 *grayLine_p1 = y >= height - 1? grayLine: grayLine + width;
-
-        quint16 *gradientLine = gradient.data() + yOffset;
-        quint8 *directionLine = direction.data() + yOffset;
-
-        for (int x = 0; x < width; x++) {
-            int x_m1 = x < 1? x: x - 1;
-            int x_p1 = x >= width - 1? x: x + 1;
-
-            int gradX = grayLine_m1[x_p1]
-                      + 2 * grayLine[x_p1]
-                      + grayLine_p1[x_p1]
-                      - grayLine_m1[x_m1]
-                      - 2 * grayLine[x_m1]
-                      - grayLine_p1[x_m1];
-
-            int gradY = grayLine_m1[x_m1]
-                      + 2 * grayLine_m1[x]
-                      + grayLine_m1[x_p1]
-                      - grayLine_p1[x_m1]
-                      - 2 * grayLine_p1[x]
-                      - grayLine_p1[x_p1];
+void EdgeElementPrivate::sobel(const AkVideoPacket &gray,
+                               AkVideoPacket &gradient,
+                               AkVideoPacket &direction) const
+{
+    auto caps = gray.caps();
+    caps.setFormat(AkVideoCaps::Format_gray16);
+    gradient = {caps};
+    gradient.copyMetadata(gray);
+    caps.setFormat(AkVideoCaps::Format_gray8);
+    direction = {caps};
+    direction.copyMetadata(gray);
+
+    auto width_1 = gray.caps().width() - 1;
+    auto height_1 = gray.caps().height() - 1;
+
+    for (int y = 0; y < gray.caps().height(); y++) {
+        auto grayLine = reinterpret_cast<const quint16 *>(gray.constLine(0, y));
+        auto grayLine_m1 = reinterpret_cast<const quint16 *>(gray.constLine(0, qMax(y - 1, 0)));
+        auto grayLine_p1 = reinterpret_cast<const quint16 *>(gray.constLine(0, qMin(y + 1, height_1)));
+
+        auto gradientLine  = reinterpret_cast<quint16 *>(gradient.line(0, y));
+        auto directionLine = direction.line(0, y);
+
+        for (int x = 0; x < gray.caps().width(); x++) {
+            int x_m1 = qMax(x - 1, 0);
+            int x_p1 = qMin(x + 1,  width_1);
+
+            int pixel_m1_p1 = grayLine_m1[x_p1] >> 8;
+            int pixel_p1_p1 = grayLine_p1[x_p1] >> 8;
+            int pixel_m1_m1 = grayLine_m1[x_m1] >> 8;
+            int pixel_p1_m1 = grayLine_p1[x_m1] >> 8;
+
+            int gradX = pixel_m1_p1
+                      + 2 * int(grayLine[x_p1] >> 8)
+                      + pixel_p1_p1
+                      - pixel_m1_m1
+                      - 2 * int(grayLine[x_m1] >> 8)
+                      - pixel_p1_m1;
+
+            int gradY = pixel_m1_m1
+                      + 2 * int(grayLine_m1[x] >> 8)
+                      + pixel_m1_p1
+                      - pixel_p1_m1
+                      - 2 * int(grayLine_p1[x] >> 8)
+                      - pixel_p1_p1;
 
             gradientLine[x] = quint16(qAbs(gradX) + qAbs(gradY));
 
@@ -359,26 +383,28 @@ void EdgeElementPrivate::sobel(int width
     }
 }
 
-QVector<quint16> EdgeElementPrivate::thinning(int width,
-                                              int height,
-                                               const QVector<quint16> &gradient,
-                                               const QVector<quint8> &direction) const
-{
-    QVector<quint16> thinned(gradient.size(), 0);
-
-    for (int y = 0; y < height; y++) {
-        int yOffset = y * width;
-        const quint16 *edgesLine = gradient.constData() + yOffset;
-        const quint16 *edgesLine_m1 = y < 1? edgesLine: edgesLine - width;
-        const quint16 *edgesLine_p1 = y >= height - 1? edgesLine: edgesLine + width;
-        const quint8 *edgesAngleLine = direction.constData() + yOffset;
-        quint16 *thinnedLine = thinned.data() + yOffset;
-
-        for (int x = 0; x < width; x++) {
-            int x_m1 = x < 1? 0: x - 1;
-            int x_p1 = x >= width - 1? x: x + 1;
+AkVideoPacket EdgeElementPrivate::thinning(const AkVideoPacket &gradient,
+                                           const AkVideoPacket &direction) const
+{
+    AkVideoPacket thinned(gradient.caps(), true);
+    thinned.copyMetadata(gradient);
+
+    auto width_1 = gradient.caps().width() - 1;
+    auto height_1 = gradient.caps().height() - 1;
+
+    for (int y = 0; y < gradient.caps().height(); y++) {
+        auto edgesLine = reinterpret_cast<const quint16 *>(gradient.constLine(0, y));
+        auto edgesLine_m1 = reinterpret_cast<const quint16 *>(gradient.constLine(0, qMax(y - 1, 0)));
+        auto edgesLine_p1 = reinterpret_cast<const quint16 *>(gradient.constLine(0, qMin(y + 1, height_1)));
+
+        auto edgesAngleLine = direction.constLine(0, y);
+        auto thinnedLine = reinterpret_cast<quint16 *>(thinned.line(0, y));
 
-            quint8 direction = edgesAngleLine[x];
+        for (int x = 0; x < gradient.caps().width(); x++) {
+            int x_m1 = qMax(x - 1, 0);
+            int x_p1 = qMin(x + 1,  width_1);
+
+            auto &direction = edgesAngleLine[x];
 
             if (direction == 0) {
                 /* x x x
@@ -419,69 +445,76 @@ QVector<quint16> EdgeElementPrivate::thi
     return thinned;
 }
 
-QVector<quint8> EdgeElementPrivate::threshold(int width,
-                                              int height,
-                                              const QVector<quint16> &image,
-                                              const QVector<int> &thresholds,
-                                              const QVector<int> &map) const
-{
-    int size = width * height;
-    const quint16 *in = image.constData();
-    QVector<quint8> out(size);
-
-    for (int i = 0; i < size; i++) {
-        int value = -1;
-
-        for (int j = 0; j < thresholds.size(); j++)
-            if (in[i] <= thresholds[j]) {
-                value = map[j];
+AkVideoPacket EdgeElementPrivate::threshold(const AkVideoPacket &thinned,
+                                            const QVector<int> &thresholds,
+                                            const QVector<int> &map) const
+{
+    auto caps = thinned.caps();
+    caps.setFormat(AkVideoCaps::Format_gray8);
+    AkVideoPacket out(caps);
+    out.copyMetadata(thinned);
+
+    for (int y = 0; y < thinned.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const quint16 *>(thinned.constLine(0, y));
+        auto dstLine = out.line(0, y);
+
+        for (int x = 0; x < thinned.caps().width(); x++) {
+            auto &pixel = srcLine[x];
+            int value = -1;
+
+            for (int j = 0; j < thresholds.size(); j++)
+                if (pixel <= thresholds[j]) {
+                    value = map[j];
 
-                break;
-            }
+                    break;
+                }
 
-        out[i] = quint8(value < 0? map[thresholds.size()]: value);
+            dstLine[x] = quint8(value < 0? map[thresholds.size()]: value);
+        }
     }
 
     return out;
 }
 
-QVector<quint8> EdgeElementPrivate::hysteresisThresholding(int width,
-                                                           int height,
-                                                           const QVector<quint8> &thresholded) const
-{
-    QVector<quint8> canny = thresholded;
-
-    for (int y = 0; y < height; y++)
-        for (int x = 0; x < width; x++)
-            this->trace(width, height, canny, x, y);
-
-    for (auto &c: canny)
-        if (c == 127)
-            c = 0;
+AkVideoPacket EdgeElementPrivate::hysteresisThresholding(const AkVideoPacket &thresholded) const
+{
+    auto canny = thresholded;
+
+    for (int y = 0; y < canny.caps().height(); y++)
+        for (int x = 0; x < canny.caps().width(); x++)
+            this->trace(canny, x, y);
+
+    for (int y = 0; y < canny.caps().height(); y++) {
+        auto line = canny.line(0, y);
+
+        for (int x = 0; x < canny.caps().width(); x++) {
+            auto &pixel = line[x];
+
+            if (pixel == 127)
+                pixel = 0;
+        }
+    }
 
     return canny;
 }
 
-void EdgeElementPrivate::trace(int width,
-                               int height,
-                               QVector<quint8> &canny,
-                               int x, int y) const
+void EdgeElementPrivate::trace(AkVideoPacket &canny, int x, int y) const
 {
-    int yOffset = y * width;
-    quint8 *cannyLine = canny.data() + yOffset;
+    auto cannyLine = canny.line(0, y);
 
     if (cannyLine[x] != 255)
         return;
 
+    auto lineSize = canny.lineSize(0);
     bool isPoint = true;
 
     for (int j = -1; j < 2; j++) {
         int nextY = y + j;
 
-        if (nextY < 0 || nextY >= height)
+        if (nextY < 0 || nextY >= canny.caps().height())
             continue;
 
-        quint8 *cannyLineNext = cannyLine + j * width;
+        auto cannyLineNext = cannyLine + j * lineSize;
 
         for (int i = -1; i < 2; i++) {
             int nextX = x + i;
@@ -489,15 +522,17 @@ void EdgeElementPrivate::trace(int width
             if (i == 0 && j == 0)
                 continue;
 
-            if (nextX < 0 || nextX >= width)
+            if (nextX < 0 || nextX >= canny.caps().width())
                 continue;
 
-            if (cannyLineNext[nextX] == 127) {
-                cannyLineNext[nextX] = 255;
-                this->trace(width, height, canny, nextX, nextY);
+            auto &pixel = cannyLineNext[nextX];
+
+            if (pixel == 127) {
+                pixel = 255;
+                this->trace(canny, nextX, nextY);
             }
 
-            if (cannyLineNext[nextX] > 0)
+            if (pixel > 0)
                 isPoint = false;
         }
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Edge/src/edgeelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Edge/src/edgeelement.h
@@ -67,10 +67,10 @@ class EdgeElement: public AkElement
         EdgeElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void cannyChanged(bool canny);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Emboss/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Emboss/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Emboss
 target_compile_definitions(Emboss PRIVATE AVKYS_PLUGIN_EMBOSS)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Emboss avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Emboss RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Emboss/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Emboss/share/qml/main.qml
@@ -26,6 +26,7 @@ GridLayout {
 
     // Configure amplitude.
     Label {
+        id: txtFactor
         text: qsTr("Factor")
     }
     TextField {
@@ -36,12 +37,14 @@ GridLayout {
             regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
         }
         Layout.fillWidth: true
+        Accessible.name: txtFactor.text
 
         onTextChanged: Emboss.factor = Number(text)
     }
 
     // Configure frequency.
     Label {
+        id: txtBias
         text: qsTr("Bias")
     }
     TextField {
@@ -52,6 +55,7 @@ GridLayout {
             regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
         }
         Layout.fillWidth: true
+        Accessible.name: txtBias.text
 
         onTextChanged: Emboss.bias = Number(text)
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Emboss/src/emboss.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Emboss/src/emboss.h
@@ -29,8 +29,8 @@ class Emboss: public QObject, public AkP
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // EMBOSS_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Emboss/src/embosselement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Emboss/src/embosselement.cpp
@@ -17,10 +17,12 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
 #include <QtMath>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "embosselement.h"
@@ -30,6 +32,7 @@ class EmbossElementPrivate
     public:
         qreal m_factor {1.0};
         qreal m_bias {128.0};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_graya8pack, 0, 0, {}}};
 };
 
 EmbossElement::EmbossElement(): AkElement()
@@ -70,53 +73,51 @@ void EmbossElement::controlInterfaceConf
 
 AkPacket EmbossElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_Grayscale8);
-    QImage oFrame(src.size(), src.format());
-
-    for (int y = 0; y < src.height(); y++) {
-        int y_m1 = y - 1;
-        int y_p1 = y + 1;
-
-        if (y_m1 < 0)
-            y_m1 = 0;
-
-        if (y_p1 >= src.height())
-            y_p1 = src.height() - 1;
-
-        const quint8 *srcLine_m1 = src.constScanLine(y_m1);
-        const quint8 *srcLine = src.constScanLine(y);
-        const quint8 *srcLine_p1 = src.constScanLine(y_p1);
-        quint8 *dstLine = oFrame.scanLine(y);
-
-        for (int x = 0; x < src.width(); x++) {
-            int x_m1 = x - 1;
-            int x_p1 = x + 1;
-
-            if (x_m1 < 0)
-                x_m1 = 0;
-
-            if (x_p1 >= src.width())
-                x_p1 = src.width() - 1;
-
-            int gray = srcLine_m1[x_m1] * 2
-                     + srcLine_m1[x]
-                     + srcLine[x_m1]
-                     - srcLine[x_p1]
-                     - srcLine_p1[x]
-                     - srcLine_p1[x_p1] * 2;
-
-            gray = qRound(this->d->m_factor * gray + this->d->m_bias);
-            dstLine[x] = quint8(qBound(0, gray, 255));
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    auto width_1 = src.caps().width() - 1;
+    auto height_1 = src.caps().height() - 1;
+
+    auto factor = this->d->m_factor;
+    auto bias = this->d->m_bias;
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const quint16 *>(src.constLine(0, y));
+        auto srcLine_m1 = reinterpret_cast<const quint16 *>(src.constLine(0, qMax(y - 1, 0)));
+        auto srcLine_p1 = reinterpret_cast<const quint16 *>(src.constLine(0, qMin(y + 1, height_1)));
+
+        auto dstLine  = reinterpret_cast<quint16 *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            int x_m1 = qMax(x - 1, 0);
+            int x_p1 = qMin(x + 1,  width_1);
+
+            int gray = 2 * (srcLine_m1[x_m1] >> 8)
+                     + (srcLine_m1[x] >> 8)
+                     + (srcLine[x_m1] >> 8)
+                     - (srcLine[x_p1] >> 8)
+                     - (srcLine_p1[x] >> 8)
+                     - (2 * srcLine_p1[x_p1] >> 8);
+
+            gray = qRound(factor * gray + bias);
+            quint16 y = quint8(qBound(0, gray, 255));
+            quint16 a = srcLine[x] & 0xff;
+            dstLine[x] = y << 8 | a;
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void EmbossElement::setFactor(qreal factor)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Emboss/src/embosselement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Emboss/src/embosselement.h
@@ -49,10 +49,10 @@ class EmbossElement: public AkElement
         EmbossElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void factorChanged(qreal factor);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Equalize/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Equalize/CMakeLists.txt
@@ -39,7 +39,6 @@ find_package(Qt${QT_VERSION_MAJOR} ${QT_
 add_library(Equalize SHARED
             src/equalize.h
             src/equalizeelement.h
-            src/pixelstructs.h
             src/equalize.cpp
             src/equalizeelement.cpp
             pspec.json)
@@ -58,7 +57,6 @@ target_include_directories(Equalize
 target_compile_definitions(Equalize PRIVATE AVKYS_PLUGIN_EQUALIZE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Equalize avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Equalize RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Equalize/src/equalize.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Equalize/src/equalize.h
@@ -29,8 +29,8 @@ class Equalize: public QObject, public A
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // EQUALIZE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Equalize/src/equalizeelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Equalize/src/equalizeelement.cpp
@@ -17,100 +17,140 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
-#include <QVector>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "equalizeelement.h"
-#include "pixelstructs.h"
+
+#if 0
+#define USE_FULLSWING
+#endif
+
+#ifdef USE_FULLSWING
+    #define MIN_Y 0
+    #define MAX_Y 255
+#else
+    #define MIN_Y 16
+    #define MAX_Y 235
+#endif
+
+using HistogramType = quint64;
+using HistogramSumType = qreal;
 
 class EqualizeElementPrivate
 {
     public:
-        static QVector<quint64> histogram(const QImage &img);
-        static QVector<quint64> cumulativeHistogram(const QVector<quint64> &histogram);
-        static QVector<quint8> equalizationTable(const QImage &img);
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_ayuvpack, 0, 0, {}}};
+
+        static void histogram(const AkVideoPacket &src, HistogramType *table);
+        static void cumulativeHistogram(const HistogramType *histogram,
+                                        HistogramSumType *cumHistogram);
+        static void equalizationTable(const AkVideoPacket &src, quint8 *table);
 };
 
 EqualizeElement::EqualizeElement():
     AkElement()
 {
+    this->d = new EqualizeElementPrivate;
+
+#ifdef USE_FULLSWING
+    this->d->m_videoConverter.setYuvColorSpaceType(AkVideoConverter::YuvColorSpaceType_FullSwing);
+#endif
 }
 
-AkPacket EqualizeElement::iVideoStream(const AkVideoPacket &packet)
+EqualizeElement::~EqualizeElement()
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
-    auto equTable = EqualizeElementPrivate::equalizationTable(src);
-
-    for (int y = 0; y < src.height(); y++) {
-        auto srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        auto dstLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++){
-            int r = equTable[qRed(srcLine[x])];
-            int g = equTable[qGreen(srcLine[x])];
-            int b = equTable[qBlue(srcLine[x])];
-            int a = equTable[qAlpha(srcLine[x])];
+    delete this->d;
+}
 
-            dstLine[x] = qRgba(r, g, b, a);
+AkPacket EqualizeElement::iVideoStream(const AkVideoPacket &packet)
+{
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    quint8 equTable[256];
+    EqualizeElementPrivate::equalizationTable(src, equTable);
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const AkYuv *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<AkYuv *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = srcLine[x];
+            auto y = qBound<int>(MIN_Y, akCompY(pixel), MAX_Y);
+            dstLine[x] = akYuv(equTable[y],
+                               akCompU(pixel),
+                               akCompV(pixel),
+                               akCompA(pixel));
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
-QVector<quint64> EqualizeElementPrivate::histogram(const QImage &img)
+void EqualizeElementPrivate::histogram(const AkVideoPacket &src,
+                                       HistogramType *table)
 {
-    QVector<quint64> histogram(256, 0);
+    memset(table, 0, 256 * sizeof(HistogramType));
 
-    for (int y = 0; y < img.height(); y++) {
-        auto srcLine = reinterpret_cast<const QRgb *>(img.constScanLine(y));
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const AkYuv *>(src.constLine(0, y));
 
-        for (int x = 0; x < img.width(); x++)
-            histogram[qGray(srcLine[x])]++;
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = srcLine[x];
+            auto y = qBound<int>(MIN_Y, akCompY(pixel), MAX_Y);
+            table[y]++;
+        }
     }
-
-    return histogram;
 }
 
-QVector<quint64> EqualizeElementPrivate::cumulativeHistogram(const QVector<quint64> &histogram)
+void EqualizeElementPrivate::cumulativeHistogram(const HistogramType *histogram,
+                                                 HistogramSumType *cumHistogram)
 {
-    QVector<quint64> cumulativeHistogram(histogram.size());
-    quint64 sum = 0;
+    HistogramSumType sum = 0;
 
-    for (int i = 0; i < histogram.size(); i++) {
+    for (int i = 0; i < 256; i++) {
         sum += histogram[i];
-        cumulativeHistogram[i] = sum;
+        cumHistogram[i] = sum;
     }
-
-    return cumulativeHistogram;
 }
 
-QVector<quint8> EqualizeElementPrivate::equalizationTable(const QImage &img)
+void EqualizeElementPrivate::equalizationTable(const AkVideoPacket &src,
+                                               quint8 *table)
 {
-    auto histogram = EqualizeElementPrivate::histogram(img);
-    auto cumHist = EqualizeElementPrivate::cumulativeHistogram(histogram);
-    QVector<quint8> equalizationTable(cumHist.size());
-    int maxLevel = cumHist.size() - 1;
-    quint64 q = cumHist[maxLevel] - cumHist[0];
-
-    for (int i = 0; i < cumHist.size(); i++)
-        if (cumHist[i] > cumHist[0])
-            equalizationTable[i] = quint8(qRound(qreal(maxLevel)
-                                                 * (cumHist[i] - cumHist[0])
-                                                 / q));
-        else
-            equalizationTable[i] = 0;
-
-    return equalizationTable;
+    HistogramType histogram[256];
+    EqualizeElementPrivate::histogram(src, histogram);
+    HistogramSumType cumHistogram[256];
+    EqualizeElementPrivate::cumulativeHistogram(histogram, cumHistogram);
+
+    auto &hMinY = cumHistogram[MIN_Y];
+    auto &hMaxY = cumHistogram[MAX_Y];
+
+    if (qFuzzyCompare(hMinY, hMaxY)) {
+        for (int i = 0; i < 256; i++)
+            table[i] = i;
+    } else {
+        auto yDiff = MAX_Y - MIN_Y;
+        auto q = hMaxY - hMinY;
+
+        for (int i = 0; i < 256; i++) {
+            auto value = qRound((yDiff * (cumHistogram[i] - hMinY) + q * MIN_Y) / q);
+            table[i] = quint8(qBound<int>(MIN_Y, value, MAX_Y));
+        }
+    }
 }
 
 #include "moc_equalizeelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Equalize/src/equalizeelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Equalize/src/equalizeelement.h
@@ -22,15 +22,21 @@
 
 #include <akelement.h>
 
+class EqualizeElementPrivate;
+
 class EqualizeElement: public AkElement
 {
     Q_OBJECT
 
     public:
         EqualizeElement();
+        ~EqualizeElement();
+
+    private:
+        EqualizeElementPrivate *d;
 
     protected:
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 };
 
 #endif // EQUALIZEELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Equalize/src/pixelstructs.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef PIXELSTRUCTS_H
-#define PIXELSTRUCTS_H
-
-#include <qglobal.h>
-
-template<typename T>
-struct Pixel
-{
-    T r;
-    T g;
-    T b;
-    T a;
-
-    inline Pixel(T red=0, T green=0, T blue=0, T alpha=0):
-        r(red), g(green), b(blue), a(alpha)
-    {
-    }
-
-    inline Pixel operator +(const Pixel &other)
-    {
-        return Pixel(this->r + other.r,
-                     this->g + other.g,
-                     this->b + other.b,
-                     this->a + other.a);
-    }
-
-    inline void clear()
-    {
-        this->r = 0;
-        this->g = 0;
-        this->b = 0;
-        this->a = 0;
-    }
-};
-
-// These are used as accumulators
-typedef Pixel<quint64> Integer64Pixel;
-typedef Pixel<quint32> IntegerPixel;
-typedef Pixel<quint16> ShortPixel;
-typedef Pixel<quint8> CharPixel;
-typedef IntegerPixel HistogramListItem;
-
-#endif // PIXELSTRUCTS_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FaceDetect/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/FaceDetect/CMakeLists.txt
@@ -71,7 +71,6 @@ target_include_directories(FaceDetect
 target_compile_definitions(FaceDetect PRIVATE AVKYS_PLUGIN_FACEDETECT)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(FaceDetect avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS FaceDetect RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FaceDetect/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/FaceDetect/share/qml/main.qml
@@ -23,6 +23,7 @@ import QtQuick.Layouts 1.3
 import Qt.labs.platform 1.1 as LABS
 import Ak 1.0
 import AkControls 1.0 as AK
+import FaceDetectElement 1.0
 
 GridLayout {
     columns: 2
@@ -87,8 +88,25 @@ GridLayout {
         return Qt.size(size[0], size[1])
     }
 
+    Connections {
+        target: FaceDetect
+
+        function onScale(scale)
+        {
+            sldScale.value = scale
+            spbScale.value = scale * spbScale.multiplier
+        }
+
+        function onRScaleChanged(rScale)
+        {
+            sldRScale.value = rScale
+            spbRScale.value = rScale * spbRScale.multiplier
+        }
+    }
+
     // Haar file.
     Label {
+        id: txtHaarFile
         //: https://en.wikipedia.org/wiki/Haar-like_feature
         text: qsTr("Haar file")
     }
@@ -97,6 +115,7 @@ GridLayout {
         textRole: "text"
         currentIndex: haarFileIndex(FaceDetect.haarFile)
         Layout.fillWidth: true
+        Accessible.description: txtHaarFile.text
 
         model: ListModel {
             ListElement {
@@ -194,6 +213,7 @@ GridLayout {
 
     // Scan block.
     Label {
+        id: txtScanBlock
         text: qsTr("Scan block")
     }
     TextField {
@@ -204,12 +224,14 @@ GridLayout {
             regExp: /\d+x\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtScanBlock.text
 
         onTextChanged: FaceDetect.scanSize = strToSize(text)
     }
 
     // Marker type.
     Label {
+        id: txtMarkerType
         text: qsTr("Marker type")
     }
     ComboBox {
@@ -217,35 +239,36 @@ GridLayout {
         textRole: "text"
         currentIndex: markerTypeIndex(FaceDetect.markerType)
         Layout.fillWidth: true
+        Accessible.description: txtMarkerType.text
 
         model: ListModel {
             ListElement {
                 text: qsTr("Rectangle")
-                markerType: "rectangle"
+                markerType: FaceDetectElement.MarkerTypeRectangle
             }
             ListElement {
                 text: qsTr("Ellipse")
-                markerType: "ellipse"
+                markerType: FaceDetectElement.MarkerTypeEllipse
             }
             ListElement {
                 text: qsTr("Image")
-                markerType: "image"
+                markerType: FaceDetectElement.MarkerTypeImage
             }
             ListElement {
                 text: qsTr("Pixelate")
-                markerType: "pixelate"
+                markerType: FaceDetectElement.MarkerTypePixelate
             }
             ListElement {
                 text: qsTr("Blur")
-                markerType: "blur"
+                markerType: FaceDetectElement.MarkerTypeBlur
             }
             ListElement {
                 text: qsTr("Blur Outer")
-                markerType: "blurouter"
+                markerType: FaceDetectElement.MarkerTypeBlurOuter
             }
             ListElement {
                 text: qsTr("Background Image")
-                markerType: "imageouter"
+                markerType: FaceDetectElement.MarkerTypeImageOuter
             }
         }
 
@@ -254,6 +277,7 @@ GridLayout {
 
     // Marker style.
     Label {
+        id: txtMarkerStyle
         text: qsTr("Marker style")
     }
     ComboBox {
@@ -261,6 +285,7 @@ GridLayout {
         textRole: "text"
         currentIndex: markerStyleIndex(FaceDetect.markerStyle)
         Layout.fillWidth: true
+        Accessible.description: txtMarkerStyle.text
 
         model: ListModel {
             ListElement {
@@ -290,6 +315,7 @@ GridLayout {
 
     // Marker color.
     Label {
+        id: txtMarkerColor
         text: qsTr("Marker color")
     }
     RowLayout {
@@ -300,6 +326,7 @@ GridLayout {
             currentColor: AkUtils.fromRgba(FaceDetect.markerColor)
             title: qsTr("Select marker color")
             showAlphaChannel: true
+            Accessible.description: txtMarkerColor.text
 
             onCurrentColorChanged: FaceDetect.markerColor = AkUtils.toRgba(currentColor)
         }
@@ -307,6 +334,7 @@ GridLayout {
 
     // Marker width.
     Label {
+        id: txtMarkerWidth
         text: qsTr("Marker width")
     }
     TextField {
@@ -317,18 +345,21 @@ GridLayout {
             regExp: /\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtMarkerWidth.text
 
         onTextChanged: FaceDetect.markerWidth = Number(text)
     }
 
     // Marker picture.
     Label {
+        id: txtMasks
         text: qsTr("Masks")
     }
     ComboBox {
         id: cbxMasks
         textRole: "text"
         Layout.fillWidth: true
+        Accessible.description: txtMasks.text
 
         model: ListModel {
             ListElement {
@@ -489,6 +520,7 @@ GridLayout {
     }
 
     Label {
+        id: txtMarkerPicture
         text: qsTr("Marker picture")
     }
     RowLayout {
@@ -506,6 +538,7 @@ GridLayout {
             placeholderText: qsTr("Replace face with this picture")
             selectByMouse: true
             Layout.fillWidth: true
+            Accessible.name: txtMarkerPicture.text
 
             onTextChanged: {
                 for (var i = 0; i < cbxMasks.model.count; i++) {
@@ -525,6 +558,7 @@ GridLayout {
         Button {
             text: qsTr("Search")
             icon.source: "image://icons/search"
+            Accessible.description: qsTr("Search the image to put into the detected rectangle")
 
             onClicked: fileDialog.open()
         }
@@ -532,12 +566,14 @@ GridLayout {
 
     // Background picture.
     Label {
-        text: qsTr("Backgrounds")
+        id: txtBackground
+        text: qsTr("Background")
     }
     ComboBox {
         id: cbxBackgrounds
         textRole: "text"
         Layout.fillWidth: true
+        Accessible.description: txtBackground.text
 
         model: ListModel {
             ListElement {
@@ -554,6 +590,7 @@ GridLayout {
     }
 
     Label {
+        id: txtBackgroundPicture
         text: qsTr("Background picture")
     }
     RowLayout {
@@ -571,6 +608,7 @@ GridLayout {
             placeholderText: qsTr("Replace background with this picture")
             selectByMouse: true
             Layout.fillWidth: true
+            Accessible.name: txtBackgroundPicture.text
 
             onTextChanged: {
                 for (var i = 0; i < cbxBackgrounds.model.count; i++) {
@@ -590,6 +628,7 @@ GridLayout {
         Button {
             text: qsTr("Search")
             icon.source: "image://icons/search"
+            Accessible.description: qsTr("Search the image to use as background")
 
             onClicked: fileDialogBGImage.open()
         }
@@ -597,6 +636,7 @@ GridLayout {
 
     // Pixel grid.
     Label {
+        id: txtPixelGridSize
         text: qsTr("Pixel grid size")
     }
     TextField {
@@ -607,12 +647,14 @@ GridLayout {
             regExp: /\d+x\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtPixelGridSize.text
 
         onTextChanged: FaceDetect.pixelGridSize = strToSize(text)
     }
 
     // Blur radius.
     Label {
+        id: txtBlurRadius
         text: qsTr("Blur radius")
     }
     TextField {
@@ -623,11 +665,13 @@ GridLayout {
             regExp: /\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtBlurRadius.text
 
         onTextChanged: FaceDetect.blurRadius = Number(text)
     }
 
     Label {
+        id: txtFaceAreaSettings
         text: qsTr("Face Area Settings")
     }
     RowLayout {
@@ -644,49 +688,51 @@ GridLayout {
 
     // Face area size scale.
     Label {
+        id: txtScale
         text: qsTr("Scale")
     }
     RowLayout {
         Slider {
             id: sldScale
             value: FaceDetect.scale
+            stepSize: 0.05
             from: 0.5
             to: 2
-            stepSize: 0.05
             Layout.fillWidth: true
+            Accessible.name: txtScale.text
 
             onValueChanged: FaceDetect.scale = value
         }
         SpinBox {
-            property int decimals: 2
-            property real factor: Math.pow(10,decimals);
             id: spbScale
-            value: FaceDetect.scale * factor
-            from: sldScale.from * factor
-            to: sldScale.to * factor
-            stepSize: sldScale.stepSize * factor
+            value: multiplier * FaceDetect.scale
+            from: multiplier * sldScale.from
+            to: multiplier * sldScale.to
+            stepSize: sldScale.stepSize * multiplier
             editable: true
+            Accessible.name: txtScale.text
+
+            property int decimals: 2
+            property real multiplier: Math.pow(10, decimals);
 
-            onValueChanged: FaceDetect.scale = Number(value*1.0/spbScale.factor)
             validator: DoubleValidator {
-                bottom: Math.min(spbScale.from, spbScale.to)*spbScale.factor
-                top:  Math.max(spbScale.from, spbScale.to)*spbScale.factor
+                bottom: Math.min(spbScale.from, spbScale.to)
+                top:  Math.max(spbScale.from, spbScale.to)
             }
             textFromValue: function(value, locale) {
-                var num = parseFloat(value*1.0/spbScale.factor).toFixed(spbScale.decimals);
-                return num
-                //return Number(value / 100).toLocaleString(locale, 'f', spinbox.decimals)
+                return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
             }
             valueFromText: function(text, locale) {
-                return parseFloat(text) * spbScale.factor
-                //return Number.fromLocaleString(locale, text) * spbScale.factor
+                return Number.fromLocaleString(locale, text) * multiplier
             }
+            onValueChanged: FaceDetect.scale = value / multiplier
         }
     }
 
     // Configure face area offsets.
     Label {
-        text: qsTr("H-Offset")
+        id: txtHorizontalOffset
+        text: qsTr("Horizontal Offset")
     }
     RowLayout {
         Slider {
@@ -696,6 +742,7 @@ GridLayout {
             to: 150
             stepSize: 1
             Layout.fillWidth: true
+            Accessible.name: txtHorizontalOffset.text
 
             onValueChanged: FaceDetect.hOffset = value
         }
@@ -706,13 +753,15 @@ GridLayout {
             to: sldHOffset.to
             stepSize: sldHOffset.stepSize
             editable: true
+            Accessible.name: txtHorizontalOffset.text
 
             onValueChanged: FaceDetect.hOffset = Number(value)
         }
     }
 
     Label {
-        text: qsTr("V-Offset")
+        id: txtVerticalOffset
+        text: qsTr("Vertical Offset")
     }
     RowLayout {
         Slider {
@@ -722,6 +771,7 @@ GridLayout {
             to: 150
             stepSize: 1
             Layout.fillWidth: true
+            Accessible.name: txtVerticalOffset.text
 
             onValueChanged: FaceDetect.vOffset = value
         }
@@ -732,6 +782,7 @@ GridLayout {
             to: sldVOffset.to
             stepSize: sldVOffset.stepSize
             editable: true
+            Accessible.name: txtVerticalOffset.text
 
             onValueChanged: FaceDetect.vOffset = Number(value)
         }
@@ -739,6 +790,7 @@ GridLayout {
 
     // Configure face area width/height.
     Label {
+        id: txtWidthAdjustPercent
         text: qsTr("Width Adjust %")
     }
     RowLayout {
@@ -749,6 +801,7 @@ GridLayout {
             to: 200
             stepSize: 1
             Layout.fillWidth: true
+            Accessible.name: txtWidthAdjustPercent.text
 
             onValueChanged: FaceDetect.wAdjust = value
         }
@@ -759,12 +812,14 @@ GridLayout {
             to: sldWAdjust.to
             stepSize: sldWAdjust.stepSize
             editable: true
+            Accessible.name: txtWidthAdjustPercent.text
 
             onValueChanged: FaceDetect.wAdjust = Number(value)
         }
     }
 
     Label {
+        id: txtHeightAdjustPercent
         text: qsTr("Height Adjust %")
     }
     RowLayout {
@@ -775,6 +830,7 @@ GridLayout {
             to: 200
             stepSize: 1
             Layout.fillWidth: true
+            Accessible.name: txtHeightAdjustPercent.text
 
             onValueChanged: FaceDetect.hAdjust = value
         }
@@ -785,6 +841,7 @@ GridLayout {
             to: sldHAdjust.to
             stepSize: sldHAdjust.stepSize
             editable: true
+            Accessible.name: txtHeightAdjustPercent.text
 
             onValueChanged: FaceDetect.hAdjust = Number(value)
         }
@@ -792,58 +849,63 @@ GridLayout {
 
     // Round face area overlay.
     Label {
+        id: txtRoundArea
         text: qsTr("Round Area")
     }
     Switch {
         id: chkSmotheEdges
         checked: FaceDetect.smootheEdges
+        Accessible.name: txtRoundArea.text
 
         onCheckedChanged: FaceDetect.smootheEdges = checked
     }
 
     // Edge smothing size scale.
     Label {
+        id: txtEdgeSmothingSizeScale
         text: qsTr("Scale")
     }
     RowLayout {
         Slider {
             id: sldRScale
             value: FaceDetect.rScale
+            stepSize: 0.05
             from: 0.5
             to: 2
-            stepSize: 0.05
             Layout.fillWidth: true
+            Accessible.name: txtEdgeSmothingSizeScale.text
 
             onValueChanged: FaceDetect.rScale = value
         }
         SpinBox {
-            property int decimals: 2
-            property real factor: Math.pow(10,decimals);
             id: spbRScale
-            value: FaceDetect.rScale * factor
-            from: sldRScale.from * factor
-            to: sldRScale.to * factor
-            stepSize: sldRScale.stepSize * factor
+            value: multiplier * FaceDetect.rScale
+            from: multiplier * sldRScale.from
+            to: multiplier * sldRScale.to
+            stepSize: multiplier * sldRScale.stepSize
             editable: true
+            Accessible.name: txtEdgeSmothingSizeScale.text
+
+            property int decimals: 2
+            property real multiplier: Math.pow(10, decimals);
 
-            onValueChanged: FaceDetect.rScale = Number(value*1.0/spbRScale.factor)
             validator: DoubleValidator {
-                bottom: Math.min(spbRScale.from, spbRScale.to)*spbRScale.factor
-                top:  Math.max(spbRScale.from, spbRScale.to)*spbRScale.factor
+                bottom: Math.min(spbRScale.from, spbRScale.to)
+                top:  Math.max(spbRScale.from, spbRScale.to)
             }
             textFromValue: function(value, locale) {
-                return parseFloat(value*1.0/spbRScale.factor).toFixed(decimals);
-                //return Number(value / 100).toLocaleString(locale, 'f', spinbox.decimals)
+                return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
             }
             valueFromText: function(text, locale) {
-                return parseFloat(text) * spbRScale.factor
-                //return Number.fromLocaleString(locale, text) * spbRScale.factor
+                return Number.fromLocaleString(locale, text) * multiplier
             }
+            onValueModified: FaceDetect.rScale = value / multiplier
         }
     }
 
     // Configure rounded face area width/height.
     Label {
+        id: txtRfWidthAdjustPercent
         text: qsTr("Width Adjust %")
     }
     RowLayout {
@@ -854,6 +916,7 @@ GridLayout {
             to: 200
             stepSize: 1
             Layout.fillWidth: true
+            Accessible.name: txtRfWidthAdjustPercent.text
 
             onValueChanged: FaceDetect.rWAdjust = value
         }
@@ -864,12 +927,14 @@ GridLayout {
             to: sldRWAdjust.to
             stepSize: sldRWAdjust.stepSize
             editable: true
+            Accessible.name: txtRfWidthAdjustPercent.text
 
             onValueChanged: FaceDetect.rWAdjust = Number(value)
         }
     }
 
     Label {
+        id: txtRfHeightAdjustPercent
         text: qsTr("Height Adjust %")
     }
     RowLayout {
@@ -880,6 +945,7 @@ GridLayout {
             to: 200
             stepSize: 1
             Layout.fillWidth: true
+            Accessible.name: txtRfHeightAdjustPercent.text
 
             onValueChanged: FaceDetect.rHAdjust = value
         }
@@ -890,6 +956,7 @@ GridLayout {
             to: sldRHAdjust.to
             stepSize: sldRHAdjust.stepSize
             editable: true
+            Accessible.name: txtRfHeightAdjustPercent.text
 
             onValueChanged: FaceDetect.rHAdjust = Number(value)
         }
@@ -897,7 +964,8 @@ GridLayout {
 
     // Configure rounded face area radius
     Label {
-        text: qsTr("H-Radius %")
+        id: txtHorizontalRadiusPercent
+        text: qsTr("Horizontal Radius %")
     }
     RowLayout {
         Slider {
@@ -906,6 +974,7 @@ GridLayout {
             to: 100
             stepSize: 1
             Layout.fillWidth: true
+            Accessible.name: txtHorizontalRadiusPercent.text
 
             onValueChanged: FaceDetect.rHRadius = value
         }
@@ -915,13 +984,15 @@ GridLayout {
             to: sldHRad.to
             stepSize: sldHRad.stepSize
             editable: true
+            Accessible.name: txtHorizontalRadiusPercent.text
 
             onValueChanged: FaceDetect.rHRadius = Number(value)
         }
     }
 
     Label {
-        text: qsTr("V-Radius %")
+        id: txtVerticalRadiusPercent
+        text: qsTr("Vertical Radius %")
     }
     RowLayout {
         Slider {
@@ -930,6 +1001,7 @@ GridLayout {
             to: 100
             stepSize: 1
             Layout.fillWidth: true
+            Accessible.name: txtVerticalRadiusPercent.text
 
             onValueChanged: FaceDetect.rVRadius = value
         }
@@ -939,6 +1011,7 @@ GridLayout {
             to: sldVRad.to
             stepSize: sldVRad.stepSize
             editable: true
+            Accessible.name: txtVerticalRadiusPercent.text
 
             onValueChanged: FaceDetect.rVRadius = Number(value)
         }
@@ -976,5 +1049,3 @@ GridLayout {
         }
     }
 }
-
-
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FaceDetect/src/facedetect.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/FaceDetect/src/facedetect.cpp
@@ -17,6 +17,8 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
+#include <QQmlEngine>
+
 #include "facedetect.h"
 #include "facedetectelement.h"
 
@@ -24,6 +26,9 @@ QObject *FaceDetect::create(const QStrin
 {
     Q_UNUSED(key)
     Q_UNUSED(specification)
+    qRegisterMetaType<FaceDetectElement::MarkerType>("FaceDetectMarkerType");
+    qRegisterMetaTypeStreamOperators<FaceDetectElement::MarkerType>("FaceDetectMarkerType");
+    qmlRegisterType<FaceDetectElement>("FaceDetectElement", 1, 0, "FaceDetectElement");
 
     return new FaceDetectElement();
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FaceDetect/src/facedetect.h
+++ webcamoid-9.0.0/libAvKys/Plugins/FaceDetect/src/facedetect.h
@@ -29,8 +29,8 @@ class FaceDetect: public QObject, public
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // FACEDETECT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FaceDetect/src/facedetectelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/FaceDetect/src/facedetectelement.cpp
@@ -24,32 +24,17 @@
 #include <QPainter>
 #include <QQmlContext>
 #include <QPainterPath>
+#include <akcaps.h>
+#include <akfrac.h>
 #include <akpacket.h>
 #include <akpluginmanager.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "facedetectelement.h"
 #include "haar/haardetector.h"
 
-using MarkerTypeMap = QMap<FaceDetectElement::MarkerType, QString>;
-
-inline MarkerTypeMap initMarkerTypeMap()
-{
-    MarkerTypeMap markerTypeToStr {
-        {FaceDetectElement::MarkerTypeRectangle , "rectangle" },
-        {FaceDetectElement::MarkerTypeEllipse   , "ellipse"   },
-        {FaceDetectElement::MarkerTypeImage     , "image"     },
-        {FaceDetectElement::MarkerTypePixelate  , "pixelate"  },
-        {FaceDetectElement::MarkerTypeBlur      , "blur"      },
-        {FaceDetectElement::MarkerTypeBlurOuter , "blurouter" },
-        {FaceDetectElement::MarkerTypeImageOuter, "imageouter"}
-    };
-
-    return markerTypeToStr;
-}
-
-Q_GLOBAL_STATIC_WITH_ARGS(MarkerTypeMap, markerTypeToStr, (initMarkerTypeMap()))
-
 using PenStyleMap = QMap<Qt::PenStyle, QString>;
 
 inline PenStyleMap initPenStyleMap()
@@ -70,6 +55,7 @@ Q_GLOBAL_STATIC_WITH_ARGS(PenStyleMap, m
 class FaceDetectElementPrivate
 {
     public:
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
         QString m_haarFile {":/FaceDetect/share/haarcascades/haarcascade_frontalface_alt.xml"};
         FaceDetectElement::MarkerType m_markerType {FaceDetectElement::MarkerTypeRectangle};
         QPen m_markerPen;
@@ -121,9 +107,9 @@ QString FaceDetectElement::haarFile() co
     return this->d->m_haarFile;
 }
 
-QString FaceDetectElement::markerType() const
+FaceDetectElement::MarkerType FaceDetectElement::markerType() const
 {
-    return markerTypeToStr->value(this->d->m_markerType);
+    return this->d->m_markerType;
 }
 
 QRgb FaceDetectElement::markerColor() const
@@ -228,12 +214,23 @@ QVector<QRect> FaceDetectElement::detect
     if (this->d->m_haarFile.isEmpty() || scanSize.isEmpty())
         return {};
 
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull())
+    if (!src)
         return {};
 
-    QImage scanFrame(src.scaled(scanSize, Qt::KeepAspectRatio));
+    QImage iFrame(src.caps().width(), src.caps().height(), QImage::Format_ARGB32);
+    auto lineSize = qMin<size_t>(src.lineSize(0), iFrame.bytesPerLine());
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = src.constLine(0, y);
+        auto dstLine = iFrame.scanLine(y);
+        memcpy(dstLine, srcLine, lineSize);
+    }
+
+    auto scanFrame = iFrame.scaled(scanSize, Qt::KeepAspectRatio);
 
     return this->d->m_cascadeClassifier.detect(scanFrame);
 }
@@ -269,20 +266,32 @@ AkPacket FaceDetectElement::iVideoStream
         return packet;
     }
 
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull())
+    if (!src)
         return {};
 
-    auto oFrame = src.convertToFormat(QImage::Format_ARGB32);
-    qreal scale = 1;
+    QImage iFrame(src.caps().width(),
+                  src.caps().height(),
+                  QImage::Format_ARGB32);
+    auto lineSize = qMin<size_t>(src.lineSize(0), iFrame.bytesPerLine());
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = src.constLine(0, y);
+        auto dstLine = iFrame.scanLine(y);
+        memcpy(dstLine, srcLine, lineSize);
+    }
 
-    QImage scanFrame(src.scaled(scanSize, Qt::KeepAspectRatio));
+    auto oFrame = iFrame.copy();
+    auto scanFrame = iFrame.scaled(scanSize, Qt::KeepAspectRatio);
+    qreal scale = 1;
 
     if (scanFrame.width() == scanSize.width())
-        scale = qreal(src.width()) / scanSize.width();
+        scale = qreal(iFrame.width()) / scanSize.width();
     else
-        scale = qreal(src.height()) / scanSize.height();
+        scale = qreal(iFrame.height()) / scanSize.height();
 
     this->d->m_cascadeClassifier.setEqualize(true);
     auto vecFaces = this->d->m_cascadeClassifier.detect(scanFrame);
@@ -301,15 +310,23 @@ AkPacket FaceDetectElement::iVideoStream
 
     /* Many users will want to blur even if no faces were detected! */
     if (this->d->m_markerType == MarkerTypeBlurOuter) {
-        QRect all(0, 0, src.width(), src.height());
-        auto rectPacket = AkVideoPacket::fromImage(src.copy(all), packet);
-        AkVideoPacket blurPacket = this->d->m_blurFilter->iStream(rectPacket);
-        auto blurImage = blurPacket.toImage();
-        painter.drawImage(all, blurImage);
+        AkVideoPacket blurPacket = this->d->m_blurFilter->iStream(packet);
+        QImage blurImage(blurPacket.caps().width(),
+                         blurPacket.caps().height(),
+                         QImage::Format_ARGB32);
+        auto lineSize = qMin<size_t>(blurPacket.lineSize(0), blurImage.bytesPerLine());
+
+        for (int y = 0; y < blurPacket.caps().height(); y++) {
+            auto srcLine = blurPacket.constLine(0, y);
+            auto dstLine = blurImage.scanLine(y);
+            memcpy(dstLine, srcLine, lineSize);
+        }
+
+        painter.drawImage(0, 0, blurImage);
         /* for a better effect, we could add a second (weaker) blur */
         /* and copy this to larger boxes around all faces */
     } else if (this->d->m_markerType == MarkerTypeImageOuter) {
-        QRect all(0, 0, src.width(), src.height());
+        QRect all(0, 0, iFrame.width(), iFrame.height());
         painter.drawImage(all, this->d->m_backgroundImg);
     }
 
@@ -334,7 +351,7 @@ AkPacket FaceDetectElement::iVideoStream
         else if (this->d->m_markerType == MarkerTypePixelate) {
             qreal sw = 1.0 / this->d->m_pixelGridSize.width();
             qreal sh = 1.0 / this->d->m_pixelGridSize.height();
-            QImage imagePixelate = src.copy(rect);
+            auto imagePixelate = iFrame.copy(rect);
 
             imagePixelate = imagePixelate.scaled(int(sw * imagePixelate.width()),
                                                  int(sh * imagePixelate.height()),
@@ -347,9 +364,31 @@ AkPacket FaceDetectElement::iVideoStream
 
             painter.drawImage(rect, imagePixelate);
         } else if (this->d->m_markerType == MarkerTypeBlur) {
-            auto rectPacket = AkVideoPacket::fromImage(src.copy(rect), packet);
+            auto subFrame = iFrame.copy(rect);
+            auto caps = src.caps();
+            caps.setWidth(subFrame.width());
+            caps.setHeight(subFrame.height());
+            AkVideoPacket rectPacket(caps);
+            rectPacket.copyMetadata(src);
+            auto lineSize = qMin<size_t>(subFrame.bytesPerLine(), rectPacket.lineSize(0));
+
+            for (int y = 0; y < subFrame.height(); y++) {
+                auto srcLine = subFrame.constScanLine(y);
+                auto dstLine = rectPacket.line(0, y);
+                memcpy(dstLine, srcLine, lineSize);
+            }
+
             AkVideoPacket blurPacket = this->d->m_blurFilter->iStream(rectPacket);
-            auto blurImage = blurPacket.toImage();
+            QImage blurImage(blurPacket.caps().width(),
+                             blurPacket.caps().height(),
+                             QImage::Format_ARGB32);
+            lineSize = qMin<size_t>(blurPacket.lineSize(0), blurImage.bytesPerLine());
+
+            for (int y = 0; y < blurPacket.caps().height(); y++) {
+                auto srcLine = blurPacket.constLine(0, y);
+                auto dstLine = blurImage.scanLine(y);
+                memcpy(dstLine, srcLine, lineSize);
+            }
 
             painter.drawImage(rect, blurImage);
         } else if (this->d->m_markerType == MarkerTypeBlurOuter
@@ -371,18 +410,26 @@ AkPacket FaceDetectElement::iVideoStream
                 painter.setClipPath(path);
             }
 
-            painter.drawImage(rect, src.copy(rect));
+            painter.drawImage(rect, iFrame.copy(rect));
         }
     }
 
     painter.end();
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+    lineSize = qMin<size_t>(oFrame.bytesPerLine(), dst.lineSize(0));
+
+    for (int y = 0; y < dst.caps().height(); y++) {
+        auto srcLine = oFrame.constScanLine(y);
+        auto dstLine = dst.line(0, y);
+        memcpy(dstLine, srcLine, lineSize);
+    }
 
-    if (oPacket)
-        emit this->oStream(oPacket);
+    if (dst)
+        emit this->oStream(dst);
 
-    return oPacket;
+    return dst;
 }
 
 void FaceDetectElement::setHaarFile(const QString &haarFile)
@@ -399,14 +446,12 @@ void FaceDetectElement::setHaarFile(cons
     }
 }
 
-void FaceDetectElement::setMarkerType(const QString &markerType)
+void FaceDetectElement::setMarkerType(MarkerType markerType)
 {
-    auto markerTypeEnum = markerTypeToStr->key(markerType, MarkerTypeRectangle);
-
-    if (this->d->m_markerType == markerTypeEnum)
+    if (this->d->m_markerType == markerType)
         return;
 
-    this->d->m_markerType = markerTypeEnum;
+    this->d->m_markerType = markerType;
     emit this->markerTypeChanged(markerType);
 }
 
@@ -594,7 +639,7 @@ void FaceDetectElement::resetHaarFile()
 
 void FaceDetectElement::resetMarkerType()
 {
-    this->setMarkerType("rectangle");
+    this->setMarkerType(FaceDetectElement::MarkerTypeRectangle);
 }
 
 void FaceDetectElement::resetMarkerColor()
@@ -692,4 +737,20 @@ void FaceDetectElement::resetScanSize()
     this->setScanSize(QSize(160, 120));
 }
 
+QDataStream &operator >>(QDataStream &istream, FaceDetectElement::MarkerType &markerType)
+{
+    int markerTypeInt;
+    istream >> markerTypeInt;
+    markerType = static_cast<FaceDetectElement::MarkerType>(markerTypeInt);
+
+    return istream;
+}
+
+QDataStream &operator <<(QDataStream &ostream, FaceDetectElement::MarkerType markerType)
+{
+    ostream << static_cast<int>(markerType);
+
+    return ostream;
+}
+
 #include "moc_facedetectelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FaceDetect/src/facedetectelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/FaceDetect/src/facedetectelement.h
@@ -28,13 +28,12 @@ class FaceDetectElementPrivate;
 class FaceDetectElement: public AkElement
 {
     Q_OBJECT
-        Q_ENUMS(MarkerType)
         Q_PROPERTY(QString haarFile
                    READ haarFile
                    WRITE setHaarFile
                    RESET resetHaarFile
                    NOTIFY haarFileChanged)
-        Q_PROPERTY(QString markerType
+        Q_PROPERTY(MarkerType markerType
                    READ markerType
                    WRITE setMarkerType
                    RESET resetMarkerType
@@ -146,12 +145,13 @@ class FaceDetectElement: public AkElemen
             MarkerTypeBlurOuter,
             MarkerTypeImageOuter
         };
+        Q_ENUM(MarkerType)
 
         FaceDetectElement();
         ~FaceDetectElement();
 
         Q_INVOKABLE QString haarFile() const;
-        Q_INVOKABLE QString markerType() const;
+        Q_INVOKABLE MarkerType markerType() const;
         Q_INVOKABLE QRgb markerColor() const;
         Q_INVOKABLE int markerWidth() const;
         Q_INVOKABLE QString markerStyle() const;
@@ -178,14 +178,14 @@ class FaceDetectElement: public AkElemen
         FaceDetectElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void haarFileChanged(const QString &haarFile);
-        void markerTypeChanged(const QString &markerType);
+        void markerTypeChanged(MarkerType markerType);
         void markerColorChanged(QRgb markerColor);
         void markerWidthChanged(int markerWidth);
         void markerStyleChanged(const QString &markerStyle);
@@ -208,7 +208,7 @@ class FaceDetectElement: public AkElemen
 
     public slots:
         void setHaarFile(const QString &haarFile);
-        void setMarkerType(const QString &markerType);
+        void setMarkerType(MarkerType markerType);
         void setMarkerColor(QRgb markerColor);
         void setMarkerWidth(int markerWidth);
         void setMarkerStyle(const QString &markerStyle);
@@ -251,4 +251,9 @@ class FaceDetectElement: public AkElemen
         void resetRVRadius();
 };
 
+Q_DECL_EXPORT QDataStream &operator >>(QDataStream &istream, FaceDetectElement::MarkerType &markerType);
+Q_DECL_EXPORT QDataStream &operator <<(QDataStream &ostream, FaceDetectElement::MarkerType markerType);
+
+Q_DECLARE_METATYPE(FaceDetectElement::MarkerType)
+
 #endif // FACEDETECTELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FaceDetect/src/haar/haarcascade.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/FaceDetect/src/haar/haarcascade.cpp
@@ -308,20 +308,20 @@ bool HaarCascade::load(const QString &fi
         case QXmlStreamReader::StartElement: {
             pathList << haarReader.name().toString();
 
-            if (path.isEmpty() && haarReader.name() != "opencv_storage")
+            if (path.isEmpty() && haarReader.name() != QStringLiteral("opencv_storage"))
                 return false;
 
             if (path == "opencv_storage")
                 this->m_name = haarReader.name().toString();
             else if (path == QString("opencv_storage/%1/stages").arg(this->m_name)
-                     && haarReader.name() == "_") {
+                     && haarReader.name() == QStringLiteral("_")) {
                 this->m_stages << HaarStage();
                 this->m_stages.last().setParentStage(stage - 1);
             } else if (path == QString("opencv_storage/%1/stages/_/trees").arg(this->m_name)
-                && haarReader.name() == "_") {
+                && haarReader.name() == QStringLiteral("_")) {
                 this->m_stages.last().trees() << HaarTree();
             } else if (path == QString("opencv_storage/%1/stages/_/trees/_").arg(this->m_name)
-                && haarReader.name() == "_") {
+                && haarReader.name() == QStringLiteral("_")) {
                 this->m_stages.last().trees().last().features() << HaarFeature();
             }
 
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FaceDetect/src/haar/haardetector.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/FaceDetect/src/haar/haardetector.cpp
@@ -1210,7 +1210,9 @@ QVector<QRect> HaarDetector::detect(cons
                                           &roi,
                                           &mutex);
 
-        QtConcurrent::run(&threadPool, HaarCascadeHID::run, cascade);
+        auto result =
+                QtConcurrent::run(&threadPool, HaarCascadeHID::run, cascade);
+        Q_UNUSED(result)
     }
 
     threadPool.waitForDone();
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FaceTrack/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/FaceTrack/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(FaceTrack
 target_compile_definitions(FaceTrack PRIVATE AVKYS_PLUGIN_FACETRACK)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(FaceTrack avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS FaceTrack RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FaceTrack/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/FaceTrack/share/qml/main.qml
@@ -55,6 +55,7 @@ GridLayout {
 
     // Haar file.
     Label {
+        id: txtHaarFile
         //: https://en.wikipedia.org/wiki/Haar-like_feature
         text: qsTr("Haar file")
     }
@@ -63,6 +64,7 @@ GridLayout {
         textRole: "text"
         currentIndex: haarFileIndex(FaceTrack.haarFile)
         Layout.fillWidth: true
+        Accessible.description: txtHaarFile.text
 
         model: ListModel {
             ListElement {
@@ -161,6 +163,7 @@ GridLayout {
 
     // Scan block.
     Label {
+        id: txtScanBlock
         text: qsTr("Scan block")
     }
     TextField {
@@ -171,12 +174,14 @@ GridLayout {
             regExp: /\d+x\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtScanBlock.text
 
         onAccepted: FaceTrack.scanSize = strToSize(text)
     }
 
     // Face bucket size
     Label {
+        id: txtFaceBracketingDuration
         text: qsTr("Face bracketing\nduration (seconds)")
     }
     SpinBox {
@@ -186,12 +191,14 @@ GridLayout {
         stepSize: 1
         editable: true
         Layout.fillWidth: true
+        Accessible.name: txtFaceBracketingDuration.text
 
         onValueChanged: FaceTrack.faceBucketSize = Number(value)
     }
 
     // Face bucket count
     Label {
+        id: txtFaceBracketCount
         text: qsTr("Face bracket count")
     }
     SpinBox {
@@ -201,12 +208,14 @@ GridLayout {
         stepSize: 1
         editable: true
         Layout.fillWidth: true
+        Accessible.name: txtFaceBracketCount.text
 
         onValueChanged: FaceTrack.faceBucketCount = Number(value)
     }
 
     // Expand rate
     Label {
+        id: txtZoomOutRate
         text: qsTr("Zoom out rate")
     }
     SpinBox {
@@ -216,12 +225,14 @@ GridLayout {
         stepSize: 1
         editable: true
         Layout.fillWidth: true
+        Accessible.name: txtZoomOutRate.text
 
         onValueChanged: FaceTrack.expandRate = Number(value)
     }
 
     // Contract rate
     Label {
+        id: txtZoomInRate
         text: qsTr("Zoom in rate")
     }
     SpinBox {
@@ -231,6 +242,7 @@ GridLayout {
         stepSize: 1
         editable: true
         Layout.fillWidth: true
+        Accessible.name: txtZoomInRate.text
 
         onValueChanged: FaceTrack.contractRate = Number(value)
     }
@@ -241,6 +253,7 @@ GridLayout {
         Layout.columnSpan: 2
         Layout.fillWidth: true
         clip: true
+        Accessible.name: title
 
         GridLayout {
             columns: 2
@@ -254,6 +267,7 @@ GridLayout {
                 editable: true
                 Layout.columnSpan: 2
                 Layout.alignment: Qt.AlignHCenter
+                Accessible.name: qsTr("Padding top")
 
                 onValueChanged: {
                     FaceTrack.facePadding = Qt.rect(FaceTrack.facePadding.x,
@@ -271,6 +285,7 @@ GridLayout {
                 stepSize: 1
                 editable: true
                 Layout.columnSpan: 1
+                Accessible.name: qsTr("Padding left")
 
                 onValueChanged: {
                     FaceTrack.facePadding = Qt.rect(Number(value),
@@ -288,6 +303,7 @@ GridLayout {
                 stepSize: 1
                 editable: true
                 Layout.columnSpan: 1
+                Accessible.name: qsTr("Padding right")
 
                 onValueChanged: {
                     FaceTrack.facePadding = Qt.rect(FaceTrack.facePadding.x,
@@ -304,6 +320,7 @@ GridLayout {
                 editable: true
                 Layout.columnSpan: 2
                 Layout.alignment: Qt.AlignHCenter
+                Accessible.name: qsTr("Padding bottom")
 
                 onValueChanged: {
                     FaceTrack.facePadding = Qt.rect(FaceTrack.facePadding.x,
@@ -321,6 +338,7 @@ GridLayout {
         Layout.columnSpan: 2
         Layout.fillWidth: true
         clip: true
+        Accessible.name: title
 
         GridLayout {
             columns: 2
@@ -334,6 +352,7 @@ GridLayout {
                 editable: true
                 Layout.columnSpan: 2
                 Layout.alignment: Qt.AlignHCenter
+                Accessible.name: qsTr("Margin top")
 
                 onValueChanged: {
                     FaceTrack.faceMargin = Qt.rect(FaceTrack.faceMargin.x,
@@ -352,6 +371,7 @@ GridLayout {
                 editable: true
                 Layout.columnSpan: 1
                 Layout.fillWidth: true
+                Accessible.name: qsTr("Margin left")
 
                 onValueChanged: {
                     FaceTrack.faceMargin = Qt.rect(Number(value),
@@ -370,6 +390,7 @@ GridLayout {
                 editable: true
                 Layout.columnSpan: 1
                 Layout.fillWidth: true
+                Accessible.name: qsTr("Margin right")
 
                 onValueChanged: {
                     FaceTrack.faceMargin = Qt.rect(FaceTrack.faceMargin.x,
@@ -386,6 +407,7 @@ GridLayout {
                 editable: true
                 Layout.columnSpan: 2
                 Layout.alignment: Qt.AlignHCenter
+                Accessible.name: qsTr("Margin bottom")
 
                 onValueChanged: {
                     FaceTrack.faceMargin = Qt.rect(FaceTrack.faceMargin.x,
@@ -399,6 +421,7 @@ GridLayout {
 
     // Aspect ratio
     Label {
+        id: txtAspectRatio
         text: qsTr("Aspect ratio")
     }
     GridLayout {
@@ -414,6 +437,7 @@ GridLayout {
             }
             enabled: FaceTrack.overrideAspectRatio
             Layout.fillWidth: true
+            Accessible.name: txtAspectRatio.text
 
             onTextChanged: {
                 FaceTrack.aspectRatio =
@@ -424,6 +448,7 @@ GridLayout {
         Switch {
             checked: FaceTrack.overrideAspectRatio
             Layout.alignment: Qt.AlignRight
+            Accessible.name: txtAspectRatio.text
 
             onCheckedChanged: FaceTrack.overrideAspectRatio = checked
         }
@@ -431,22 +456,26 @@ GridLayout {
 
     // Lock viewport
     Label {
+        id: txtLockViewport
         text: qsTr("Lock viewport")
     }
     Switch {
         checked: FaceTrack.lockedViewport
         Layout.alignment: Qt.AlignRight
+        Accessible.name: txtLockViewport.text
 
         onCheckedChanged: FaceTrack.lockedViewport = checked
     }
 
     // Debug label
     Label {
+        id: txtDebugMode
         text: qsTr("Debug mode")
     }
     Switch {
         checked: FaceTrack.debugModeEnabled
         Layout.alignment: Qt.AlignRight
+        Accessible.name: txtDebugMode.text
 
         onCheckedChanged: FaceTrack.debugModeEnabled = checked
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FaceTrack/src/facetrack.h
+++ webcamoid-9.0.0/libAvKys/Plugins/FaceTrack/src/facetrack.h
@@ -29,8 +29,8 @@ class FaceTrack: public QObject, public
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // FACETRACK_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FaceTrack/src/facetrackelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/FaceTrack/src/facetrackelement.cpp
@@ -25,14 +25,17 @@
 #include <QVariant>
 #include <akfrac.h>
 #include <akpacket.h>
-#include <akvideopacket.h>
 #include <akpluginmanager.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
+#include <akvideopacket.h>
 
 #include "facetrackelement.h"
 
 class FaceTrackElementPrivate
 {
     public:
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
         QString m_haarFile {":/FaceDetect/share/haarcascades/haarcascade_frontalface_alt.xml"};
         QSize m_scanSize {160, 120};
         int m_faceBucketSize {1};
@@ -161,31 +164,47 @@ AkPacket FaceTrackElement::iVideoStream(
 {
     QSize scanSize(this->d->m_scanSize);
 
-    if (this->d->m_haarFile.isEmpty() || scanSize.isEmpty())
-        akSend(packet)
+    if (this->d->m_haarFile.isEmpty() || scanSize.isEmpty()) {
+        if (packet)
+            emit this->oStream(packet);
+
+        return packet;
+    }
+
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    QImage iFrame(src.caps().width(),
+                  src.caps().height(),
+                  QImage::Format_ARGB32);
+    auto lineSize = qMin<size_t>(src.lineSize(0), iFrame.bytesPerLine());
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = src.constLine(0, y);
+        auto dstLine = iFrame.scanLine(y);
+        memcpy(dstLine, srcLine, lineSize);
+    }
 
-    auto src = packet.toImage();
+    if (!this->overrideAspectRatio())
+        this->setAspectRatio(AkFrac(iFrame.width(), iFrame.height()));
 
-    if (src.isNull())
-        return AkPacket();
-    else if (!this->overrideAspectRatio())
-        this->setAspectRatio({src.width(), src.height()});
-
-    QImage oFrame = src.convertToFormat(QImage::Format_ARGB32);
-    qreal scale = 1.0;
-    QImage scanFrame(src.scaled(scanSize, Qt::KeepAspectRatio));
+    qreal scale;
 
-    if (scanFrame.width() == scanSize.width())
-        scale = qreal(src.width()) / scanSize.width();
+    if (scanSize.height() * iFrame.width() >= scanSize.width() * iFrame.height())
+        scale = qreal(iFrame.width()) / scanSize.width();
     else
-        scale = qreal(src.height()) / scanSize.height();
+        scale = qreal(iFrame.height()) / scanSize.height();
 
     QRect bounds;
 
     if (this->d->m_lastBounds.isNull())
-        this->d->m_lastBounds = src.rect();
+        this->d->m_lastBounds = iFrame.rect();
 
-    if (this->lockedViewport()) {
+    if (this->d->m_lockedViewport) {
         bounds = this->d->m_lastBounds;
     } else {
         QVector<QRect> detectedFaces;
@@ -204,7 +223,7 @@ AkPacket FaceTrackElement::iVideoStream(
 
         if (this->d->m_debugModeEnabled) {
             pen.setStyle(Qt::SolidLine);
-            painter.begin(&oFrame);
+            painter.begin(&iFrame);
         }
 
         for (int i = 0; i < this->d->m_faceBuckets.size(); i++) {
@@ -236,8 +255,8 @@ AkPacket FaceTrackElement::iVideoStream(
         // Don't allow bounds outside the frame, even if the face does
         bounds.setCoords(qMax(0, bounds.left()),
                          qMax(0, bounds.top()),
-                         qMin(src.width(), bounds.right()),
-                         qMin(src.height(), bounds.bottom()));
+                         qMin(iFrame.width(), bounds.right()),
+                         qMin(iFrame.height(), bounds.bottom()));
 
         if (this->d->m_debugModeEnabled) {
             // Draw a boarder so we can see what is going on
@@ -251,29 +270,44 @@ AkPacket FaceTrackElement::iVideoStream(
 
     // Calcuate the maximum size allowed given the source and desired aspect ratio
     auto aspectRatio = this->d->m_aspectRatio;
-    QSize maxCropSize(qMin<int>(src.width(),
-                           src.height() * aspectRatio.value()),
-                      qMin<int>(src.height(),
-                                src.width() / aspectRatio.value()));
+    QSize maxCropSize(qMin<int>(iFrame.width(),
+                                iFrame.height() * aspectRatio.value()),
+                      qMin<int>(iFrame.height(),
+                                iFrame.width() / aspectRatio.value()));
 
     if (bounds.height() == 0 || bounds.width() == 0)
-        bounds.setCoords(int(src.width() / 2) - maxCropSize.width(),
-                         int(src.height() / 2) - maxCropSize.height(),
-                         int(src.width() / 2) + maxCropSize.width(),
-                         int(src.height() / 2) + maxCropSize.height());
+        bounds.setCoords(int(iFrame.width() / 2) - maxCropSize.width(),
+                         int(iFrame.height() / 2) - maxCropSize.height(),
+                         int(iFrame.width() / 2) + maxCropSize.width(),
+                         int(iFrame.height() / 2) + maxCropSize.height());
 
-    QImage croppedFrame;
+    QImage oFrame;
 
     if (this->lockedViewport()) {
-        croppedFrame = oFrame.copy(bounds);
+        oFrame = iFrame.copy(bounds);
     } else {
-        croppedFrame = oFrame.copy(this->d->calculateNewBounds(bounds,
-                                                               maxCropSize,
-                                                               src.size()));
+        oFrame = iFrame.copy(this->d->calculateNewBounds(bounds,
+                                                         maxCropSize,
+                                                         iFrame.size()));
     }
 
-    auto oPacket = AkVideoPacket::fromImage(croppedFrame, packet);
-    akSend(oPacket)
+    auto ocaps = src.caps();
+    ocaps.setWidth(oFrame.width());
+    ocaps.setHeight(oFrame.height());
+    AkVideoPacket dst(ocaps);
+    dst.copyMetadata(src);
+    lineSize = qMin<size_t>(oFrame.bytesPerLine(), dst.lineSize(0));
+
+    for (int y = 0; y < dst.caps().height(); y++) {
+        auto srcLine = oFrame.constScanLine(y);
+        auto dstLine = dst.line(0, y);
+        memcpy(dstLine, srcLine, lineSize);
+    }
+
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void FaceTrackElement::setHaarFile(const QString &haarFile)
@@ -454,8 +488,8 @@ QRect FaceTrackElementPrivate::calculate
     // Can't use addition/subtraction, need to use ratios,
     // or we'll pass our target and get jittery
     auto lastBounds = this->m_lastBounds;
-    auto xRate = double(this->m_expandRate) / 100;
-    auto cRate = double(-this->m_contractRate) / 100;
+    auto xRate = qreal(this->m_expandRate) / 100;
+    auto cRate = qreal(-this->m_contractRate) / 100;
 
     // Apply the expand/contract rates to get the new bounds
     QRect newBounds;
@@ -493,19 +527,19 @@ QRect FaceTrackElementPrivate::calculate
     QLine centerline(targetBounds.center(), this->m_lastBounds.center());
 
     // Make sure we correctly center and size the new bounds
-    int left(int(centerline.center().x() - (proposedWidth / 2)));
+    int left = centerline.center().x() - proposedWidth / 2;
     newBounds.setLeft(qMax(0, left));
 
-    int right(proposedWidth + newBounds.left());
+    int right = proposedWidth + newBounds.left();
     newBounds.setRight(qMin(srcSize.width(), right));
 
     left = newBounds.left() - (proposedWidth - newBounds.width());
     newBounds.setLeft(left);
 
-    int top(int(centerline.center().y() - (proposedHeight / 2)));
+    int top = centerline.center().y() - proposedHeight / 2;
     newBounds.setTop(qMax(0, top));
 
-    int bottom(proposedHeight + newBounds.top());
+    int bottom = proposedHeight + newBounds.top();
     newBounds.setBottom(qMin(srcSize.height(), bottom));
 
     top = newBounds.top() - (proposedHeight - newBounds.height());
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FaceTrack/src/facetrackelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/FaceTrack/src/facetrackelement.h
@@ -110,10 +110,10 @@ class FaceTrackElement: public AkElement
         FaceTrackElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void haarFileChanged(const QString &haarFile);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FalseColor/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/FalseColor/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(FalseColor
 target_compile_definitions(FalseColor PRIVATE AVKYS_PLUGIN_FALSECOLOR)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(FalseColor avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS FalseColor RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FalseColor/share/qml/TableColor.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/FalseColor/share/qml/TableColor.qml
@@ -25,6 +25,7 @@ import AkControls 1.0 as AK
 
 RowLayout {
     id: rlyColor
+
     property color tableColor: "black"
     property int index: 0
 
@@ -35,11 +36,13 @@ RowLayout {
         currentColor: rlyColor.tableColor
         title: qsTr("Select the new color")
         Layout.minimumWidth: AkUnit.create(100 * AkTheme.controlScale, "dp").pixels
+        Accessible.description: qsTr("Color %1").arg(rlyColor.index)
 
         onCurrentColorChanged: rlyColor.colorChanged(rlyColor.index,
                                                      currentColor)
     }
     Button {
+        Accessible.name: qsTr("Remove color %1").arg(rlyColor.index)
         icon.source: "image://icons/minus"
         flat: true
 
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FalseColor/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/FalseColor/share/qml/main.qml
@@ -66,6 +66,7 @@ GridLayout {
 
     // Soft gradient.
     Label {
+        id: txtSoft
         text: qsTr("Soft")
     }
     RowLayout {
@@ -74,6 +75,7 @@ GridLayout {
         }
         Switch {
             checked: FalseColor.soft
+            Accessible.name: txtSoft.text
 
             onCheckedChanged: FalseColor.soft = checked
         }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FalseColor/src/falsecolor.h
+++ webcamoid-9.0.0/libAvKys/Plugins/FalseColor/src/falsecolor.h
@@ -29,8 +29,8 @@ class FalseColor: public QObject, public
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // FALSECOLOR_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FalseColor/src/falsecolorelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/FalseColor/src/falsecolorelement.cpp
@@ -17,12 +17,13 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
-#include <QReadWriteLock>
+#include <QMutex>
 #include <QVariant>
 #include <QQmlContext>
+#include <akfrac.h>
 #include <akpacket.h>
-#include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "falsecolorelement.h"
@@ -30,19 +31,24 @@
 class FalseColorElementPrivate
 {
     public:
-        QReadWriteLock m_mutex;
+        QMutex m_mutex;
         QList<QRgb> m_table {
             qRgb(0, 0, 0),
             qRgb(255, 0, 0),
             qRgb(255, 255, 255),
             qRgb(255, 255, 255)
         };
+        QRgb m_colorTable[256];
         bool m_soft {false};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_graya8pack, 0, 0, {}}};
+
+        inline void updateColorTable();
 };
 
 FalseColorElement::FalseColorElement(): AkElement()
 {
     this->d = new FalseColorElementPrivate;
+    this->d->updateColorTable();
 }
 
 FalseColorElement::~FalseColorElement()
@@ -67,9 +73,7 @@ bool FalseColorElement::soft() const
 
 QRgb FalseColorElement::colorAt(int index)
 {
-    this->d->m_mutex.lockForRead();
     auto color = this->d->m_table.at(index);
-    this->d->m_mutex.unlock();
 
     return color;
 }
@@ -92,148 +96,83 @@ void FalseColorElement::controlInterface
 
 AkPacket FalseColorElement::iVideoStream(const AkVideoPacket &packet)
 {
-    this->d->m_mutex.lockForRead();
-    auto isTableEmpty = this->d->m_table.isEmpty();
-    this->d->m_mutex.unlock();
-
-    if (isTableEmpty)  {
-        if (packet)
-            emit this->oStream(packet);
-
-        return packet;
-    }
-
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_Grayscale8);
-    QImage oFrame(src.size(), QImage::Format_ARGB32);
-
-    QRgb table[256];
-
-    this->d->m_mutex.lockForRead();
-    auto tableRgb = this->d->m_table;
-    this->d->m_mutex.unlock();
-
-    for (int i = 0; i < 256; i++) {
-        QRgb color;
-
-        if (this->d->m_soft) {
-            int low = i * (tableRgb.size() - 1) / 255;
-            low = qBound(0, low, tableRgb.size() - 2);
-            int high = low + 1;
-
-            int rl = qRed(tableRgb[low]);
-            int gl = qGreen(tableRgb[low]);
-            int bl = qBlue(tableRgb[low]);
-
-            int rh = qRed(tableRgb[high]);
-            int gh = qGreen(tableRgb[high]);
-            int bh = qBlue(tableRgb[high]);
-
-            int l = 255 * low / (tableRgb.size() - 1);
-            int h = 255 * high / (tableRgb.size() - 1);
-
-            qreal k = qreal(i - l) / (h - l);
-
-            int r = int(k * (rh - rl) + rl);
-            int g = int(k * (gh - gl) + gl);
-            int b = int(k * (bh - bl) + bl);
-
-            r = qBound(0, r, 255);
-            g = qBound(0, g, 255);
-            b = qBound(0, b, 255);
-
-            color = qRgb(r, g, b);
-        } else {
-            int t = tableRgb.size() * i / 255;
-            t = qBound(0, t, tableRgb.size() - 1);
-            int r = qRed(tableRgb[t]);
-            int g = qGreen(tableRgb[t]);
-            int b = qBlue(tableRgb[t]);
-            color = qRgb(r, g, b);
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    auto ocaps = src.caps();
+    ocaps.setFormat(AkVideoCaps::Format_argbpack);
+    AkVideoPacket dst(ocaps);
+    dst.copyMetadata(src);
+
+    this->d->m_mutex.lock();
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const quint16 *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &ipixel = srcLine[x];
+            auto opixel = this->d->m_colorTable[ipixel >> 8];
+            dstLine[x] = qRgba(qRed(opixel),
+                               qGreen(opixel),
+                               qBlue(opixel),
+                               ipixel & 0xff);
         }
-
-        table[i] = color;
     }
 
-    for (int y = 0; y < src.height(); y++) {
-        auto srcLine = src.constScanLine(y);
-        auto dstLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++)
-            dstLine[x] = table[srcLine[x]];
-    }
-
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
+    this->d->m_mutex.unlock();
 
-    if (oPacket)
-        emit this->oStream(oPacket);
+    if (dst)
+        emit this->oStream(dst);
 
-    return oPacket;
+    return dst;
 }
 
 void FalseColorElement::addColor(QRgb color)
 {
-    this->d->m_mutex.lockForWrite();
-    this->d->m_table << color;
-    this->d->m_mutex.unlock();
-
     QVariantList table;
 
     for (auto &color: this->d->m_table)
         table << color;
 
-    emit this->tableChanged(table);
+    table << color;
+    this->setTable(table);
 }
 
 void FalseColorElement::setColor(int index, QRgb color)
 {
-    bool tableChanged = false;
-    this->d->m_mutex.lockForWrite();
-
-    if (index >= 0
-        && index < this->d->m_table.size()
-        && this->d->m_table[index] != color) {
-        this->d->m_table[index] = color;
-        tableChanged = true;
-    }
-
-    this->d->m_mutex.unlock();
-
-    if (tableChanged) {
-        QVariantList table;
+    QVariantList table;
+    int i = 0;
 
-        for (auto &color: this->d->m_table)
+    for (auto &color_: this->d->m_table) {
+        if (i == index)
             table << color;
+        else
+            table << color_;
 
-        emit this->tableChanged(table);
+        i++;
     }
+
+    this->setTable(table);
 }
 
 void FalseColorElement::removeColor(int index)
 {
-    bool tableChanged = false;
-    this->d->m_mutex.lockForWrite();
-
-    if (index >= 0
-        && index < this->d->m_table.size()) {
-        this->d->m_table.removeAt(index);
-        tableChanged = true;
-    }
-
-    this->d->m_mutex.unlock();
-
-    if (tableChanged) {
-        QVariantList table;
+    QVariantList table;
+    int i = 0;
 
-        for (auto &color: this->d->m_table)
+    for (auto &color: this->d->m_table) {
+        if (i != index)
             table << color;
 
-        emit this->tableChanged(table);
+        i++;
     }
+
+    this->setTable(table);
 }
 
 void FalseColorElement::clearTable()
@@ -248,16 +187,11 @@ void FalseColorElement::setTable(const Q
     for (auto &color: table)
         tableRgb << color.value<QRgb>();
 
-    this->d->m_mutex.lockForWrite();
-
-    if (this->d->m_table == tableRgb) {
-        this->d->m_mutex.unlock();
-
+    if (this->d->m_table == tableRgb)
         return;
-    }
 
     this->d->m_table = tableRgb;
-    this->d->m_mutex.unlock();
+    this->d->updateColorTable();
     emit this->tableChanged(table);
 }
 
@@ -267,6 +201,7 @@ void FalseColorElement::setSoft(bool sof
         return;
 
     this->d->m_soft = soft;
+    this->d->updateColorTable();
     emit this->softChanged(soft);
 }
 
@@ -287,4 +222,57 @@ void FalseColorElement::resetSoft()
     this->setSoft(false);
 }
 
+void FalseColorElementPrivate::updateColorTable()
+{
+    this->m_mutex.lock();
+    auto tableSize = this->m_table.size();
+
+    for (int i = 0; i < 256; i++) {
+        QRgb color;
+
+        if (this->m_soft) {
+            int low = i * (tableSize - 1) / 255;
+            low = qBound(0, low, tableSize - 2);
+            int high = low + 1;
+
+            auto &colorLow = this->m_table[low];
+            int rl = qRed(colorLow);
+            int gl = qGreen(colorLow);
+            int bl = qBlue(colorLow);
+
+            auto &colorHigh = this->m_table[high];
+            int rh = qRed(colorHigh);
+            int gh = qGreen(colorHigh);
+            int bh = qBlue(colorHigh);
+
+            int l = 255 * low / (tableSize - 1);
+            int h = 255 * high / (tableSize - 1);
+
+            qreal k = qreal(i - l) / (h - l);
+
+            int r = int(k * (rh - rl) + rl);
+            int g = int(k * (gh - gl) + gl);
+            int b = int(k * (bh - bl) + bl);
+
+            r = qBound(0, r, 255);
+            g = qBound(0, g, 255);
+            b = qBound(0, b, 255);
+
+            color = qRgb(r, g, b);
+        } else {
+            int t = tableSize * i / 255;
+            t = qBound(0, t, tableSize - 1);
+            auto &tcolor = this->m_table[t];
+            int r = qRed(tcolor);
+            int g = qGreen(tcolor);
+            int b = qBlue(tcolor);
+            color = qRgb(r, g, b);
+        }
+
+        this->m_colorTable[i] = color;
+    }
+
+    this->m_mutex.unlock();
+}
+
 #include "moc_falsecolorelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FalseColor/src/falsecolorelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/FalseColor/src/falsecolorelement.h
@@ -51,10 +51,10 @@ class FalseColorElement: public AkElemen
         FalseColorElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void tableChanged(const QVariantList &table);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Fire/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Fire/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Fire
 target_compile_definitions(Fire PRIVATE AVKYS_PLUGIN_FIRE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Fire avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Fire RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Fire/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Fire/share/qml/main.qml
@@ -20,6 +20,7 @@
 import QtQuick 2.12
 import QtQuick.Controls 2.5
 import QtQuick.Layouts 1.3
+import FireElement 1.0
 
 GridLayout {
     columns: 3
@@ -79,6 +80,7 @@ GridLayout {
 
     // Fire mode.
     Label {
+        id: txtMode
         text: qsTr("Mode")
     }
     ComboBox {
@@ -87,15 +89,16 @@ GridLayout {
         currentIndex: modeIndex(Fire.mode)
         Layout.columnSpan: 2
         Layout.fillWidth: true
+        Accessible.description: txtMode.text
 
         model: ListModel {
             ListElement {
                 text: qsTr("Soft")
-                mode: "soft"
+                mode: FireElement.FireModeSoft
             }
             ListElement {
                 text: qsTr("Hard")
-                mode: "hard"
+                mode: FireElement.FireModeHard
             }
         }
 
@@ -104,6 +107,7 @@ GridLayout {
 
     // Cooling factor.
     Label {
+        id: txtCooling
         text: qsTr("Cooling")
     }
     Slider {
@@ -113,6 +117,7 @@ GridLayout {
         from: -255
         to: 255
         Layout.fillWidth: true
+        Accessible.name: txtCooling.text
 
         onValueChanged: Fire.cool = value
     }
@@ -123,12 +128,14 @@ GridLayout {
         to: sldCool.to
         stepSize: sldCool.stepSize
         editable: true
+        Accessible.name: txtCooling.text
 
         onValueChanged: Fire.cool = value
     }
 
     // Dissolving factor.
     Label {
+        id: txtDissolve
         text: qsTr("Dissolve")
     }
     TextField {
@@ -140,12 +147,14 @@ GridLayout {
         }
         Layout.columnSpan: 2
         Layout.fillWidth: true
+        Accessible.name: txtDissolve.text
 
         onTextChanged: Fire.dissolve = Number(text)
     }
 
     // Blur.
     Label {
+        id: txtBlur
         text: qsTr("Blur")
     }
     TextField {
@@ -157,12 +166,14 @@ GridLayout {
         }
         Layout.columnSpan: 2
         Layout.fillWidth: true
+        Accessible.name: txtBlur.text
 
         onTextChanged: Fire.blur = Number(text)
     }
 
     // Zoom.
     Label {
+        id: txtZoom
         text: qsTr("Zoom")
     }
     TextField {
@@ -174,12 +185,14 @@ GridLayout {
         }
         Layout.columnSpan: 2
         Layout.fillWidth: true
+        Accessible.name: txtZoom.text
 
         onTextChanged: Fire.zoom = Number(text)
     }
 
     // Threshold.
     Label {
+        id: txtThreshold
         text: qsTr("Threshold")
     }
     Slider {
@@ -188,6 +201,7 @@ GridLayout {
         stepSize: 1
         to: 255
         Layout.fillWidth: true
+        Accessible.name: txtThreshold.text
 
         onValueChanged: Fire.threshold = value
     }
@@ -197,12 +211,14 @@ GridLayout {
         to: sldThreshold.to
         stepSize: sldThreshold.stepSize
         editable: true
+        Accessible.name: txtThreshold.text
 
         onValueChanged: Fire.threshold = value
     }
 
     // Luma threshold.
     Label {
+        id: txtLumaThreshold
         /*: Minimum luminance/light/white level/intensity in a gray or black and
             white picture.
 
@@ -216,6 +232,7 @@ GridLayout {
         stepSize: 1
         to: 255
         Layout.fillWidth: true
+        Accessible.name: txtLumaThreshold.text
 
         onValueChanged: Fire.lumaThreshold = value
     }
@@ -225,12 +242,14 @@ GridLayout {
         to: sldLumaThreshold.to
         stepSize: sldLumaThreshold.stepSize
         editable: true
+        Accessible.name: txtLumaThreshold.text
 
         onValueChanged: Fire.lumaThreshold = value
     }
 
     // Alpha diff.
     Label {
+        id: txtAlphaDiff
         /*: Alpha channel, also known as the transparency component of a pixel
             in an image.
          */
@@ -243,6 +262,7 @@ GridLayout {
         from: -255
         to: 255
         Layout.fillWidth: true
+        Accessible.name: txtAlphaDiff.text
 
         onValueChanged: Fire.alphaDiff = value
     }
@@ -253,12 +273,14 @@ GridLayout {
         to: sldAlphaDiff.to
         stepSize: sldAlphaDiff.stepSize
         editable: true
+        Accessible.name: txtAlphaDiff.text
 
         onValueChanged: Fire.alphaDiff = value
     }
 
     // Alpha variation.
     Label {
+        id: txtAlphaVariation
         /*: Alpha channel, also known as the transparency component of a pixel
             in an image.
          */
@@ -270,6 +292,7 @@ GridLayout {
         stepSize: 1
         to: 256
         Layout.fillWidth: true
+        Accessible.name: txtAlphaVariation.text
 
         onValueChanged: Fire.alphaVariation = value
     }
@@ -279,13 +302,15 @@ GridLayout {
         to: sldAlphaVariation.to
         stepSize: sldAlphaVariation.stepSize
         editable: true
+        Accessible.name: txtAlphaVariation.text
 
         onValueChanged: Fire.alphaVariation = value
     }
 
-    // N° of colors.
+    // Number of colors.
     Label {
-        text: qsTr("N° of colors")
+        id: txtNumberOfColors
+        text: qsTr("Number of colors")
     }
     Slider {
         id: sldNColors
@@ -293,6 +318,7 @@ GridLayout {
         stepSize: 1
         to: 256
         Layout.fillWidth: true
+        Accessible.name: txtNumberOfColors.text
 
         onValueChanged: Fire.nColors = value
     }
@@ -302,6 +328,7 @@ GridLayout {
         to: sldNColors.to
         stepSize: sldNColors.stepSize
         editable: true
+        Accessible.name: txtNumberOfColors.text
 
         onValueChanged: Fire.nColors = value
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Fire/src/fire.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Fire/src/fire.cpp
@@ -17,6 +17,8 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
+#include <QQmlEngine>
+
 #include "fire.h"
 #include "fireelement.h"
 
@@ -24,6 +26,9 @@ QObject *Fire::create(const QString &key
 {
     Q_UNUSED(key)
     Q_UNUSED(specification)
+    qRegisterMetaType<FireElement::FireMode>("FireElementFireMode");
+    qRegisterMetaTypeStreamOperators<FireElement::FireMode>("FireElementFireMode");
+    qmlRegisterType<FireElement>("FireElement", 1, 0, "FireElement");
 
     return new FireElement();
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Fire/src/fire.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Fire/src/fire.h
@@ -29,8 +29,8 @@ class Fire: public QObject, public AkPlu
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // FIRE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Fire/src/fireelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Fire/src/fireelement.cpp
@@ -17,33 +17,25 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
+#include <QDataStream>
 #include <QDateTime>
 #include <QMap>
-#include <QPainter>
 #include <QQmlContext>
 #include <QRandomGenerator>
+#include <QSize>
 #include <QVariant>
 #include <QtMath>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
 #include <akpluginmanager.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
+#include <akvideomixer.h>
 #include <akvideopacket.h>
 
 #include "fireelement.h"
 
-using FireModeMap = QMap<FireElement::FireMode, QString>;
-
-inline FireModeMap initFireModeMap()
-{
-    FireModeMap fireModeToStr {
-        {FireElement::FireModeSoft, "soft"},
-        {FireElement::FireModeHard, "hard"}
-    };
-
-    return fireModeToStr;
-}
-
-Q_GLOBAL_STATIC_WITH_ARGS(FireModeMap, fireModeToStr, (initFireModeMap()))
-
 class FireElementPrivate
 {
     public:
@@ -57,31 +49,33 @@ class FireElementPrivate
         int m_alphaVariation {127};
         int m_nColors {8};
         QSize m_framSize;
-        QImage m_prevFrame;
-        QImage m_fireBuffer;
-        QVector<QRgb> m_palette;
-        AkElementPtr m_blurFilter;
-
-        QImage imageDiff(const QImage &img1,
-                         const QImage &img2,
-                         int colors,
-                         int threshold,
-                         int lumaThreshold,
-                         int alphaVariation,
-                         FireElement::FireMode mode);
-        QImage zoomImage(const QImage &src, qreal factor);
-        void coolImage(QImage &src, int colorDiff);
-        void imageAlphaDiff(QImage &src, int alphaDiff);
-        void dissolveImage(QImage &src, qreal amount);
-        QImage burn(const QImage &src, const QVector<QRgb> &palette);
-        QVector<QRgb> createPalette();
+        AkVideoPacket m_prevFrame;
+        AkVideoPacket m_fireBuffer;
+        QRgb m_palette[256];
+        AkElementPtr m_blurFilter {akPluginManager->create<AkElement>("VideoFilter/Blur")};
+        AkVideoConverter m_videoConverter;
+        AkVideoMixer m_videoMixer;
+
+        AkVideoPacket imageDiff(const AkVideoPacket &img1,
+                                const AkVideoPacket &img2,
+                                int colors,
+                                int threshold,
+                                int lumaThreshold,
+                                int alphaVariation,
+                                FireElement::FireMode mode);
+        AkVideoPacket zoomImage(const AkVideoPacket &src, qreal factor);
+        void coolImage(AkVideoPacket &src, int colorDiff);
+        void imageAlphaDiff(AkVideoPacket &src, int alphaDiff);
+        void dissolveImage(AkVideoPacket &src, qreal amount);
+        AkVideoPacket burn(const AkVideoPacket &src,
+                           const QRgb *palette);
+        void createPalette();
 };
 
 FireElement::FireElement(): AkElement()
 {
     this->d = new FireElementPrivate;
-    this->d->m_palette = this->d->createPalette();
-    this->d->m_blurFilter = akPluginManager->create<AkElement>("VideoFilter/Blur");
+    this->d->createPalette();
     this->d->m_blurFilter->setProperty("radius", 2);
 
     QObject::connect(this->d->m_blurFilter.data(),
@@ -95,9 +89,9 @@ FireElement::~FireElement()
     delete this->d;
 }
 
-QString FireElement::mode() const
+FireElement::FireMode FireElement::mode() const
 {
-    return fireModeToStr->value(this->d->m_mode);
+    return this->d->m_mode;
 }
 
 int FireElement::cool() const
@@ -145,152 +139,6 @@ int FireElement::nColors() const
     return this->d->m_nColors;
 }
 
-QImage FireElementPrivate::imageDiff(const QImage &img1,
-                                     const QImage &img2,
-                                     int colors,
-                                     int threshold,
-                                     int lumaThreshold,
-                                     int alphaVariation,
-                                     FireElement::FireMode mode)
-{
-    int width = qMin(img1.width(), img2.width());
-    int height = qMin(img1.height(), img2.height());
-    QImage diff(width, height, QImage::Format_ARGB32);
-
-    for (int y = 0; y < height; y++) {
-        auto iLine1 = reinterpret_cast<const QRgb *>(img1.constScanLine(y));
-        auto iLine2 = reinterpret_cast<const QRgb *>(img2.constScanLine(y));
-        auto oLine = reinterpret_cast<QRgb *>(diff.scanLine(y));
-
-        for (int x = 0; x < width; x++) {
-            int r1 = qRed(iLine1[x]);
-            int g1 = qGreen(iLine1[x]);
-            int b1 = qBlue(iLine1[x]);
-
-            int r2 = qRed(iLine2[x]);
-            int g2 = qGreen(iLine2[x]);
-            int b2 = qBlue(iLine2[x]);
-
-            int dr = r1 - r2;
-            int dg = g1 - g2;
-            int db = b1 - b2;
-
-            int alpha = dr * dr + dg * dg + db * db;
-            alpha = int(sqrt(alpha / 3.0));
-
-            if (mode == FireElement::FireModeSoft)
-                alpha = alpha < threshold? 0: alpha;
-            else
-                alpha = alpha < threshold?
-                          0: QRandomGenerator::global()->bounded(255 - alphaVariation, 256);
-
-            int gray = qGray(iLine2[x]);
-            alpha = gray < lumaThreshold? 0: alpha;
-            int b = QRandomGenerator::global()->bounded(255 - colors, 256);
-            oLine[x] = qRgba(0, 0, b, alpha);
-        }
-    }
-
-    return diff;
-}
-
-QImage FireElementPrivate::zoomImage(const QImage &src, qreal factor)
-{
-    QImage scaled = src.scaled(src.width(),
-                               int((1 + factor) * src.height()));
-
-    QPoint p(0, src.height() - scaled.height());
-
-    QImage zoom(src.size(), src.format());
-    zoom.fill(qRgba(0, 0, 0, 0));
-
-    QPainter painter;
-    painter.begin(&zoom);
-    painter.drawImage(p, src);
-    painter.end();
-
-    return zoom;
-}
-
-void FireElementPrivate::coolImage(QImage &src, int colorDiff)
-{
-    for (int y = 0; y < src.height(); y++) {
-        auto srcLine = reinterpret_cast<QRgb *>(src.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++) {
-            int b = qBound(0, qBlue(srcLine[x]) + colorDiff, 255);
-            srcLine[x] = qRgba(0, 0, b, qAlpha(srcLine[x]));
-        }
-    }
-}
-
-void FireElementPrivate::imageAlphaDiff(QImage &src, int alphaDiff)
-{
-    for (int y = 0; y < src.height(); y++) {
-        auto srcLine = reinterpret_cast<QRgb *>(src.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++) {
-            QRgb pixel = srcLine[x];
-            int b = qBlue(pixel);
-            int a = qBound(0, qAlpha(pixel) + alphaDiff, 255);
-            srcLine[x] = qRgba(0, 0, b, a);
-        }
-    }
-}
-
-void FireElementPrivate::dissolveImage(QImage &src, qreal amount)
-{
-    qint64 videoArea = src.width() * src.height();
-    auto n = qRound64(amount * videoArea);
-
-    for (qint64 i = 0; i < n; i++) {
-        int x = QRandomGenerator::global()->bounded(src.width());
-        int y = QRandomGenerator::global()->bounded(src.height());
-        QRgb pixel = src.pixel(x, y);
-        int b = qBlue(pixel);
-        int a = QRandomGenerator::global()->bounded(qAlpha(pixel) + 1);
-        src.setPixel(x, y, qRgba(0, 0, b, a));
-    }
-}
-
-QImage FireElementPrivate::burn(const QImage &src, const QVector<QRgb> &palette)
-{
-    QImage dest(src.size(), src.format());
-
-    for (int y = 0; y < src.height(); y++) {
-        auto srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        auto dstLine = reinterpret_cast<QRgb *>(dest.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++) {
-            int index = qBlue(srcLine[x]);
-            int r = qRed(palette[index]);
-            int g = qGreen(palette[index]);
-            int b = qBlue(palette[index]);
-
-            dstLine[x] = qRgba(r, g, b, qAlpha(srcLine[x]));
-        }
-    }
-
-    return dest;
-}
-
-QVector<QRgb> FireElementPrivate::createPalette()
-{
-    QVector<QRgb> palette;
-
-    for (int i = 0; i < 128; i++)
-        palette << qRgb(255,
-                        (3 * i +  128) >> 1,
-                        i >> 1);
-
-    for (int i = 0; i < 128; i++)
-        palette << qRgb(255,
-                        255,
-                        (3 * i +  128) >> 1);
-
-    return palette;
-}
-
 QString FireElement::controlInterfaceProvide(const QString &controlId) const
 {
     Q_UNUSED(controlId)
@@ -309,24 +157,28 @@ void FireElement::controlInterfaceConfig
 
 AkPacket FireElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_videoConverter.setOutputCaps({AkVideoCaps::Format_argbpack, 0, 0, {}});
+
+    this->d->m_videoConverter.begin();
+    this->d->m_videoConverter.setCacheIndex(0);
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull())
-        return AkPacket();
+    if (!src)
+        return {};
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
+    auto dst(src);
 
-    if (src.size() != this->d->m_framSize) {
-        this->d->m_fireBuffer = QImage();
-        this->d->m_prevFrame = QImage();
-        this->d->m_framSize = src.size();
+    QSize frameSize(src.caps().width(), src.caps().height());
+
+    if (frameSize != this->d->m_framSize) {
+        this->d->m_fireBuffer = AkVideoPacket();
+        this->d->m_prevFrame = AkVideoPacket();
+        this->d->m_framSize = frameSize;
     }
 
-    if (this->d->m_prevFrame.isNull()) {
-        oFrame = src;
-        this->d->m_fireBuffer = QImage(src.size(), src.format());
-        this->d->m_fireBuffer.fill(qRgba(0, 0, 0, 0));
+    if (!this->d->m_prevFrame) {
+        this->d->m_fireBuffer = {src.caps(), true};
     } else {
         this->d->m_fireBuffer = this->d->zoomImage(this->d->m_fireBuffer,
                                                    this->d->m_zoom);
@@ -338,47 +190,43 @@ AkPacket FireElement::iVideoStream(const
 
         // Compute the difference between previous and current frame,
         // and save it to the buffer.
-        QImage diff =
-                this->d->imageDiff(this->d->m_prevFrame,
-                                   src,
-                                   nColors,
-                                   this->d->m_threshold,
-                                   this->d->m_lumaThreshold,
-                                   this->d->m_alphaVariation,
-                                   this->d->m_mode);
-
-        QPainter painter;
-        painter.begin(&this->d->m_fireBuffer);
-        painter.drawImage(0, 0, diff);
-        painter.end();
-
-        auto firePacket = AkVideoPacket::fromImage(this->d->m_fireBuffer,
-                                                   packet);
-        auto blurPacket = this->d->m_blurFilter->iStream(firePacket);
-        this->d->m_fireBuffer = AkVideoPacket(blurPacket).toImage();
+        auto diff = this->d->imageDiff(this->d->m_prevFrame,
+                                       src,
+                                       nColors,
+                                       this->d->m_threshold,
+                                       this->d->m_lumaThreshold,
+                                       this->d->m_alphaVariation,
+                                       this->d->m_mode);
+
+        this->d->m_videoMixer.begin(&this->d->m_fireBuffer);
+        this->d->m_videoMixer.setCacheIndex(0);
+        this->d->m_videoMixer.draw(diff);
+        this->d->m_videoMixer.end();
+
+        this->d->m_fireBuffer = this->d->m_blurFilter->iStream(this->d->m_fireBuffer);
 
         // Apply buffer.
-        painter.begin(&oFrame);
-        painter.drawImage(0, 0, src);
-        painter.drawImage(0, 0, this->d->burn(this->d->m_fireBuffer,
-                                              this->d->m_palette));
-        painter.end();
+        this->d->m_videoMixer.begin(&dst);
+        this->d->m_videoMixer.setCacheIndex(1);
+        this->d->m_videoMixer.draw(this->d->burn(this->d->m_fireBuffer,
+                                                 this->d->m_palette));
+        this->d->m_videoMixer.end();
     }
 
-    this->d->m_prevFrame = src.copy();
+    this->d->m_prevFrame = src;
+
+    if (dst)
+        emit this->oStream(dst);
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    return dst;
 }
 
-void FireElement::setMode(const QString &mode)
+void FireElement::setMode(const FireMode &mode)
 {
-    FireMode modeEnum = fireModeToStr->key(mode, FireModeHard);
-
-    if (this->d->m_mode == modeEnum)
+    if (this->d->m_mode == mode)
         return;
 
-    this->d->m_mode = modeEnum;
+    this->d->m_mode = mode;
     emit this->modeChanged(mode);
 }
 
@@ -461,7 +309,7 @@ void FireElement::setNColors(int nColors
 
 void FireElement::resetMode()
 {
-    this->setMode("hard");
+    this->setMode(FireElement::FireModeHard);
 }
 
 void FireElement::resetCool()
@@ -509,4 +357,176 @@ void FireElement::resetNColors()
     this->setNColors(8);
 }
 
+QDataStream &operator >>(QDataStream &istream, FireElement::FireMode &mode)
+{
+    int modeInt;
+    istream >> modeInt;
+    mode = static_cast<FireElement::FireMode>(modeInt);
+
+    return istream;
+}
+
+QDataStream &operator <<(QDataStream &ostream, FireElement::FireMode mode)
+{
+    ostream << static_cast<int>(mode);
+
+    return ostream;
+}
+
+AkVideoPacket FireElementPrivate::imageDiff(const AkVideoPacket &img1,
+                                            const AkVideoPacket &img2,
+                                            int colors,
+                                            int threshold,
+                                            int lumaThreshold,
+                                            int alphaVariation,
+                                            FireElement::FireMode mode)
+{
+    int width = qMin(img1.caps().width(), img2.caps().width());
+    int height = qMin(img1.caps().height(), img2.caps().height());
+    auto ocaps = img2.caps();
+    ocaps.setWidth(width);
+    ocaps.setHeight(height);
+    AkVideoPacket diff(ocaps);
+    diff.copyMetadata(img2);
+
+    for (int y = 0; y < height; y++) {
+        auto iLine1 = reinterpret_cast<const QRgb *>(img1.constLine(0, y));
+        auto iLine2 = reinterpret_cast<const QRgb *>(img2.constLine(0, y));
+        auto oLine = reinterpret_cast<QRgb *>(diff.line(0, y));
+
+        for (int x = 0; x < width; x++) {
+            int r1 = qRed(iLine1[x]);
+            int g1 = qGreen(iLine1[x]);
+            int b1 = qBlue(iLine1[x]);
+
+            int r2 = qRed(iLine2[x]);
+            int g2 = qGreen(iLine2[x]);
+            int b2 = qBlue(iLine2[x]);
+
+            int dr = r1 - r2;
+            int dg = g1 - g2;
+            int db = b1 - b2;
+
+            int alpha = dr * dr + dg * dg + db * db;
+            alpha = int(sqrt(alpha / 3.0));
+
+            if (mode == FireElement::FireModeSoft)
+                alpha = alpha < threshold? 0: alpha;
+            else
+                alpha = alpha < threshold?
+                          0: QRandomGenerator::global()->bounded(255 - alphaVariation, 256);
+
+            int gray = qGray(iLine2[x]);
+            alpha = gray < lumaThreshold? 0: alpha;
+            int b = QRandomGenerator::global()->bounded(255 - colors, 256);
+            oLine[x] = qRgba(0, 0, b, alpha);
+        }
+    }
+
+    return diff;
+}
+
+AkVideoPacket FireElementPrivate::zoomImage(const AkVideoPacket &src, qreal factor)
+{
+    auto ocaps = src.caps();
+    ocaps.setHeight(qRound((1.0 + factor) * src.caps().height()));
+    this->m_videoConverter.setOutputCaps(ocaps);
+
+    this->m_videoConverter.begin();
+    this->m_videoConverter.setCacheIndex(1);
+    auto scaled = this->m_videoConverter.convert(src);
+    this->m_videoConverter.end();
+
+    AkVideoPacket zoom(src.caps(), true);
+    zoom.copyMetadata(src);
+
+    this->m_videoMixer.begin(&zoom);
+    this->m_videoMixer.setCacheIndex(2);
+    this->m_videoMixer.draw(0,
+                            src.caps().height() - scaled.caps().height(),
+                            scaled);
+    this->m_videoMixer.end();
+
+    return zoom;
+}
+
+void FireElementPrivate::coolImage(AkVideoPacket &src, int colorDiff)
+{
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<QRgb *>(src.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = srcLine[x];
+            int b = qBound(0, qBlue(pixel) + colorDiff, 255);
+            pixel = qRgba(0, 0, b, qAlpha(pixel));
+        }
+    }
+}
+
+void FireElementPrivate::imageAlphaDiff(AkVideoPacket &src, int alphaDiff)
+{
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<QRgb *>(src.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = srcLine[x];
+            int b = qBlue(pixel);
+            int a = qBound(0, qAlpha(pixel) + alphaDiff, 255);
+            pixel = qRgba(0, 0, b, a);
+        }
+    }
+}
+
+void FireElementPrivate::dissolveImage(AkVideoPacket &src, qreal amount)
+{
+    auto videoArea = qint64(src.caps().width()) * qint64(src.caps().height());
+    auto n = qRound64(amount * videoArea);
+
+    for (qint64 i = 0; i < n; i++) {
+        int x = QRandomGenerator::global()->bounded(src.caps().width());
+        int y = QRandomGenerator::global()->bounded(src.caps().height());
+        auto pixel = src.pixel<QRgb>(0, x, y);
+        int b = qBlue(pixel);
+        int a = QRandomGenerator::global()->bounded(qAlpha(pixel) + 1);
+        src.setPixel(0, x, y, qRgba(0, 0, b, a));
+    }
+}
+
+AkVideoPacket FireElementPrivate::burn(const AkVideoPacket &src,
+                                       const QRgb *palette)
+{
+    AkVideoPacket dest(src.caps());
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<QRgb *>(dest.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = srcLine[x];
+            int index = qBlue(srcLine[x]);
+            auto &palPixel = palette[index];
+            int r = qRed(palPixel);
+            int g = qGreen(palPixel);
+            int b = qBlue(palPixel);
+
+            dstLine[x] = qRgba(r, g, b, qAlpha(pixel));
+        }
+    }
+
+    return dest;
+}
+
+void FireElementPrivate::createPalette()
+{
+    for (int i = 0; i < 128; i++)
+        this->m_palette[i] = qRgb(255,
+                                  (3 * i +  128) >> 1,
+                                  i >> 1);
+
+    for (int i = 128; i < 256; i++)
+        this->m_palette[i] = qRgb(255,
+                                  255,
+                                  (3 * i - 256) >> 1);
+}
+
 #include "moc_fireelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Fire/src/fireelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Fire/src/fireelement.h
@@ -27,8 +27,7 @@ class FireElementPrivate;
 class FireElement: public AkElement
 {
     Q_OBJECT
-    Q_ENUMS(FireMode)
-    Q_PROPERTY(QString mode
+    Q_PROPERTY(FireMode mode
                READ mode
                WRITE setMode
                RESET resetMode
@@ -85,11 +84,12 @@ class FireElement: public AkElement
             FireModeSoft,
             FireModeHard
         };
+        Q_ENUM(FireMode)
 
         FireElement();
         ~FireElement();
 
-        Q_INVOKABLE QString mode() const;
+        Q_INVOKABLE FireMode mode() const;
         Q_INVOKABLE int cool() const;
         Q_INVOKABLE qreal dissolve() const;
         Q_INVOKABLE int blur() const;
@@ -104,13 +104,13 @@ class FireElement: public AkElement
         FireElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
-        void modeChanged(const QString &mode);
+        void modeChanged(FireMode mode);
         void coolChanged(int cool);
         void dissolveChanged(qreal dissolve);
         void blurChanged(int blur);
@@ -122,7 +122,7 @@ class FireElement: public AkElement
         void nColorsChanged(int nColors);
 
     public slots:
-        void setMode(const QString &mode);
+        void setMode(const FireMode &mode);
         void setCool(int cool);
         void setDissolve(qreal dissolve);
         void setBlur(int blur);
@@ -144,4 +144,9 @@ class FireElement: public AkElement
         void resetNColors();
 };
 
+Q_DECL_EXPORT QDataStream &operator >>(QDataStream &istream, FireElement::FireMode &mode);
+Q_DECL_EXPORT QDataStream &operator <<(QDataStream &ostream, FireElement::FireMode mode);
+
+Q_DECLARE_METATYPE(FireElement::FireMode)
+
 #endif // FIREELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Flip/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Flip/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Flip
 target_compile_definitions(Flip PRIVATE AVKYS_PLUGIN_FLIP)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Flip avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Flip RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Flip/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Flip/share/qml/main.qml
@@ -25,20 +25,24 @@ GridLayout {
     columns: 2
 
     Label {
+        id: txtFlipHorizontally
         text: qsTr("Flip horizontally")
         Layout.fillWidth: true
     }
     Switch {
         checked: Flip.horizontalFlip
+        Accessible.name: txtFlipHorizontally.text
 
         onCheckedChanged: Flip.horizontalFlip = checked
     }
     Label {
+        id: txtFlipVertically
         text: qsTr("Flip vertically")
         Layout.fillWidth: true
     }
     Switch {
         checked: Flip.verticalFlip
+        Accessible.name: txtFlipVertically.text
 
         onCheckedChanged: Flip.verticalFlip = checked
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Flip/src/flip.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Flip/src/flip.h
@@ -29,8 +29,8 @@ class Flip: public QObject, public AkPlu
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // FLIP_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Flip/src/flipelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Flip/src/flipelement.cpp
@@ -17,9 +17,10 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoformatspec.h>
 #include <akvideopacket.h>
 
 #include "flipelement.h"
@@ -29,6 +30,14 @@ class FlipElementPrivate
     public:
         bool m_horizontalFlip {false};
         bool m_verticalFlip {false};
+
+        inline void copy(quint8 *dst,
+                         const quint8 *src,
+                         size_t bytes) const
+        {
+            for (size_t i = 0; i < bytes; ++i)
+                dst[i] = src[i];
+        }
 };
 
 FlipElement::FlipElement(): AkElement()
@@ -69,14 +78,72 @@ void FlipElement::controlInterfaceConfig
 
 AkPacket FlipElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    if (!packet || (!this->d->m_horizontalFlip && !this->d->m_verticalFlip)) {
+        if (packet)
+            emit this->oStream(packet);
+
+        return packet;
+    }
+
+    AkVideoPacket oPacket(packet.caps());
+    oPacket.copyMetadata(packet);
+
+    if (this->d->m_horizontalFlip && this->d->m_verticalFlip) {
+        auto specs = AkVideoCaps::formatSpecs(packet.caps().format());
+
+        for (int plane = 0; plane < packet.planes(); ++plane) {
+            auto pixelSize = specs.plane(plane).pixelSize();
+            auto width = packet.caps().width() >> oPacket.widthDiv(plane);
+
+            for (int ys = 0, yd = packet.caps().height() - 1;
+                 ys < packet.caps().height();
+                 ++ys, --yd) {
+                auto srcLine = packet.constLine(plane, ys);
+                auto dstLine = oPacket.line(plane, yd);
+
+                for (int xs = 0, xd = width - 1; xs < width; ++xs, --xd)
+                    this->d->copy(dstLine + pixelSize * xd,
+                                  srcLine + pixelSize * xs,
+                                  pixelSize);
+            }
+        }
+    } else if (this->d->m_horizontalFlip) {
+        auto specs = AkVideoCaps::formatSpecs(packet.caps().format());
+
+        for (int plane = 0; plane < packet.planes(); ++plane) {
+            auto pixelSize = specs.plane(plane).pixelSize();
+            auto width = packet.caps().width() >> oPacket.widthDiv(plane);
+
+            for (int y = 0; y < packet.caps().height(); ++y) {
+                auto srcLine = packet.constLine(plane, y);
+                auto dstLine = oPacket.line(plane, y);
+
+                for (int xs = 0, xd = width - 1; xs < width; ++xs, --xd)
+                    this->d->copy(dstLine + pixelSize * xd,
+                                  srcLine + pixelSize * xs,
+                                  pixelSize);
+            }
+        }
+    } else if (this->d->m_verticalFlip) {
+        for (int plane = 0; plane < packet.planes(); ++plane) {
+            auto iLineSize = packet.lineSize(plane);
+            auto oLineSize = oPacket.lineSize(plane);
+            auto lineSize = qMin(iLineSize, oLineSize);
+
+            for (int ys = 0, yd = packet.caps().height() - 1;
+                 ys < packet.caps().height();
+                 ++ys, --yd) {
+                auto srcLine = packet.constLine(plane, ys);
+                auto dstLine = oPacket.line(plane, yd);
+                memcpy(dstLine, srcLine, lineSize);
+            }
+        }
+    }
 
-    if (src.isNull())
-        return {};
+    if (oPacket)
+        emit this->oStream(oPacket);
 
-    auto oPacket = AkVideoPacket::fromImage(src.mirrored(this->d->m_horizontalFlip,
-                                                         this->d->m_verticalFlip), packet);
-    akSend(oPacket)
+    return oPacket;
 }
 
 void FlipElement::setHorizontalFlip(bool horizontalFlip)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Flip/src/flipelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Flip/src/flipelement.h
@@ -49,10 +49,10 @@ class FlipElement: public AkElement
         FlipElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void horizontalFlipChanged(bool horizontalFlip);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FrameOverlap/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/FrameOverlap/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(FrameOverlap
 target_compile_definitions(FrameOverlap PRIVATE AVKYS_PLUGIN_FRAMEOVERLAP)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(FrameOverlap avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS FrameOverlap RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FrameOverlap/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/FrameOverlap/share/qml/main.qml
@@ -26,22 +26,25 @@ GridLayout {
 
     // Number of frames to store.
     Label {
-        text: qsTr("N° of frames")
+        id: txtNFrames
+        text: qsTr("Number of frames")
     }
     TextField {
         text: FrameOverlap.nFrames
-        placeholderText: qsTr("N° of frames")
+        placeholderText: qsTr("Number of frames")
         selectByMouse: true
         validator: RegExpValidator {
             regExp: /d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtNFrames.text
 
         onTextChanged: FrameOverlap.nFrames = Number(text)
     }
 
     // Stride.
     Label {
+        id: txtStride
         text: qsTr("Stride")
     }
     TextField {
@@ -52,6 +55,7 @@ GridLayout {
             regExp: /d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtStride.text
 
         onTextChanged: FrameOverlap.stride = Number(text)
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FrameOverlap/src/frameoverlap.h
+++ webcamoid-9.0.0/libAvKys/Plugins/FrameOverlap/src/frameoverlap.h
@@ -29,8 +29,8 @@ class FrameOverlap: public QObject, publ
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // FRAMEOVERLAP_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FrameOverlap/src/frameoverlapelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/FrameOverlap/src/frameoverlapelement.cpp
@@ -17,20 +17,33 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
+#include <QSize>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "frameoverlapelement.h"
 
+struct SumPixel
+{
+    quint64 r;
+    quint64 g;
+    quint64 b;
+    quint64 a;
+};
+
 class FrameOverlapElementPrivate
 {
     public:
         int m_nFrames {16};
         int m_stride {4};
-        QVector<QImage> m_frames;
+        QVector<AkVideoPacket> m_frames;
         QSize m_frameSize;
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 };
 
 FrameOverlapElement::FrameOverlapElement(): AkElement()
@@ -71,64 +84,93 @@ void FrameOverlapElement::controlInterfa
 
 AkPacket FrameOverlapElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull())
-        return AkPacket();
+    if (!src)
+        return {};
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
+    QSize frameSize(src.caps().width(), src.caps().height());
 
-    if (src.size() != this->d->m_frameSize) {
+    if (frameSize != this->d->m_frameSize) {
         this->d->m_frames.clear();
-        this->d->m_frameSize = src.size();
+        this->d->m_frameSize = frameSize;
     }
 
-    this->d->m_frames << src.copy();
+    this->d->m_frames << src;
     int diff = this->d->m_frames.size() - this->d->m_nFrames;
 
     for (int i = 0; i < diff; i++)
         this->d->m_frames.removeFirst();
 
-    int stride = this->d->m_stride > 0? this->d->m_stride: 1;
+    int stride = qMax(this->d->m_stride, 1);
 
-    for (int y = 0; y < oFrame.height(); y++) {
-        QRgb *dstBits = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
 
-        for (int x = 0; x < oFrame.width(); x++) {
-            int r = 0;
-            int g = 0;
-            int b = 0;
-            int a = 0;
-            int n = 0;
-
-            for (int frame = this->d->m_frames.size() - 1;
-                 frame >= 0;
-                 frame -= stride) {
-                QRgb pixel = this->d->m_frames[frame].pixel(x, y);
-
-                r += qRed(pixel);
-                g += qGreen(pixel);
-                b += qBlue(pixel);
-                a += qAlpha(pixel);
-                n++;
+    auto sumFrameSize = size_t(dst.caps().width())
+                        * size_t(dst.caps().height());
+    auto sumFrame = new SumPixel[sumFrameSize];
+    memset(sumFrame, 0, sumFrameSize * sizeof(SumPixel));
+    int nFrames = 0;
+
+    for (int i = this->d->m_frames.size() - 1;
+         i >= 0;
+         i -= stride) {
+        auto &frame = this->d->m_frames[i];
+        auto dstLine = sumFrame;
+
+        for (int y = 0; y < dst.caps().height(); y++) {
+            auto srcLine = reinterpret_cast<const QRgb *>(frame.constLine(0, y));
+
+            for (int x = 0; x < dst.caps().width(); x++) {
+                auto &ipixel = srcLine[x];
+                auto &opixel = dstLine[x];
+
+                opixel.r += qRed(ipixel);
+                opixel.g += qGreen(ipixel);
+                opixel.b += qBlue(ipixel);
+                opixel.a += qAlpha(ipixel);
             }
 
-            if (n > 0) {
-                r /= n;
-                g /= n;
-                b /= n;
-                a /= n;
-
-                dstBits[x] = qRgba(r, g, b, a);
-            } else {
-                dstBits[x] = qRgba(0, 0, 0, 0);
-            }
+            dstLine += dst.caps().width();
         }
+
+        nFrames++;
+    }
+
+    if (nFrames < 1) {
+        delete [] sumFrame;
+
+        if (src)
+            emit this->oStream(src);
+
+        return src;
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    auto srcLine = sumFrame;
+
+    for (int y = 0; y < dst.caps().height(); y++) {
+        auto dstBits = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < dst.caps().width(); x++) {
+            auto &ipixel = srcLine[x];
+            dstBits[x] = qRgba(ipixel.r / nFrames,
+                               ipixel.g / nFrames,
+                               ipixel.b / nFrames,
+                               ipixel.a / nFrames);
+        }
+
+        srcLine += dst.caps().width();
+    }
+
+    delete [] sumFrame;
+
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void FrameOverlapElement::setNFrames(int nFrames)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/FrameOverlap/src/frameoverlapelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/FrameOverlap/src/frameoverlapelement.h
@@ -49,10 +49,10 @@ class FrameOverlapElement: public AkElem
         FrameOverlapElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void nFramesChanged(int nFrames);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Gamma/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Gamma/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Gamma
 target_compile_definitions(Gamma PRIVATE AVKYS_PLUGIN_GAMMA)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Gamma avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Gamma RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Gamma/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Gamma/share/qml/main.qml
@@ -46,6 +46,7 @@ GridLayout {
         from: -255
         to: 255
         Layout.fillWidth: true
+        Accessible.name: lblGamma.text
 
         onValueChanged: Gamma.gamma = value
     }
@@ -56,6 +57,7 @@ GridLayout {
         to: sldGamma.to
         stepSize: sldGamma.stepSize
         editable: true
+        Accessible.name: lblGamma.text
 
         onValueChanged: Gamma.gamma = Number(value)
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Gamma/src/gamma.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Gamma/src/gamma.h
@@ -29,8 +29,8 @@ class Gamma: public QObject, public AkPl
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // GAMMA_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Gamma/src/gammaelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Gamma/src/gammaelement.cpp
@@ -17,10 +17,13 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
 #include <QtMath>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "gammaelement.h"
@@ -29,19 +32,24 @@ class GammaElementPrivate
 {
     public:
         int m_gamma {0};
+        quint8 *m_gammaTable {nullptr};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 
-        const QVector<quint8> &gammaTable() const;
-        QVector<quint8> initGammaTable() const;
+        inline void initGammaTable();
 };
 
 GammaElement::GammaElement():
     AkElement()
 {
     this->d = new GammaElementPrivate;
+    this->d->initGammaTable();
 }
 
 GammaElement::~GammaElement()
 {
+    if (this->d->m_gammaTable)
+        delete [] this->d->m_gammaTable;
+
     delete this->d;
 }
 
@@ -75,39 +83,40 @@ AkPacket GammaElement::iVideoStream(cons
         return packet;
     }
 
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull()) {
+    if (!src) {
         if (packet)
             emit this->oStream(packet);
 
         return packet;
     }
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
-    auto dataCt = this->d->gammaTable();
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
     auto gamma = qBound(-255, this->d->m_gamma, 255);
     size_t gammaOffset = size_t(gamma + 255) << 8;
 
-    for (int y = 0; y < src.height(); y++) {
-        auto srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        auto destLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++) {
-            auto r = dataCt[gammaOffset | qRed(srcLine[x])];
-            auto g = dataCt[gammaOffset | qGreen(srcLine[x])];
-            auto b = dataCt[gammaOffset | qBlue(srcLine[x])];
-            destLine[x] = qRgba(r, g, b, qAlpha(srcLine[x]));
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = srcLine[x];
+            auto &r = this->d->m_gammaTable[gammaOffset | qRed(pixel)];
+            auto &g = this->d->m_gammaTable[gammaOffset | qGreen(pixel)];
+            auto &b = this->d->m_gammaTable[gammaOffset | qBlue(pixel)];
+            dstLine[x] = qRgba(r, g, b, qAlpha(pixel));
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
+    if (dst)
+        emit this->oStream(dst);
 
-    if (oPacket)
-        emit this->oStream(oPacket);
-
-    return oPacket;
+    return dst;
 }
 
 void GammaElement::setGamma(int gamma)
@@ -124,32 +133,29 @@ void GammaElement::resetGamma()
     this->setGamma(0);
 }
 
-const QVector<quint8> &GammaElementPrivate::gammaTable() const
-{
-    static auto gammaTable = this->initGammaTable();
-
-    return gammaTable;
-}
-
-QVector<quint8> GammaElementPrivate::initGammaTable() const
+void GammaElementPrivate::initGammaTable()
 {
-    QVector<quint8> gammaTable;
+    static const int grayLevels = 256;
+    static const int minGamma = -254;
+    static const int maxGamma = 256;
+    this->m_gammaTable = new quint8 [grayLevels * (maxGamma - minGamma + 1)];
+    size_t j = 0;
 
-    for (int i = 0; i < 256; i++) {
+    for (int i = 0; i < grayLevels; i++) {
         auto ig = uint8_t(255. * qPow(i / 255., 255));
-        gammaTable.push_back(ig);
+        this->m_gammaTable[j] = ig;
+        j++;
     }
 
-    for (int gamma = -254; gamma < 256; gamma++) {
+    for (int gamma = minGamma; gamma < maxGamma; gamma++) {
         double k = 255. / (gamma + 255);
 
-        for (int i = 0; i < 256; i++) {
+        for (int i = 0; i < grayLevels; i++) {
             auto ig = uint8_t(255. * qPow(i / 255., k));
-            gammaTable << ig;
+            this->m_gammaTable[j] = ig;
+            j++;
         }
     }
-
-    return gammaTable;
 }
 
 #include "moc_gammaelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Gamma/src/gammaelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Gamma/src/gammaelement.h
@@ -43,10 +43,10 @@ class GammaElement: public AkElement
         GammaElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void gammaChanged(int gamma);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/GrayScale/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/GrayScale/CMakeLists.txt
@@ -57,7 +57,6 @@ target_include_directories(GrayScale
 target_compile_definitions(GrayScale PRIVATE AVKYS_PLUGIN_GRAYSCALE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(GrayScale avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS GrayScale RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/GrayScale/src/grayscale.h
+++ webcamoid-9.0.0/libAvKys/Plugins/GrayScale/src/grayscale.h
@@ -29,8 +29,8 @@ class GrayScale: public QObject, public
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // GRAYSCALE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/GrayScale/src/grayscaleelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/GrayScale/src/grayscaleelement.cpp
@@ -18,19 +18,42 @@
  */
 
 #include <QImage>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "grayscaleelement.h"
 
+class GrayScaleElementPrivate
+{
+    public:
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_graya8pack, 0, 0, {}}};
+};
+
 GrayScaleElement::GrayScaleElement(): AkElement()
 {
+    this->d = new GrayScaleElementPrivate;
+}
+
+GrayScaleElement::~GrayScaleElement()
+{
+    delete this->d;
 }
 
 AkPacket GrayScaleElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto oPacket = packet.convert(AkVideoCaps::Format_gray);
-    akSend(oPacket)
+    this->d->m_videoConverter.begin();
+    auto dst = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!dst)
+        return {};
+
+    emit this->oStream(dst);
+
+    return dst;
 }
 
 #include "moc_grayscaleelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/GrayScale/src/grayscaleelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/GrayScale/src/grayscaleelement.h
@@ -22,15 +22,21 @@
 
 #include <akelement.h>
 
+class GrayScaleElementPrivate;
+
 class GrayScaleElement: public AkElement
 {
     Q_OBJECT
 
     public:
         GrayScaleElement();
+        ~GrayScaleElement();
+
+    private:
+        GrayScaleElementPrivate *d;
 
     protected:
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 };
 
 #endif // GRAYSCALEELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Halftone/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Halftone/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Halftone
 target_compile_definitions(Halftone PRIVATE AVKYS_PLUGIN_HALFTONE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Halftone avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Halftone RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Halftone/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Halftone/share/qml/main.qml
@@ -23,7 +23,7 @@ import Qt.labs.platform 1.1 as LABS
 import QtQuick.Layouts 1.3
 
 GridLayout {
-    columns: 2
+    columns: 3
 
     function toQrc(uri)
     {
@@ -46,13 +46,26 @@ GridLayout {
         return Qt.size(size[0], size[1])
     }
 
+    Connections {
+        target: Halftone
+
+        function onLightningChanged(lightning)
+        {
+            sldLightning.value = lightning
+            spbLightning.value = lightning
+        }
+    }
+
     Label {
+        id: txtPattern
         text: qsTr("Pattern")
     }
     ComboBox {
         id: cbxPattern
         textRole: "text"
         Layout.fillWidth: true
+        Layout.columnSpan: 2
+        Accessible.description: txtPattern.text
 
         model: ListModel {
             ListElement {
@@ -104,7 +117,7 @@ GridLayout {
         onCurrentIndexChanged: Halftone.pattern = cbxPattern.model.get(currentIndex).pattern
     }
     ColumnLayout {
-        Layout.columnSpan: 2
+        Layout.columnSpan: 3
 
         RowLayout {
             Image {
@@ -113,14 +126,15 @@ GridLayout {
                 fillMode: Image.PreserveAspectFit
                 sourceSize.width: 16
                 sourceSize.height: 16
-                source: toQrc(txtPattern.text)
+                source: toQrc(txtBitmapPattern.text)
             }
             TextField {
-                id: txtPattern
+                id: txtBitmapPattern
                 text: Halftone.pattern
                 placeholderText: qsTr("Bitmap pattern")
                 selectByMouse: true
                 Layout.fillWidth: true
+                Accessible.name: qsTr("Image to use as pattern")
 
                 onTextChanged: {
                     for (var i = 0; i < cbxPattern.model.count; i++) {
@@ -141,6 +155,7 @@ GridLayout {
             Button {
                 text: qsTr("Search")
                 icon.source: "image://icons/search"
+                Accessible.description: qsTr("Search the image to use as pattern")
 
                 onClicked: fileDialog.open()
             }
@@ -148,6 +163,7 @@ GridLayout {
     }
 
     Label {
+        id: txtPatternSize
         text: qsTr("Pattern size")
     }
     TextField {
@@ -158,24 +174,38 @@ GridLayout {
             regExp: /-?\d+x-?\d+/
         }
         Layout.fillWidth: true
+        Layout.columnSpan: 2
+        Accessible.name: txtPatternSize.text
 
         onTextChanged: Halftone.patternSize = strToSize(text)
     }
     Label {
-        text: qsTr("Lightness")
+        id: txtLightning
+        text: qsTr("Lightning")
     }
-    TextField {
-        text: Halftone.lightness
-        placeholderText: qsTr("Lightness")
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
-        }
+    Slider {
+        id: sldLightning
+        value: Halftone.lightning
+        stepSize: 0
+        to: 255
         Layout.fillWidth: true
+        Accessible.name: txtLightning.text
+
+        onValueChanged: Halftone.lightning = value
+    }
+    SpinBox {
+        id: spbLightning
+        value: Halftone.lightning
+        to: sldLightning.to
+        stepSize: sldLightning.stepSize
+        editable: true
+        Accessible.name: txtLightning.text
 
-        onTextChanged: Halftone.lightness = Number(text)
+        onValueChanged: Halftone.lightning = Number(value)
     }
+
     Label {
+        id: txtSlope
         text: qsTr("Slope")
     }
     TextField {
@@ -186,22 +216,27 @@ GridLayout {
             regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
         }
         Layout.fillWidth: true
+        Layout.columnSpan: 2
+        Accessible.name: txtSlope.text
 
         onTextChanged: Halftone.slope = Number(text)
     }
     Label {
-        text: qsTr("Intercept")
+        id: txtInterception
+        text: qsTr("Interception")
     }
     TextField {
-        text: Halftone.intercept
+        text: Halftone.interception
         placeholderText: qsTr("Intercept")
         selectByMouse: true
         validator: RegExpValidator {
             regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
         }
         Layout.fillWidth: true
+        Layout.columnSpan: 2
+        Accessible.name: txtInterception.text
 
-        onTextChanged: Halftone.intercept = Number(text)
+        onTextChanged: Halftone.interception = Number(text)
     }
 
     LABS.FileDialog {
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Halftone/src/halftone.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Halftone/src/halftone.h
@@ -29,8 +29,8 @@ class Halftone: public QObject, public A
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // HALFTONE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Halftone/src/halftoneelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Halftone/src/halftoneelement.cpp
@@ -21,7 +21,10 @@
 #include <QQmlContext>
 #include <QMutex>
 #include <QStandardPaths>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "halftoneelement.h"
@@ -31,12 +34,13 @@ class HalftoneElementPrivate
     public:
         QString m_pattern {":/Halftone/share/patterns/ditherCluster8Matrix.bmp"};
         QSize m_patternSize;
-        qreal m_lightness {0.5};
+        int m_lightning {32};
         qreal m_slope {1.0};
-        qreal m_intercept {0.0};
+        qreal m_interception {0.0};
         QMutex m_mutex;
         QSize m_frameSize;
         QImage m_patternImage;
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 
         void updatePattern();
 };
@@ -73,9 +77,9 @@ QSize HalftoneElement::patternSize() con
     return this->d->m_patternSize;
 }
 
-qreal HalftoneElement::lightness() const
+int HalftoneElement::lightning() const
 {
-    return this->d->m_lightness;
+    return this->d->m_lightning;
 }
 
 qreal HalftoneElement::slope() const
@@ -83,9 +87,9 @@ qreal HalftoneElement::slope() const
     return this->d->m_slope;
 }
 
-qreal HalftoneElement::intercept() const
+qreal HalftoneElement::interception() const
 {
-    return this->d->m_intercept;
+    return this->d->m_interception;
 }
 
 QString HalftoneElement::controlInterfaceProvide(const QString &controlId) const
@@ -109,58 +113,64 @@ void HalftoneElement::controlInterfaceCo
 
 AkPacket HalftoneElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
+    if (!src)
+        return {};
 
     this->d->m_mutex.lock();
 
     if (this->d->m_patternImage.isNull()) {
         this->d->m_mutex.unlock();
-        akSend(packet)
+
+        if (packet)
+            emit this->oStream(packet);
+
+        return packet;
     }
 
-    QImage patternImage = this->d->m_patternImage.copy();
-    this->d->m_mutex.unlock();
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    auto lightning = this->d->m_lightning;
+    auto slope = this->d->m_slope;
+    auto interception = this->d->m_interception;
 
     // filter image
-    for (int y = 0; y < src.height(); y++) {
-        const QRgb *iLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        QRgb *oLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++) {
-            int col = x % patternImage.width();
-            int row = y % patternImage.height();
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto iLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto oLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+        int row = y % this->d->m_patternImage.height();
+        auto pattern = reinterpret_cast<const quint8 *>(this->d->m_patternImage.constScanLine(row));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            int col = x % this->d->m_patternImage.width();
+            auto &pixel = iLine[x];
 
-            int gray = qGray(iLine[x]);
-            auto pattern = reinterpret_cast<const quint8 *>(patternImage.constScanLine(row));
+            int gray = qGray(pixel);
             int threshold = pattern[col];
-            threshold = int(this->d->m_slope
-                            * threshold
-                            + this->d->m_intercept);
+            threshold = int(slope * threshold + interception);
             threshold = qBound(0, threshold, 255);
 
-            if (gray > threshold)
-                oLine[x] = iLine[x];
-            else {
-                QColor color(iLine[x]);
-
-                color.setHsl(color.hue(),
-                             color.saturation(),
-                             int(this->d->m_lightness * color.lightness()),
-                             color.alpha());
-
-                oLine[x] = color.rgba();
+            if (gray > threshold) {
+                oLine[x] = pixel;
+            } else {
+                int r = qBound(0, qRed(pixel) + lightning, 255);
+                int g = qBound(0, qGreen(pixel) + lightning, 255);
+                int b = qBound(0, qBlue(pixel) + lightning, 255);
+                oLine[x] = qRgba(r, g, b, qAlpha(pixel));
             }
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    this->d->m_mutex.unlock();
+
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void HalftoneElement::setPattern(const QString &pattern)
@@ -181,13 +191,13 @@ void HalftoneElement::setPatternSize(con
     emit this->patternSizeChanged(patternSize);
 }
 
-void HalftoneElement::setLightness(qreal lightness)
+void HalftoneElement::setLightning(int lightning)
 {
-    if (qFuzzyCompare(this->d->m_lightness, lightness))
+    if (this->d->m_lightning == lightning)
         return;
 
-    this->d->m_lightness = lightness;
-    emit this->lightnessChanged(lightness);
+    this->d->m_lightning = lightning;
+    emit this->lightningChanged(lightning);
 }
 
 void HalftoneElement::setSlope(qreal slope)
@@ -199,13 +209,13 @@ void HalftoneElement::setSlope(qreal slo
     emit this->slopeChanged(slope);
 }
 
-void HalftoneElement::setIntercept(qreal intercept)
+void HalftoneElement::setInterception(qreal interception)
 {
-    if (qFuzzyCompare(this->d->m_intercept, intercept))
+    if (qFuzzyCompare(this->d->m_interception, interception))
         return;
 
-    this->d->m_intercept = intercept;
-    emit this->interceptChanged(intercept);
+    this->d->m_interception = interception;
+    emit this->interceptionChanged(interception);
 }
 
 void HalftoneElement::resetPattern()
@@ -218,9 +228,9 @@ void HalftoneElement::resetPatternSize()
     this->setPatternSize(QSize());
 }
 
-void HalftoneElement::resetLightness()
+void HalftoneElement::resetLightning()
 {
-    this->setLightness(0.5);
+    this->setLightning(32);
 }
 
 void HalftoneElement::resetSlope()
@@ -228,9 +238,9 @@ void HalftoneElement::resetSlope()
     this->setSlope(1.0);
 }
 
-void HalftoneElement::resetIntercept()
+void HalftoneElement::resetInterception()
 {
-    this->setIntercept(0.0);
+    this->setInterception(0.0);
 }
 
 void HalftoneElementPrivate::updatePattern()
@@ -253,22 +263,10 @@ void HalftoneElementPrivate::updatePatte
         return;
     }
 
-    QSize patternSize = this->m_patternSize.isEmpty()?
-                            image.size(): this->m_patternSize;
-    QImage pattern(patternSize, QImage::Format_Indexed8);
-
-    for (int i = 0; i < 256; i++)
-        pattern.setColor(i, qRgb(i, i, i));
+    auto pattern = image.convertToFormat(QImage::Format_Grayscale8);
 
-    image = image.scaled(patternSize).convertToFormat(QImage::Format_RGB32);
-
-    for (int y = 0; y < patternSize.height(); y++) {
-        auto srcLine = reinterpret_cast<const QRgb *>(image.constScanLine(y));
-        auto dstLine = pattern.scanLine(y);
-
-        for (int x = 0; x < patternSize.width(); x++)
-            dstLine[x] = quint8(qGray(srcLine[x]));
-    }
+    if (!this->m_patternSize.isEmpty() && this->m_patternSize != image.size())
+        pattern = image.scaled(this->m_patternSize);
 
     this->m_mutex.lock();
     this->m_patternImage = pattern;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Halftone/src/halftoneelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Halftone/src/halftoneelement.h
@@ -37,21 +37,21 @@ class HalftoneElement: public AkElement
                WRITE setPatternSize
                RESET resetPatternSize
                NOTIFY patternSizeChanged)
-    Q_PROPERTY(qreal lightness
-               READ lightness
-               WRITE setLightness
-               RESET resetLightness
-               NOTIFY lightnessChanged)
+    Q_PROPERTY(int lightning
+               READ lightning
+               WRITE setLightning
+               RESET resetLightning
+               NOTIFY lightningChanged)
     Q_PROPERTY(qreal slope
                READ slope
                WRITE setSlope
                RESET resetSlope
                NOTIFY slopeChanged)
-    Q_PROPERTY(qreal intercept
-               READ intercept
-               WRITE setIntercept
-               RESET resetIntercept
-               NOTIFY interceptChanged)
+    Q_PROPERTY(qreal interception
+               READ interception
+               WRITE setInterception
+               RESET resetInterception
+               NOTIFY interceptionChanged)
 
     public:
         HalftoneElement();
@@ -59,37 +59,37 @@ class HalftoneElement: public AkElement
 
         Q_INVOKABLE QString pattern() const;
         Q_INVOKABLE QSize patternSize() const;
-        Q_INVOKABLE qreal lightness() const;
+        Q_INVOKABLE int lightning() const;
         Q_INVOKABLE qreal slope() const;
-        Q_INVOKABLE qreal intercept() const;
+        Q_INVOKABLE qreal interception() const;
 
     private:
         HalftoneElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void patternChanged(const QString &pattern);
         void patternSizeChanged(const QSize &patternSize);
-        void lightnessChanged(qreal lightness);
+        void lightningChanged(int lightning);
         void slopeChanged(qreal slope);
-        void interceptChanged(qreal intercept);
+        void interceptionChanged(qreal interception);
 
     public slots:
         void setPattern(const QString &pattern);
         void setPatternSize(const QSize &patternSize);
-        void setLightness(qreal lightness);
+        void setLightning(int lightning);
         void setSlope(qreal slope);
-        void setIntercept(qreal intercept);
+        void setInterception(qreal interception);
         void resetPattern();
         void resetPatternSize();
-        void resetLightness();
+        void resetLightning();
         void resetSlope();
-        void resetIntercept();
+        void resetInterception();
 };
 
 #endif // HALFTONEELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Hypnotic/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Hypnotic/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Hypnotic
 target_compile_definitions(Hypnotic PRIVATE AVKYS_PLUGIN_HYPNOTIC)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Hypnotic avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Hypnotic RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Hypnotic/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Hypnotic/share/qml/main.qml
@@ -20,6 +20,7 @@
 import QtQuick 2.12
 import QtQuick.Controls 2.5
 import QtQuick.Layouts 1.3
+import HypnoticElement 1.0
 
 GridLayout {
     columns: 3
@@ -49,6 +50,7 @@ GridLayout {
 
     // Marker type.
     Label {
+        id: txtMode
         text: qsTr("Mode")
     }
     ComboBox {
@@ -57,29 +59,31 @@ GridLayout {
         currentIndex: modeIndex(Hypnotic.mode)
         Layout.columnSpan: 2
         Layout.fillWidth: true
+        Accessible.description: txtMode.text
 
         model: ListModel {
             ListElement {
                 text: qsTr("Spiral 1")
-                mode: "spiral1"
+                mode: HypnoticElement.OpticModeSpiral1
             }
             ListElement {
                 text: qsTr("Spiral 2")
-                mode: "spiral2"
+                mode: HypnoticElement.OpticModeSpiral2
             }
             ListElement {
                 text: qsTr("Parabola")
-                mode: "parabola"
+                mode: HypnoticElement.OpticModeParabola
             }
             ListElement {
                 text: qsTr("Horizontal stripe")
-                mode: "horizontalStripe"
+                mode: HypnoticElement.OpticModeHorizontalStripe
             }
         }
 
         onCurrentIndexChanged: Hypnotic.mode = cbxMode.model.get(currentIndex).mode
     }
     Label {
+        id: txtSpeedIncrement
         text: qsTr("Speed increment")
     }
     TextField {
@@ -91,11 +95,13 @@ GridLayout {
         }
         Layout.columnSpan: 2
         Layout.fillWidth: true
+        Accessible.name: txtSpeedIncrement.text
 
         onTextChanged: Hypnotic.speedInc = Number(text)
     }
 
     Label {
+        id: txtThreshold
         text: qsTr("Threshold")
     }
     Slider {
@@ -104,6 +110,7 @@ GridLayout {
         stepSize: 1
         to: 255
         Layout.fillWidth: true
+        Accessible.name: txtThreshold.text
 
         onValueChanged: Hypnotic.threshold = value
     }
@@ -113,6 +120,7 @@ GridLayout {
         to: sldThreshold.to
         stepSize: sldThreshold.stepSize
         editable: true
+        Accessible.name: txtThreshold.text
 
         onValueChanged: sldThreshold.value = value
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Hypnotic/src/hypnotic.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Hypnotic/src/hypnotic.cpp
@@ -17,6 +17,8 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
+#include <QQmlEngine>
+
 #include "hypnotic.h"
 #include "hypnoticelement.h"
 
@@ -24,6 +26,9 @@ QObject *Hypnotic::create(const QString
 {
     Q_UNUSED(key)
     Q_UNUSED(specification)
+    qRegisterMetaType<HypnoticElement::OpticMode>("HypnoticOpticMode");
+    qRegisterMetaTypeStreamOperators<HypnoticElement::OpticMode>("HypnoticOpticMode");
+    qmlRegisterType<HypnoticElement>("HypnoticElement", 1, 0, "HypnoticElement");
 
     return new HypnoticElement();
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Hypnotic/src/hypnotic.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Hypnotic/src/hypnotic.h
@@ -29,8 +29,8 @@ class Hypnotic: public QObject, public A
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // HYPNOTIC_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Hypnotic/src/hypnoticelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Hypnotic/src/hypnoticelement.cpp
@@ -17,53 +17,44 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QMap>
-#include <QImage>
+#include <QDataStream>
 #include <QQmlContext>
+#include <QSize>
 #include <QtMath>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "hypnoticelement.h"
 
-using OpticModeMap = QMap<HypnoticElement::OpticMode, QString>;
-using OpticalMap = QMap<HypnoticElement::OpticMode, QImage>;
-
-inline OpticModeMap initOpticModeMap()
-{
-    OpticModeMap opticModeToStr {
-        {HypnoticElement::OpticModeSpiral1         , "spiral1"         },
-        {HypnoticElement::OpticModeSpiral2         , "spiral2"         },
-        {HypnoticElement::OpticModeParabola        , "parabola"        },
-        {HypnoticElement::OpticModeHorizontalStripe, "horizontalStripe"}
-    };
-
-    return opticModeToStr;
-}
-
-Q_GLOBAL_STATIC_WITH_ARGS(OpticModeMap, opticModeToStr, (initOpticModeMap()))
-
 class HypnoticElementPrivate
 {
     public:
         HypnoticElement::OpticMode m_mode {HypnoticElement::OpticModeSpiral1};
+        HypnoticElement::OpticMode m_currentMode {HypnoticElement::OpticModeSpiral1};
         int m_speedInc {0};
         int m_threshold {127};
         QSize m_frameSize;
-        QVector<QRgb> m_palette;
-        OpticalMap m_opticalMap;
+        QRgb m_palette[256];
+        AkVideoPacket m_opticalMap;
         quint8 m_speed {16};
         quint8 m_phase {0};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 
-        QVector<QRgb> createPalette();
-        OpticalMap createOpticalMap(const QSize &size);
-        QImage imageThreshold(const QImage &src, int threshold);
+        inline void createPalette();
+        inline AkVideoPacket createOpticalMap(const QSize &size,
+                                              HypnoticElement::OpticMode mode) const;
+        inline AkVideoPacket imageThreshold(const AkVideoPacket &src,
+                                            int threshold) const;
 };
 
 HypnoticElement::HypnoticElement(): AkElement()
 {
     this->d = new HypnoticElementPrivate;
-    this->d->m_palette = this->d->createPalette();
+    this->d->createPalette();
 }
 
 HypnoticElement::~HypnoticElement()
@@ -71,9 +62,9 @@ HypnoticElement::~HypnoticElement()
     delete this->d;
 }
 
-QString HypnoticElement::mode() const
+HypnoticElement::OpticMode HypnoticElement::mode() const
 {
-    return opticModeToStr->value(this->d->m_mode);
+    return this->d->m_mode;
 }
 
 int HypnoticElement::speedInc() const
@@ -86,86 +77,6 @@ int HypnoticElement::threshold() const
     return this->d->m_threshold;
 }
 
-QVector<QRgb> HypnoticElementPrivate::createPalette()
-{
-    QVector<QRgb> palette(256);
-
-    for (int i = 0; i < 112; i++) {
-        palette[i] = qRgb(0, 0, 0);
-        palette[i + 128] = qRgb(255, 255, 255);
-    }
-
-    for (int i = 0; i < 16; i++) {
-        QRgb color = QRgb(16 * (i + 1) - 1);
-        palette[i + 112] = qRgb(qRed(color), qGreen(color), qBlue(color));
-        color = 255 - color;
-        palette[i + 240] = qRgb(qRed(color), qGreen(color), qBlue(color));
-    }
-
-    return palette;
-}
-
-OpticalMap HypnoticElementPrivate::createOpticalMap(const QSize &size)
-{
-    OpticalMap opticalMap {
-        {HypnoticElement::OpticModeSpiral1         , QImage(size, QImage::Format_Indexed8)},
-        {HypnoticElement::OpticModeSpiral2         , QImage(size, QImage::Format_Indexed8)},
-        {HypnoticElement::OpticModeParabola        , QImage(size, QImage::Format_Indexed8)},
-        {HypnoticElement::OpticModeHorizontalStripe, QImage(size, QImage::Format_Indexed8)}
-    };
-
-    int sci = 640 / size.width();
-
-    for (int y = 0; y < size.height(); y++) {
-        qreal yy = (y - size.height() / 2.0) / size.width();
-
-        quint8 *spiral1Line =
-                opticalMap[HypnoticElement::OpticModeSpiral1].scanLine(y);
-        quint8 *spiral2Line =
-                opticalMap[HypnoticElement::OpticModeSpiral2].scanLine(y);
-        quint8 *parabolaLine =
-                opticalMap[HypnoticElement::OpticModeParabola].scanLine(y);
-        quint8 *horizontalStripeLine =
-                opticalMap[HypnoticElement::OpticModeHorizontalStripe].scanLine(y);
-
-        for (int x = 0; x < size.width(); x++) {
-            qreal xx = qreal(x) / size.width() - 0.5;
-
-            qreal r = sqrt(xx * xx + yy * yy);
-            qreal at = atan2(xx, yy);
-
-            spiral1Line[x] = (uint((at / M_PI * 256) + (r * 4000))) & 255;
-
-            int j = int(r * 300 / 32);
-            qreal rr = r * 300 - j * 32;
-
-            j *= 64;
-            j += (rr > 28.0)? qRound((rr - 28.0) * 16.0): 0;
-
-            spiral2Line[x] = (uint((at / M_PI * 4096) + (r * 1600) - j)) & 255;
-            parabolaLine[x] = (uint(yy / (xx * xx * 0.3 + 0.1) * 400)) & 255;
-            horizontalStripeLine[x] = quint8(x * 8 * sci);
-        }
-    }
-
-    return opticalMap;
-}
-
-QImage HypnoticElementPrivate::imageThreshold(const QImage &src, int threshold)
-{
-    QImage diff(src.size(), QImage::Format_Grayscale8);
-
-    for (int y = 0; y < src.height(); y++) {
-        const QRgb *srcBits = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        quint8 *diffBits = diff.scanLine(y);
-
-        for (int x = 0; x < src.width(); x++)
-            diffBits[x] = qGray(srcBits[x]) >= threshold? 255: 0;
-    }
-
-    return diff;
-}
-
 QString HypnoticElement::controlInterfaceProvide(const QString &controlId) const
 {
     Q_UNUSED(controlId)
@@ -184,51 +95,51 @@ void HypnoticElement::controlInterfaceCo
 
 AkPacket HypnoticElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+    QSize frameSize(src.caps().width(), src.caps().height());
 
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
-
-    if (src.size() != this->d->m_frameSize) {
+    if (frameSize != this->d->m_frameSize
+        || this->d->m_currentMode != this->d->m_mode) {
         this->d->m_speed = 16;
         this->d->m_phase = 0;
-        this->d->m_opticalMap = this->d->createOpticalMap(src.size());
-        this->d->m_frameSize = src.size();
+        this->d->m_opticalMap = this->d->createOpticalMap(frameSize, this->d->m_mode);
+        this->d->m_frameSize = frameSize;
+        this->d->m_currentMode = this->d->m_mode;
     }
 
-    QImage opticalMap =
-            this->d->m_opticalMap.value(this->d->m_mode,
-                                        this->d->m_opticalMap[OpticModeSpiral1]);
-
     this->d->m_speed += this->d->m_speedInc;
     this->d->m_phase -= this->d->m_speed;
+    auto diff = this->d->imageThreshold(src, this->d->m_threshold);
 
-    QImage diff = this->d->imageThreshold(src, this->d->m_threshold);
+    for (int i = 0, y = 0; y < src.caps().height(); y++) {
+        auto optLine = this->d->m_opticalMap.constLine(0, y);
+        auto diffLine = diff.constLine(0, y);
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
 
-    for (int i = 0, y = 0; y < src.height(); y++) {
-        QRgb *oLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-        auto optLine = opticalMap.constScanLine(y);
-        auto diffLine = diff.constScanLine(y);
-
-        for (int x = 0; x < src.width(); i++, x++)
-            oLine[x] = this->d->m_palette[((char(optLine[x] + this->d->m_phase)) ^ diffLine[x]) & 255];
+        for (int x = 0; x < src.caps().width(); i++, x++)
+            dstLine[x] = this->d->m_palette[(quint8(int(optLine[x]) + int(this->d->m_phase)) ^ diffLine[x]) & 255];
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
-void HypnoticElement::setMode(const QString &mode)
+void HypnoticElement::setMode(OpticMode mode)
 {
-    OpticMode opticMode = opticModeToStr->key(mode, OpticModeSpiral1);
-
-    if (this->d->m_mode == opticMode)
+    if (this->d->m_mode == mode)
         return;
 
-    this->d->m_mode = opticMode;
+    this->d->m_mode = mode;
     emit this->modeChanged(mode);
 }
 
@@ -252,7 +163,7 @@ void HypnoticElement::setThreshold(int t
 
 void HypnoticElement::resetMode()
 {
-    this->setMode("spiral1");
+    this->setMode(HypnoticElement::OpticModeSpiral1);
 }
 
 void HypnoticElement::resetSpeedInc()
@@ -265,4 +176,99 @@ void HypnoticElement::resetThreshold()
     this->setThreshold(127);
 }
 
+QDataStream &operator >>(QDataStream &istream, HypnoticElement::OpticMode &mode)
+{
+    int modeInt;
+    istream >> modeInt;
+    mode = static_cast<HypnoticElement::OpticMode>(modeInt);
+
+    return istream;
+}
+
+QDataStream &operator <<(QDataStream &ostream, HypnoticElement::OpticMode mode)
+{
+    ostream << static_cast<int>(mode);
+
+    return ostream;
+}
+
+void HypnoticElementPrivate::createPalette()
+{
+    for (int i = 0; i < 112; i++) {
+        this->m_palette[i] = qRgb(0, 0, 0);
+        this->m_palette[i + 128] = qRgb(255, 255, 255);
+    }
+
+    for (int i = 0; i < 16; i++) {
+        auto color = QRgb(16 * (i + 1) - 1);
+        this->m_palette[i + 112] = qRgb(qRed(color), qGreen(color), qBlue(color));
+        color = 255 - color;
+        this->m_palette[i + 240] = qRgb(qRed(color), qGreen(color), qBlue(color));
+    }
+}
+
+AkVideoPacket HypnoticElementPrivate::createOpticalMap(const QSize &size,
+                                                       HypnoticElement::OpticMode mode) const
+{
+    AkVideoPacket opticalMap({AkVideoCaps::Format_gray8,
+                              size.width(),
+                              size.height(),
+                              {}});
+
+    for (int y = 0; y < size.height(); y++) {
+        auto line = opticalMap.line(0, y);
+        auto yy = qreal(2 * y - size.height()) / (2 * size.width());
+
+        for (int x = 0; x < size.width(); x++) {
+            auto xx = qreal(2 * x - size.width()) / (2 * size.width());
+            qreal r = sqrt(xx * xx + yy * yy);
+            qreal at = atan2(xx, yy);
+
+            switch (mode) {
+            case HypnoticElement::OpticModeSpiral1:
+                line[x] = quint8(256.0 * at / M_PI + 4000.0 * r);
+                break;
+            case HypnoticElement::OpticModeSpiral2: {
+                int j = int(300.0 * r / 32.0);
+                qreal rr = 300.0 * r - 32.0 * j;
+
+                j *= 64;
+                j += rr > 28.0? qRound(16.0 * (rr - 28.0)): 0;
+
+                line[x] = quint8(4096.0 * at / M_PI + 1600.0 * r - j);
+
+                break;
+            }
+            case HypnoticElement::OpticModeParabola:
+                line[x] = quint8(400.0 * yy / (0.3 * xx * xx + 0.1));
+                break;
+            case HypnoticElement::OpticModeHorizontalStripe:
+                line[x] = quint8(5120 * x / size.width());
+                break;
+            }
+        }
+    }
+
+    return opticalMap;
+}
+
+AkVideoPacket HypnoticElementPrivate::imageThreshold(const AkVideoPacket &src,
+                                                     int threshold) const
+{
+    auto ocaps = src.caps();
+    ocaps.setFormat(AkVideoCaps::Format_gray8);
+    AkVideoPacket diff(ocaps);
+    diff.copyMetadata(src);
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcBits = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto diffBits = diff.line(0, y);
+
+        for (int x = 0; x < src.caps().width(); x++)
+            diffBits[x] = qGray(srcBits[x]) >= threshold? 255: 0;
+    }
+
+    return diff;
+}
+
 #include "moc_hypnoticelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Hypnotic/src/hypnoticelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Hypnotic/src/hypnoticelement.h
@@ -27,8 +27,7 @@ class HypnoticElementPrivate;
 class HypnoticElement: public AkElement
 {
     Q_OBJECT
-    Q_ENUMS(OpticMode)
-    Q_PROPERTY(QString mode
+    Q_PROPERTY(OpticMode mode
                READ mode
                WRITE setMode
                RESET resetMode
@@ -52,11 +51,12 @@ class HypnoticElement: public AkElement
             OpticModeParabola,
             OpticModeHorizontalStripe
         };
+        Q_ENUM(OpticMode)
 
         HypnoticElement();
         ~HypnoticElement();
 
-        Q_INVOKABLE QString mode() const;
+        Q_INVOKABLE OpticMode mode() const;
         Q_INVOKABLE int speedInc() const;
         Q_INVOKABLE int threshold() const;
 
@@ -64,18 +64,18 @@ class HypnoticElement: public AkElement
         HypnoticElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
-        void modeChanged(const QString &mode);
+        void modeChanged(OpticMode mode);
         void speedIncChanged(int speedInc);
         void thresholdChanged(int threshold);
 
     public slots:
-        void setMode(const QString &mode);
+        void setMode(OpticMode mode);
         void setSpeedInc(int speedInc);
         void setThreshold(int threshold);
         void resetMode();
@@ -83,4 +83,9 @@ class HypnoticElement: public AkElement
         void resetThreshold();
 };
 
+Q_DECL_EXPORT QDataStream &operator >>(QDataStream &istream, HypnoticElement::OpticMode &mode);
+Q_DECL_EXPORT QDataStream &operator <<(QDataStream &ostream, HypnoticElement::OpticMode mode);
+
+Q_DECLARE_METATYPE(HypnoticElement::OpticMode)
+
 #endif // HYPNOTICELEMENT_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/ImageSrc/CMakeLists.txt
@@ -0,0 +1,67 @@
+# Webcamoid, webcam capture application.
+# Copyright (C) 2022  Gonzalo Exequiel Pedone
+#
+# Webcamoid is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Webcamoid is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+#
+# Web-Site: http://webcamoid.github.io/
+
+cmake_minimum_required(VERSION 3.16)
+
+project(ImageSrc LANGUAGES CXX)
+
+include(../../cmake/ProjectCommons.cmake)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+
+set(QT_COMPONENTS
+    Concurrent
+    Gui
+    Qml)
+find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS
+             ${QT_COMPONENTS}
+             REQUIRED)
+find_package(Qt${QT_VERSION_MAJOR} ${QT_MINIMUM_VERSION} COMPONENTS
+             ${QT_COMPONENTS}
+             REQUIRED)
+add_library(ImageSrc SHARED
+            src/imagesrc.h
+            src/imagesrcelement.h
+            src/imagesrc.cpp
+            src/imagesrcelement.cpp
+            ImageSrc.qrc
+            pspec.json)
+
+if (WIN32)
+    set_target_properties(ImageSrc PROPERTIES
+                          RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
+elseif (NOT ANDROID)
+    set_target_properties(ImageSrc PROPERTIES
+                          LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
+endif ()
+
+add_dependencies(ImageSrc avkys)
+target_include_directories(ImageSrc
+                           PRIVATE ../../Lib/src)
+target_compile_definitions(ImageSrc PRIVATE AVKYS_PLUGIN_IMAGESRC)
+list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
+target_link_libraries(ImageSrc avkys ${QT_LIBS})
+
+if (WIN32)
+    install(TARGETS ImageSrc RUNTIME DESTINATION ${PLUGINSDIR})
+elseif (NOT ANDROID)
+    install(TARGETS ImageSrc DESTINATION ${PLUGINSDIR})
+endif ()
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/ImageSrc/ImageSrc.qrc
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/ImageSrc">
+        <file>share/qml/main.qml</file>
+    </qresource>
+</RCC>
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/ImageSrc/pspec.json
@@ -0,0 +1,12 @@
+{
+    "type": "WebcamoidPluginsCollection",
+    "plugins": [
+        {
+            "name": "ImageSrc",
+            "description": "Use a static picture as a source",
+            "id": "VideoSource/ImageSrc",
+            "implements": ["Element"],
+            "type": "qtplugin"
+        }
+    ]
+}
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/ImageSrc/share/qml/main.qml
@@ -0,0 +1,102 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+import QtQuick 2.12
+import QtQuick.Controls 2.5
+import QtQuick.Layouts 1.3
+import Ak 1.0
+
+GridLayout {
+    columns: 2
+
+    Component.onCompleted: {
+        var fps = AkFrac.create(ImageSrc.fps).value;
+        var q = Infinity;
+        var index = -1;
+
+        for (var i in cbxFps.model) {
+            var diff = Math.abs(cbxFps.model[i] - fps);
+
+            if (diff < q) {
+                index = i;
+                q = diff;
+            }
+        }
+
+        cbxFps.currentIndex = index;
+        ImageSrc.fps = AkFrac.createVariant(cbxFps.model[index], 1);
+    }
+
+    Label {
+        id: txtForceFrameRate
+        text: qsTr("Force frame rate")
+        visible: ImageSrc.isAnimated
+    }
+    RowLayout {
+        visible: ImageSrc.isAnimated
+
+        Label {
+            Layout.fillWidth: true
+        }
+        Switch {
+            checked: ImageSrc.forceFps
+            Accessible.name: txtForceFrameRate.text
+
+            onCheckedChanged: ImageSrc.forceFps = checked
+        }
+    }
+    Label {
+        id: lblFps
+        text: qsTr("Frame rate")
+        enabled: !ImageSrc.isAnimated
+                 || (ImageSrc.isAnimated && ImageSrc.forceFps)
+    }
+    ComboBox {
+        id: cbxFps
+        Accessible.description: lblFps.text
+        currentIndex: 10
+        Layout.fillWidth: true
+        enabled: !ImageSrc.isAnimated
+                 || (ImageSrc.isAnimated && ImageSrc.forceFps)
+        model: [300,
+                240,
+                144,
+                120,
+                100,
+                90,
+                72,
+                60,
+                50,
+                48,
+                30,
+                25,
+                24,
+                20,
+                15,
+                10,
+                5,
+                2,
+                1]
+
+        onCurrentIndexChanged: {
+            if (currentIndex > -1)
+                ImageSrc.fps = AkFrac.createVariant(model[currentIndex], 1);
+        }
+    }
+}
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/ImageSrc/src/imagesrc.cpp
@@ -0,0 +1,36 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include "imagesrc.h"
+#include "imagesrcelement.h"
+
+QObject *ImageSrc::create(const QString &key, const QString &specification)
+{
+    Q_UNUSED(key)
+    Q_UNUSED(specification)
+
+    return new ImageSrcElement();
+}
+
+QStringList ImageSrc::keys() const
+{
+    return {};
+}
+
+#include "moc_imagesrc.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/ImageSrc/src/imagesrc.h
@@ -0,0 +1,36 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef IMAGESRC_H
+#define IMAGESRC_H
+
+#include <akplugin.h>
+
+class ImageSrc: public QObject, public AkPlugin
+{
+    Q_OBJECT
+    Q_INTERFACES(AkPlugin)
+    Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
+
+    public:
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
+};
+
+#endif // IMAGESRC_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/ImageSrc/src/imagesrcelement.cpp
@@ -0,0 +1,455 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QFileInfo>
+#include <QImage>
+#include <QImageReader>
+#include <QQmlContext>
+#include <QSettings>
+#include <QtConcurrent>
+#include <ak.h>
+#include <akcaps.h>
+#include <akfrac.h>
+#include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideopacket.h>
+
+#include "imagesrcelement.h"
+
+using ImageToPixelFormatMap = QMap<QImage::Format, AkVideoCaps::PixelFormat>;
+
+inline ImageToPixelFormatMap initImageToPixelFormatMap()
+{
+    ImageToPixelFormatMap imageToAkFormat {
+        {QImage::Format_RGB32     , AkVideoCaps::Format_0rgbpack},
+        {QImage::Format_ARGB32    , AkVideoCaps::Format_argbpack},
+        {QImage::Format_RGB16     , AkVideoCaps::Format_rgb565  },
+        {QImage::Format_RGB555    , AkVideoCaps::Format_rgb555  },
+        {QImage::Format_RGB888    , AkVideoCaps::Format_rgb24   },
+        {QImage::Format_RGB444    , AkVideoCaps::Format_rgb444  },
+        {QImage::Format_Grayscale8, AkVideoCaps::Format_gray8   }
+    };
+
+    return imageToAkFormat;
+}
+
+Q_GLOBAL_STATIC_WITH_ARGS(ImageToPixelFormatMap, imageToAkFormat, (initImageToPixelFormatMap()))
+
+class ImageSrcElementPrivate
+{
+    public:
+        ImageSrcElement *self;
+        AkFrac m_fps {30000, 1001};
+        qint64 m_id {-1};
+        QThreadPool m_threadPool;
+        QFuture<void> m_framesThreadStatus;
+        QFuture<void> m_threadStatus;
+        QImageReader m_imageReader;
+        QReadWriteLock m_fpsMutex;
+        QReadWriteLock m_imageReaderMutex;
+        bool m_forceFps {false};
+        bool m_threadedRead {true};
+        bool m_run {false};
+
+        explicit ImageSrcElementPrivate(ImageSrcElement *self);
+        void readFrame();
+        void sendPacket(const AkPacket &packet);
+};
+
+ImageSrcElement::ImageSrcElement():
+    AkMultimediaSourceElement()
+{
+    this->d = new ImageSrcElementPrivate(this);
+}
+
+ImageSrcElement::~ImageSrcElement()
+{
+    delete this->d;
+}
+
+QStringList ImageSrcElement::medias()
+{
+    QStringList medias;
+    this->d->m_imageReaderMutex.lockForRead();
+
+    if (!this->d->m_imageReader.fileName().isEmpty())
+        medias << this->d->m_imageReader.fileName();
+
+    this->d->m_imageReaderMutex.unlock();
+
+    return medias;
+}
+
+QString ImageSrcElement::media() const
+{
+    this->d->m_imageReaderMutex.lockForRead();
+    auto fileName = this->d->m_imageReader.fileName();
+    this->d->m_imageReaderMutex.unlock();
+
+    return fileName;
+}
+
+QList<int> ImageSrcElement::streams()
+{
+    this->d->m_imageReaderMutex.lockForRead();
+    auto isFileNameEmpty = this->d->m_imageReader.fileName().isEmpty();
+    this->d->m_imageReaderMutex.unlock();
+
+    if (isFileNameEmpty)
+        return {};
+
+    return {0};
+}
+
+int ImageSrcElement::defaultStream(AkCaps::CapsType type)
+{
+    if (type == AkCaps::CapsVideo)
+        return 0;
+
+    return -1;
+}
+
+QString ImageSrcElement::description(const QString &media)
+{
+    this->d->m_imageReaderMutex.lockForRead();
+    auto fileName = this->d->m_imageReader.fileName();
+    this->d->m_imageReaderMutex.unlock();
+
+    if (media.isEmpty() || fileName != media)
+        return {};
+
+    return QFileInfo(media).baseName();
+}
+
+AkCaps ImageSrcElement::caps(int stream)
+{
+    this->d->m_imageReaderMutex.lockForRead();
+    auto isFileNameEmpty = this->d->m_imageReader.fileName().isEmpty();
+    this->d->m_imageReaderMutex.unlock();
+
+    if (stream != 0 || isFileNameEmpty)
+        return {};
+
+    this->d->m_imageReaderMutex.lockForRead();
+    auto size = this->d->m_imageReader.size();
+    this->d->m_imageReaderMutex.unlock();
+
+    this->d->m_fpsMutex.lockForRead();
+    AkVideoCaps caps(AkVideoCaps::Format_rgb24,
+                     size.width(),
+                     size.height(),
+                     this->d->m_fps);
+    this->d->m_fpsMutex.unlock();
+
+    return caps;
+}
+
+bool ImageSrcElement::isAnimated() const
+{
+    this->d->m_imageReaderMutex.lockForRead();
+    auto supportsAnimation = this->d->m_imageReader.supportsAnimation();
+    this->d->m_imageReaderMutex.unlock();
+
+    return supportsAnimation;
+}
+
+bool ImageSrcElement::forceFps() const
+{
+    return this->d->m_forceFps;
+}
+
+AkFrac ImageSrcElement::fps() const
+{
+    this->d->m_fpsMutex.lockForRead();
+    auto fps = this->d->m_fps;
+    this->d->m_fpsMutex.unlock();
+
+    return fps;
+}
+
+QStringList ImageSrcElement::supportedFormats() const
+{
+    auto formats = QImageReader::supportedImageFormats();
+
+    return QStringList(formats.begin(), formats.end());
+}
+
+QString ImageSrcElement::controlInterfaceProvide(const QString &controlId) const
+{
+    Q_UNUSED(controlId)
+
+    return QString("qrc:/ImageSrc/share/qml/main.qml");
+}
+
+void ImageSrcElement::controlInterfaceConfigure(QQmlContext *context,
+                                                const QString &controlId) const
+{
+    Q_UNUSED(controlId)
+
+    context->setContextProperty("ImageSrc", const_cast<QObject *>(qobject_cast<const QObject *>(this)));
+    context->setContextProperty("controlId", this->objectName());
+}
+
+void ImageSrcElement::setForceFps(bool forceFps)
+{
+    if (this->d->m_forceFps == forceFps)
+        return;
+
+    this->d->m_forceFps = forceFps;
+    emit this->forceFpsChanged(forceFps);
+}
+
+void ImageSrcElement::setFps(const AkFrac &fps)
+{
+    this->d->m_fpsMutex.lockForWrite();
+
+    if (this->d->m_fps == fps) {
+        this->d->m_fpsMutex.unlock();
+
+        return;
+    }
+
+    this->d->m_fps = fps;
+    this->d->m_fpsMutex.unlock();
+
+    QSettings settings;
+    settings.beginGroup("ImageSrc");
+    settings.setValue("fps", fps.toString());
+    settings.endGroup();
+
+    emit this->fpsChanged(fps);
+}
+
+void ImageSrcElement::resetForceFps()
+{
+    this->setForceFps(false);
+}
+
+void ImageSrcElement::resetFps()
+{
+    this->setFps({});
+}
+
+void ImageSrcElement::setMedia(const QString &media)
+{
+    this->d->m_imageReaderMutex.lockForRead();
+    auto fileName = this->d->m_imageReader.fileName();
+    this->d->m_imageReaderMutex.unlock();
+
+    if (fileName == media)
+        return;
+
+    auto state = this->state();
+    this->setState(AkElement::ElementStateNull);
+
+    this->d->m_imageReaderMutex.lockForWrite();
+    auto size = this->d->m_imageReader.size();
+    auto isAnimation = this->d->m_imageReader.supportsAnimation();
+    this->d->m_imageReader.setFileName(media);
+    this->d->m_imageReaderMutex.unlock();
+
+    if (!media.isEmpty())
+        this->setState(state);
+
+    emit this->mediaChanged(media);
+
+    this->d->m_imageReaderMutex.lockForRead();
+    auto curSize = this->d->m_imageReader.size();
+    auto curIsAnimation = this->d->m_imageReader.supportsAnimation();
+    this->d->m_imageReaderMutex.unlock();
+
+    if (size != curSize)
+        emit this->sizeChanged(curSize);
+
+    if (isAnimation != curIsAnimation)
+        emit this->isAnimatedChanged(curIsAnimation);
+}
+
+void ImageSrcElement::resetMedia()
+{
+    this->setMedia({});
+}
+
+bool ImageSrcElement::setState(AkElement::ElementState state)
+{
+    this->d->m_imageReaderMutex.lockForRead();
+    auto isFileNameEmpty = this->d->m_imageReader.fileName().isEmpty();
+    this->d->m_imageReaderMutex.unlock();
+
+    if (isFileNameEmpty)
+        return false;
+
+    auto curState = this->state();
+
+    switch (curState) {
+    case AkElement::ElementStateNull: {
+        switch (state) {
+        case AkElement::ElementStatePaused:
+            return AkElement::setState(state);
+        case AkElement::ElementStatePlaying:
+            this->d->m_id = Ak::id();
+            this->d->m_run = true;
+            this->d->m_framesThreadStatus =
+                    QtConcurrent::run(&this->d->m_threadPool,
+                                      this->d,
+                                      &ImageSrcElementPrivate::readFrame);
+
+            return AkElement::setState(state);
+        case AkElement::ElementStateNull:
+            break;
+        }
+
+        break;
+    }
+    case AkElement::ElementStatePaused: {
+        switch (state) {
+        case AkElement::ElementStateNull:
+            return AkElement::setState(state);
+        case AkElement::ElementStatePlaying:
+            this->d->m_run = true;
+            this->d->m_framesThreadStatus =
+                    QtConcurrent::run(&this->d->m_threadPool,
+                                      this->d,
+                                      &ImageSrcElementPrivate::readFrame);
+
+            return AkElement::setState(state);
+        case AkElement::ElementStatePaused:
+            break;
+        }
+
+        break;
+    }
+    case AkElement::ElementStatePlaying: {
+        switch (state) {
+        case AkElement::ElementStateNull:
+        case AkElement::ElementStatePaused:
+            this->d->m_run = false;
+            this->d->m_framesThreadStatus.waitForFinished();
+
+            return AkElement::setState(state);
+        case AkElement::ElementStatePlaying:
+            break;
+        }
+
+        break;
+    }
+    }
+
+    return false;
+}
+
+ImageSrcElementPrivate::ImageSrcElementPrivate(ImageSrcElement *self):
+    self(self)
+{
+
+}
+
+void ImageSrcElementPrivate::readFrame()
+{
+    qreal delayDiff = 0.0;
+
+    while (this->m_run) {
+        this->m_imageReaderMutex.lockForRead();
+        auto image = this->m_imageReader.read();
+        this->m_imageReaderMutex.unlock();
+
+        if (image.isNull())
+            break;
+
+        if (!imageToAkFormat->contains(image.format()))
+            image = image.convertToFormat(QImage::Format_ARGB32);
+
+        this->m_fpsMutex.lockForRead();
+        auto fps = this->m_fps;
+        this->m_fpsMutex.unlock();
+
+        AkVideoCaps caps(imageToAkFormat->value(image.format()),
+                         image.width(),
+                         image.height(),
+                         fps);
+        AkVideoPacket packet(caps);
+        auto lineSize = qMin<size_t>(image.bytesPerLine(), packet.lineSize(0));
+
+        for (int y = 0; y < image.height(); ++y) {
+            auto srcLine = image.constScanLine(y);
+            auto dstLine = packet.line(0, y);
+            memcpy(dstLine, srcLine, lineSize);
+        }
+
+        auto pts = qRound64(QTime::currentTime().msecsSinceStartOfDay()
+                            * fps.value() / 1e3);
+        packet.setPts(pts);
+        packet.setTimeBase(fps.invert());
+        packet.setIndex(0);
+        packet.setId(this->m_id);
+
+        if (!this->m_threadedRead) {
+            emit self->oStream(packet);
+        } else if (!this->m_threadStatus.isRunning()) {
+            this->m_threadStatus =
+                    QtConcurrent::run(&this->m_threadPool,
+                                      this,
+                                      &ImageSrcElementPrivate::sendPacket,
+                                      packet);
+        }
+
+        this->m_imageReaderMutex.lockForRead();
+        auto isLastFrame =
+                this->m_imageReader.currentImageNumber() >= this->m_imageReader.imageCount() - 1;
+        this->m_imageReaderMutex.unlock();
+
+        if (isLastFrame) {
+            this->m_imageReaderMutex.lockForRead();
+            auto supportsAnimation = this->m_imageReader.supportsAnimation();
+            this->m_imageReaderMutex.unlock();
+
+            if (!supportsAnimation) {
+                auto delay = (1000 / fps).value() + delayDiff;
+                delayDiff = delay - qRound(delay);
+                QThread::msleep(qRound(delay));
+            }
+
+            this->m_imageReaderMutex.lockForWrite();
+            auto fileName = this->m_imageReader.fileName();
+            this->m_imageReader.setFileName({});
+            this->m_imageReader.setFileName(fileName);
+            this->m_imageReaderMutex.unlock();
+        } else {
+            if (this->m_forceFps) {
+                auto delay = (1000 / fps).value() + delayDiff;
+                delayDiff = delay - qRound(delay);
+                QThread::msleep(qRound(delay));
+            } else {
+                this->m_imageReaderMutex.lockForRead();
+                auto delay = this->m_imageReader.nextImageDelay();
+                this->m_imageReaderMutex.unlock();
+
+                if (delay > 0)
+                    QThread::msleep(delay);
+            }
+        }
+    }
+}
+
+void ImageSrcElementPrivate::sendPacket(const AkPacket &packet)
+{
+    emit self->oStream(packet);
+}
+
+#include "moc_imagesrcelement.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/ImageSrc/src/imagesrcelement.h
@@ -0,0 +1,110 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef IMAGESRCELEMENT_H
+#define IMAGESRCELEMENT_H
+
+#include <akmultimediasourceelement.h>
+
+class ImageSrcElementPrivate;
+class AkFrac;
+
+class ImageSrcElement: public AkMultimediaSourceElement
+{
+    Q_OBJECT
+    Q_PROPERTY(QStringList medias
+               READ medias
+               NOTIFY mediasChanged)
+    Q_PROPERTY(QString media
+               READ media
+               WRITE setMedia
+               RESET resetMedia
+               NOTIFY mediaChanged)
+    Q_PROPERTY(QList<int> streams
+               READ streams
+               WRITE setStreams
+               RESET resetStreams
+               NOTIFY streamsChanged)
+    Q_PROPERTY(bool loop
+               READ loop
+               WRITE setLoop
+               RESET resetLoop
+               NOTIFY loopChanged)
+    Q_PROPERTY(bool isAnimated
+               READ isAnimated
+               NOTIFY isAnimatedChanged)
+    Q_PROPERTY(bool forceFps
+               READ forceFps
+               WRITE setForceFps
+               RESET resetForceFps
+               NOTIFY forceFpsChanged)
+    Q_PROPERTY(AkFrac fps
+               READ fps
+               WRITE setFps
+               RESET resetFps
+               NOTIFY fpsChanged)
+    Q_PROPERTY(QStringList supportedFormats
+               READ supportedFormats
+               CONSTANT)
+
+    public:
+        ImageSrcElement();
+        ~ImageSrcElement();
+
+        Q_INVOKABLE QStringList medias() override;
+        Q_INVOKABLE QString media() const override;
+        Q_INVOKABLE QList<int> streams() override;
+        Q_INVOKABLE int defaultStream(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString description(const QString &media) override;
+        Q_INVOKABLE AkCaps caps(int stream) override;
+        Q_INVOKABLE bool isAnimated() const;
+        Q_INVOKABLE bool forceFps() const;
+        Q_INVOKABLE AkFrac fps() const;
+        Q_INVOKABLE QStringList supportedFormats() const;
+
+    private:
+        ImageSrcElementPrivate *d;
+
+    protected:
+        QString controlInterfaceProvide(const QString &controlId) const override;
+        void controlInterfaceConfigure(QQmlContext *context,
+                                       const QString &controlId) const override;
+
+    signals:
+        void mediasChanged(const QStringList &medias);
+        void mediaChanged(const QString &media);
+        void streamsChanged(const QList<int> &streams);
+        void loopChanged(bool loop);
+        void isAnimatedChanged(bool isAnimated);
+        void forceFpsChanged(bool forceFps);
+        void fpsChanged(const AkFrac &fps);
+        void sizeChanged(const QSize &size);
+        void error(const QString &message);
+
+    public slots:
+        void setForceFps(bool forceFps);
+        void setFps(const AkFrac &fps);
+        void resetForceFps();
+        void resetFps();
+        void setMedia(const QString &media) override;
+        void resetMedia() override;
+        bool setState(AkElement::ElementState state) override;
+};
+
+#endif // IMAGESRCELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Implode/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Implode/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Implode
 target_compile_definitions(Implode PRIVATE AVKYS_PLUGIN_IMPLODE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Implode avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Implode RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Implode/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Implode/share/qml/main.qml
@@ -22,20 +22,55 @@ import QtQuick.Controls 2.5
 import QtQuick.Layouts 1.3
 
 GridLayout {
-    columns: 2
+    columns: 3
+
+    Connections {
+        target: Implode
+
+        function onAmountChanged(amount)
+        {
+            sldAmount.value = amount
+            spbAmount.value = amount * spbAmount.multiplier
+        }
+    }
 
     Label {
+        id: txtAmount
         text: qsTr("Amount")
     }
-    TextField {
-        text: Implode.amount
-        placeholderText: qsTr("Amount")
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
-        }
+    Slider {
+        id: sldAmount
+        value: Implode.amount
+        stepSize: 0.01
+        from: -10
+        to: 10
         Layout.fillWidth: true
+        Accessible.name: txtAmount.text
 
-        onTextChanged: Implode.amount = Number(text)
+        onValueChanged: Implode.amount = value
+    }
+    SpinBox {
+        id: spbAmount
+        value: multiplier * Implode.amount
+        from: multiplier * sldAmount.from
+        to: multiplier * sldAmount.to
+        stepSize: multiplier * sldAmount.stepSize
+        editable: true
+        Accessible.name: txtAmount.text
+
+        readonly property int decimals: 2
+        readonly property int multiplier: Math.pow(10, decimals)
+
+        validator: DoubleValidator {
+            bottom: Math.min(spbAmount.from, spbAmount.to)
+            top:  Math.max(spbAmount.from, spbAmount.to)
+        }
+        textFromValue: function(value, locale) {
+            return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
+        }
+        valueFromText: function(text, locale) {
+            return Number.fromLocaleString(locale, text) * multiplier
+        }
+        onValueModified: Implode.amount = value / multiplier
     }
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Implode/src/implode.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Implode/src/implode.h
@@ -29,8 +29,8 @@ class Implode: public QObject, public Ak
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // IMPLODE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Implode/src/implodeelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Implode/src/implodeelement.cpp
@@ -17,10 +17,13 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QtMath>
 #include <QQmlContext>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "implodeelement.h"
@@ -29,6 +32,7 @@ class ImplodeElementPrivate
 {
     public:
         qreal m_amount {1.0};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 };
 
 ImplodeElement::ImplodeElement(): AkElement()
@@ -64,46 +68,52 @@ void ImplodeElement::controlInterfaceCon
 
 AkPacket ImplodeElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull())
-        return AkPacket();
+    if (!src)
+        return {};
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
 
-    int xc = src.width() >> 1;
-    int yc = src.height() >> 1;
+    int xc = src.caps().width() >> 1;
+    int yc = src.caps().height() >> 1;
     int radius = qMin(xc, yc);
+    auto amount = this->d->m_amount;
 
-    for (int y = 0; y < src.height(); y++) {
-        auto iLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        auto oLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto iLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto oLine = reinterpret_cast<QRgb *>(dst.line(0, y));
         int yDiff = y - yc;
+        int yDiff2 = yDiff * yDiff;
 
-        for (int x = 0; x < src.width(); x++) {
+        for (int x = 0; x < src.caps().width(); x++) {
             int xDiff = x - xc;
-            qreal distance = sqrt(xDiff * xDiff + yDiff * yDiff);
+            qreal distance = sqrt(xDiff * xDiff + yDiff2);
 
-            if (distance >= radius)
+            if (distance >= radius) {
                 oLine[x] = iLine[x];
-            else {
-                qreal factor = pow(distance / radius, this->d->m_amount);
+            } else {
+                qreal factor = pow(distance / radius, amount);
 
                 int xp = int(factor * xDiff + xc);
                 int yp = int(factor * yDiff + yc);
 
-                xp = qBound(0, xp, oFrame.width() - 1);
-                yp = qBound(0, yp, oFrame.height() - 1);
+                xp = qBound(0, xp, dst.caps().width() - 1);
+                yp = qBound(0, yp, dst.caps().height() - 1);
 
-                auto line = reinterpret_cast<const QRgb *>(src.constScanLine(yp));
+                auto line = reinterpret_cast<const QRgb *>(src.constLine(0, yp));
                 oLine[x] = line[xp];
             }
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void ImplodeElement::setAmount(qreal amount)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Implode/src/implodeelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Implode/src/implodeelement.h
@@ -40,10 +40,10 @@ class ImplodeElement: public AkElement
         Q_INVOKABLE qreal amount() const;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     private:
         ImplodeElementPrivate *d;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Invert/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Invert/CMakeLists.txt
@@ -57,7 +57,6 @@ target_include_directories(Invert
 target_compile_definitions(Invert PRIVATE AVKYS_PLUGIN_INVERT)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Invert avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Invert RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Invert/src/invert.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Invert/src/invert.h
@@ -29,8 +29,8 @@ class Invert: public QObject, public AkP
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // INVERT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Invert/src/invertelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Invert/src/invertelement.cpp
@@ -17,28 +17,60 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "invertelement.h"
 
+class InvertElementPrivate
+{
+    public:
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+};
+
 InvertElement::InvertElement(): AkElement()
 {
+    this->d = new InvertElementPrivate;
 }
 
-AkPacket InvertElement::iVideoStream(const AkVideoPacket &packet)
+InvertElement::~InvertElement()
 {
-    auto src = packet.toImage();
+    delete this->d;
+}
 
-    if (src.isNull())
-        return AkPacket();
+AkPacket InvertElement::iVideoStream(const AkVideoPacket &packet)
+{
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto iLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto oLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = iLine[x];;
+            oLine[x] = qRgba(255 - qRed(pixel),
+                             255 - qGreen(pixel),
+                             255 - qBlue(pixel),
+                             qAlpha(pixel));
+        }
+    }
 
-    QImage oFrame = src.convertToFormat(QImage::Format_ARGB32);
-    oFrame.invertPixels();
+    if (dst)
+        emit this->oStream(dst);
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    return dst;
 }
 
 #include "moc_invertelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Invert/src/invertelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Invert/src/invertelement.h
@@ -22,15 +22,21 @@
 
 #include <akelement.h>
 
+class InvertElementPrivate;
+
 class InvertElement: public AkElement
 {
     Q_OBJECT
 
     public:
         InvertElement();
+        ~InvertElement();
+
+    private:
+        InvertElementPrivate *d;
 
     protected:
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 };
 
 #endif // INVERTELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Life/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Life/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Life
 target_compile_definitions(Life PRIVATE AVKYS_PLUGIN_LIFE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Life avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Life RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Life/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Life/share/qml/main.qml
@@ -43,6 +43,7 @@ GridLayout {
     }
 
     Label {
+        id: txtColor
         text: qsTr("Color")
     }
     RowLayout {
@@ -56,6 +57,7 @@ GridLayout {
             //: https://en.wikipedia.org/wiki/Life-like_cellular_automaton
             title: qsTr("Choose the automata color")
             showAlphaChannel: true
+            Accessible.description: txtColor.text
 
             onCurrentColorChanged: Life.lifeColor = AkUtils.toRgba(currentColor)
         }
@@ -71,6 +73,7 @@ GridLayout {
         to: 255
         stepSize: 1
         Layout.fillWidth: true
+        Accessible.name: lblThreshold.text
 
         onValueChanged: Life.threshold = value
     }
@@ -80,11 +83,13 @@ GridLayout {
         to: sldThreshold.to
         stepSize: sldThreshold.stepSize
         editable: true
+        Accessible.name: lblThreshold.text
 
         onValueChanged: Life.threshold = value
     }
 
     Label {
+        id: txtLumaThreshold
         /*: Minimum luminance/light/white level/intensity in a gray or black and
             white picture.
 
@@ -98,6 +103,7 @@ GridLayout {
         to: 255
         stepSize: 1
         Layout.fillWidth: true
+        Accessible.name: txtLumaThreshold.text
 
         onValueChanged: Life.lumaThreshold = value
     }
@@ -107,6 +113,7 @@ GridLayout {
         to: sldLumaThreshold.to
         stepSize: sldLumaThreshold.stepSize
         editable: true
+        Accessible.name: txtLumaThreshold.text
 
         onValueChanged: Life.lumaThreshold = value
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Life/src/life.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Life/src/life.h
@@ -29,8 +29,8 @@ class Life: public QObject, public AkPlu
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // LIFE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Life/src/lifeelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Life/src/lifeelement.cpp
@@ -18,9 +18,13 @@
  */
 
 #include <QQmlContext>
+#include <QSize>
 #include <QtMath>
-#include <QPainter>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
+#include <akvideomixer.h>
 #include <akvideopacket.h>
 
 #include "lifeelement.h"
@@ -29,17 +33,18 @@ class LifeElementPrivate
 {
     public:
         QSize m_frameSize;
-        QImage m_prevFrame;
-        QImage m_lifeBuffer;
+        AkVideoPacket m_prevFrame;
+        AkVideoPacket m_lifeBuffer;
         QRgb m_lifeColor {qRgb(255, 255, 255)};
         int m_threshold {15};
         int m_lumaThreshold {15};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 
-        QImage imageDiff(const QImage &img1,
-                         const QImage &img2,
-                         int threshold,
-                         int lumaThreshold);
-        void updateLife();
+        inline AkVideoPacket imageDiff(const AkVideoPacket &img1,
+                                       const AkVideoPacket &img2,
+                                       int threshold,
+                                       int lumaThreshold) const;
+        inline void updateLife();
 };
 
 LifeElement::LifeElement(): AkElement()
@@ -85,57 +90,68 @@ void LifeElement::controlInterfaceConfig
 
 AkPacket LifeElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame = src;
-
-    if (src.size() != this->d->m_frameSize) {
-        this->d->m_lifeBuffer = QImage();
-        this->d->m_prevFrame = QImage();
-        this->d->m_frameSize = src.size();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    auto dst = src;
+    QSize frameSize(src.caps().width(), src.caps().height());
+
+    if (frameSize != this->d->m_frameSize) {
+        this->d->m_lifeBuffer = AkVideoPacket();
+        this->d->m_prevFrame = AkVideoPacket();
+        this->d->m_frameSize = frameSize;
     }
 
-    if (this->d->m_prevFrame.isNull()) {
-        this->d->m_lifeBuffer = QImage(src.size(), QImage::Format_Indexed8);
-        this->d->m_lifeBuffer.setColor(0, 0);
-        this->d->m_lifeBuffer.setColor(1, this->d->m_lifeColor);
-        this->d->m_lifeBuffer.fill(0);
+    if (!this->d->m_prevFrame) {
+        this->d->m_lifeBuffer = AkVideoPacket({AkVideoCaps::Format_gray8,
+                                               src.caps().width(),
+                                               src.caps().height(),
+                                               {}}, true);
     }
     else {
         // Compute the difference between previous and current frame,
         // and save it to the buffer.
-        auto diff =
-                this->d->imageDiff(this->d->m_prevFrame,
-                                   src,
-                                   this->d->m_threshold,
-                                   this->d->m_lumaThreshold);
-
-        this->d->m_lifeBuffer.setColor(1, this->d->m_lifeColor);
-
-        for (int y = 0; y < this->d->m_lifeBuffer.height(); y++) {
-            auto diffLine = diff.constScanLine(y);
-            auto lifeBufferLine = this->d->m_lifeBuffer.scanLine(y);
+        auto diff = this->d->imageDiff(this->d->m_prevFrame,
+                                       src,
+                                       this->d->m_threshold,
+                                       this->d->m_lumaThreshold);
+
+        for (int y = 0; y < this->d->m_lifeBuffer.caps().height(); y++) {
+            auto diffLine = diff.constLine(0, y);
+            auto lifeBufferLine = this->d->m_lifeBuffer.line(0, y);
 
-            for (int x = 0; x < this->d->m_lifeBuffer.width(); x++)
+            for (int x = 0; x < this->d->m_lifeBuffer.caps().width(); x++)
                 lifeBufferLine[x] |= diffLine[x];
         }
 
         this->d->updateLife();
 
-        QPainter painter;
-        painter.begin(&oFrame);
-        painter.drawImage(0, 0, this->d->m_lifeBuffer);
-        painter.end();
+        auto lifeColor = qRgba(qRed(this->d->m_lifeColor),
+                               qGreen(this->d->m_lifeColor),
+                               qBlue(this->d->m_lifeColor),
+                               255);
+
+        for (int y = 0; y < src.caps().height(); y++) {
+            auto iLine = this->d->m_lifeBuffer.constLine(0, y);
+            auto oLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+            for (int x = 0; x < src.caps().width(); x++) {
+                if (iLine[x])
+                    oLine[x] = lifeColor;
+            }
+        }
     }
 
-    this->d->m_prevFrame = src.copy();
+    this->d->m_prevFrame = src;
+
+    if (dst)
+        emit this->oStream(dst);
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    return dst;
 }
 
 void LifeElement::setLifeColor(QRgb lifeColor)
@@ -180,19 +196,19 @@ void LifeElement::resetLumaThreshold()
     this->setLumaThreshold(15);
 }
 
-QImage LifeElementPrivate::imageDiff(const QImage &img1,
-                                     const QImage &img2,
-                                     int threshold,
-                                     int lumaThreshold)
-{
-    int width = qMin(img1.width(), img2.width());
-    int height = qMin(img1.height(), img2.height());
-    QImage diff(width, height, QImage::Format_Indexed8);
+AkVideoPacket LifeElementPrivate::imageDiff(const AkVideoPacket &img1,
+                                            const AkVideoPacket &img2,
+                                            int threshold,
+                                            int lumaThreshold) const
+{
+    int width = qMin(img1.caps().width(), img2.caps().width());
+    int height = qMin(img1.caps().height(), img2.caps().height());
+    AkVideoPacket diff({AkVideoCaps::Format_gray8, width, height, {}});
 
     for (int y = 0; y < height; y++) {
-        auto line1 = reinterpret_cast<const QRgb *>(img1.constScanLine(y));
-        auto line2 = reinterpret_cast<const QRgb *>(img2.constScanLine(y));
-        quint8 *lineDiff = diff.scanLine(y);
+        auto line1 = reinterpret_cast<const QRgb *>(img1.constLine(0, y));
+        auto line2 = reinterpret_cast<const QRgb *>(img2.constLine(0, y));
+        auto lineDiff = diff.line(0, y);
 
         for (int x = 0; x < width; x++) {
             int r1 = qRed(line1[x]);
@@ -209,7 +225,7 @@ QImage LifeElementPrivate::imageDiff(con
 
             int colorDiff = dr * dr + dg * dg + db * db;
 
-            lineDiff[x] = sqrt(colorDiff / 3.0) >= threshold
+            lineDiff[x] = qSqrt(colorDiff / 3.0) >= threshold
                           && qGray(line2[x]) >= lumaThreshold? 1: 0;
         }
     }
@@ -219,34 +235,31 @@ QImage LifeElementPrivate::imageDiff(con
 
 void LifeElementPrivate::updateLife()
 {
-    QImage lifeBuffer(this->m_lifeBuffer.size(),
-                      this->m_lifeBuffer.format());
-    lifeBuffer.fill(0);
-
-    for (int y = 1; y < lifeBuffer.height() - 1; y++) {
-        auto iLine = this->m_lifeBuffer.constScanLine(y);
-        auto oLine = lifeBuffer.scanLine(y);
+    AkVideoPacket lifeBuffer(this->m_lifeBuffer.caps(), true);
+
+    for (int y = 1; y < lifeBuffer.caps().height() - 1; y++) {
+        auto iLine = this->m_lifeBuffer.constLine(0, y);
+        auto oLine = lifeBuffer.line(0, y);
 
-        for (int x = 1; x < lifeBuffer.width() - 1; x++) {
+        for (int x = 1; x < lifeBuffer.caps().width() - 1; x++) {
             int count = 0;
 
             for (int j = -1; j < 2; j++) {
-                auto line = this->m_lifeBuffer.constScanLine(y + j);
+                auto line = this->m_lifeBuffer.constLine(0, y + j);
 
                 for (int i = -1; i < 2; i++)
                     count += line[x + i];
             }
 
-            count -= iLine[x];
+            auto &ipixel = iLine[x];
+            count -= ipixel;
 
-            if ((iLine[x] && count == 2) || count == 3)
+            if ((ipixel && count == 2) || count == 3)
                 oLine[x] = 1;
         }
     }
 
-    memcpy(this->m_lifeBuffer.bits(),
-           lifeBuffer.constBits(),
-           size_t(lifeBuffer.bytesPerLine()) * size_t(lifeBuffer.height()));
+    this->m_lifeBuffer = lifeBuffer;
 }
 
 #include "moc_lifeelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Life/src/lifeelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Life/src/lifeelement.h
@@ -56,10 +56,10 @@ class LifeElement: public AkElement
         LifeElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void lifeColorChanged(QRgb lifeColor);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Matrix/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Matrix/CMakeLists.txt
@@ -38,13 +38,14 @@ find_package(Qt${QT_VERSION_MAJOR} ${QT_
              ${QT_COMPONENTS}
              REQUIRED)
 add_library(Matrix SHARED
-            src/matrix.h
-            src/matrixelement.h
+            src/character.cpp
             src/character.h
-            src/raindrop.h
             src/matrix.cpp
+            src/matrix.h
             src/matrixelement.cpp
+            src/matrixelement.h
             src/raindrop.cpp
+            src/raindrop.h
             Matrix.qrc
             pspec.json)
 
@@ -62,7 +63,6 @@ target_include_directories(Matrix
 target_compile_definitions(Matrix PRIVATE AVKYS_PLUGIN_MATRIX)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Matrix avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Matrix RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Matrix/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Matrix/share/qml/main.qml
@@ -41,20 +41,23 @@ GridLayout {
     }
 
     Label {
-        text: qsTr("N° of drops")
+        id: txtNumberOfDrops
+        text: qsTr("Number of drops")
     }
     TextField {
         text: Matrix.nDrops
-        placeholderText: qsTr("N° of drops")
+        placeholderText: qsTr("Number of drops")
         selectByMouse: true
         validator: RegExpValidator {
             regExp: /\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtNumberOfDrops.text
 
         onTextChanged: Matrix.nDrops = Number(text)
     }
     Label {
+        id: txtSymbols
         text: qsTr("Symbols")
     }
     TextField {
@@ -62,11 +65,13 @@ GridLayout {
         placeholderText: qsTr("Symbols")
         selectByMouse: true
         Layout.fillWidth: true
+        Accessible.name: txtSymbols.text
 
         onTextChanged: Matrix.charTable = text
     }
 
     Label {
+        id: txtFont
         text: qsTr("Font")
     }
     RowLayout {
@@ -78,16 +83,19 @@ GridLayout {
             readOnly: true
             font: Matrix.font
             Layout.fillWidth: true
+            Accessible.name: txtFont.text
         }
         Button {
             text: qsTr("Select")
             icon.source: "image://icons/fonts"
+            Accessible.description: qsTr("Select font")
 
             onClicked: fontDialog.open()
         }
     }
 
     Label {
+        id: txtHinting
         text: qsTr("Hinting")
     }
     ComboBox {
@@ -95,6 +103,7 @@ GridLayout {
         textRole: "text"
         currentIndex: optionIndex(cbxHinting, Matrix.hintingPreference)
         Layout.fillWidth: true
+        Accessible.description: txtHinting.text
 
         model: ListModel {
             ListElement {
@@ -119,6 +128,7 @@ GridLayout {
     }
 
     Label {
+        id: txtStyle
         //: Different font rendering strategies
         text: qsTr("Style")
     }
@@ -127,6 +137,7 @@ GridLayout {
         textRole: "text"
         currentIndex: optionIndex(cbxStyle, Matrix.styleStrategy)
         Layout.fillWidth: true
+        Accessible.description: txtStyle.text
 
         model: ListModel {
             ListElement {
@@ -187,6 +198,7 @@ GridLayout {
     }
 
     Label {
+        id: txtCursorColor
         text: qsTr("Cursor color")
     }
     RowLayout {
@@ -196,12 +208,14 @@ GridLayout {
         AK.ColorButton {
             currentColor: AkUtils.fromRgba(Matrix.cursorColor)
             title: qsTr("Choose the cursor color")
+            Accessible.description: txtCursorColor.text
 
             onCurrentColorChanged: Matrix.cursorColor = AkUtils.toRgba(currentColor)
         }
     }
 
     Label {
+        id: txtForegroundColor
         text: qsTr("Foreground color")
     }
     RowLayout {
@@ -211,12 +225,14 @@ GridLayout {
         AK.ColorButton {
             currentColor: AkUtils.fromRgba(Matrix.foregroundColor)
             title: qsTr("Choose the foreground color")
+            Accessible.description: txtForegroundColor.text
 
             onCurrentColorChanged: Matrix.foregroundColor = AkUtils.toRgba(currentColor)
         }
     }
 
     Label {
+        id: txtBackgroundColor
         text: qsTr("Background color")
     }
     RowLayout {
@@ -226,13 +242,15 @@ GridLayout {
         AK.ColorButton {
             currentColor: AkUtils.fromRgba(Matrix.backgroundColor)
             title: qsTr("Choose the background color")
+            Accessible.description: txtBackgroundColor.text
 
             onCurrentColorChanged: Matrix.backgroundColor = AkUtils.toRgba(currentColor)
         }
     }
 
     Label {
-        text: qsTr("Min. drop length")
+        id: txtMinimumDropLength
+        text: qsTr("Minimum drop length")
     }
     TextField {
         text: Matrix.minDropLength
@@ -242,11 +260,13 @@ GridLayout {
             regExp: /\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtMinimumDropLength.text
 
         onTextChanged: Matrix.minDropLength = Number(text)
     }
     Label {
-        text: qsTr("Max. drop length")
+        id: txtMaximumDropLength
+        text: qsTr("Maximum drop length")
     }
     TextField {
         text: Matrix.maxDropLength
@@ -256,11 +276,13 @@ GridLayout {
             regExp: /\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtMaximumDropLength.text
 
         onTextChanged: Matrix.maxDropLength = Number(text)
     }
     Label {
-        text: qsTr("Min. speed")
+        id: txtMinimumSpeed
+        text: qsTr("Minimum speed")
     }
     TextField {
         text: Matrix.minSpeed
@@ -270,11 +292,13 @@ GridLayout {
             regExp: /\d+\.\d+|\d+\.|\.\d+|\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtMinimumSpeed.text
 
         onTextChanged: Matrix.minSpeed = Number(text)
     }
     Label {
-        text: qsTr("Max. speed")
+        id: txtMaximumSpeed
+        text: qsTr("Maximum speed")
     }
     TextField {
         text: Matrix.maxSpeed
@@ -284,11 +308,29 @@ GridLayout {
             regExp: /\d+\.\d+|\d+\.|\.\d+|\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtMaximumSpeed.text
 
         onTextChanged: Matrix.maxSpeed = Number(text)
     }
 
     Label {
+        id: txtSmooth
+        text: qsTr("Smooth scaling")
+    }
+    RowLayout {
+        Item {
+            Layout.fillWidth: true
+        }
+        Switch {
+            checked: Matrix.smooth
+            Accessible.name: txtSmooth.text
+
+            onCheckedChanged: Matrix.smooth = checked
+        }
+    }
+
+    Label {
+        id: txtShowCursor
         text: qsTr("Show cursor")
     }
     RowLayout {
@@ -297,11 +339,28 @@ GridLayout {
         }
         Switch {
             checked: Matrix.showCursor
+            Accessible.name: txtShowCursor.text
 
             onCheckedChanged: Matrix.showCursor = checked
         }
     }
 
+    Label {
+        id: txtShowRain
+        text: qsTr("Show rain")
+    }
+    RowLayout {
+        Item {
+            Layout.fillWidth: true
+        }
+        Switch {
+            checked: Matrix.showRain
+            Accessible.name: txtShowRain.text
+
+            onCheckedChanged: Matrix.showRain = checked
+        }
+    }
+
     LABS.FontDialog {
         id: fontDialog
         title: qsTr("Please choose a font")
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Matrix/src/character.cpp
@@ -0,0 +1,134 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QPainter>
+#include <akfrac.h>
+#include <akvideopacket.h>
+
+#include "character.h"
+
+class CharacterPrivate
+{
+    public:
+        QChar m_chr;
+        AkVideoPacket m_image;
+        int m_weight {0};
+
+        AkVideoPacket drawChar(const QChar &chr,
+                               const QFont &font,
+                               const QSize &fontSize) const;
+        int imageWeight(const AkVideoPacket &image) const;
+};
+
+Character::Character()
+{
+    this->d = new CharacterPrivate;
+}
+
+Character::Character(const QChar &chr, const QFont &font, const QSize &fontSize)
+{
+    this->d = new CharacterPrivate;
+    this->d->m_chr = chr;
+    this->d->m_image = this->d->drawChar(chr, font, fontSize);
+    this->d->m_weight = this->d->imageWeight(this->d->m_image);
+}
+
+Character::Character(const Character &other)
+{
+    this->d = new CharacterPrivate;
+    this->d->m_chr = other.d->m_chr;
+    this->d->m_image = other.d->m_image;
+    this->d->m_weight = other.d->m_weight;
+}
+
+Character::~Character()
+{
+    delete this->d;
+}
+
+Character &Character::operator =(const Character &other)
+{
+    if (this != &other) {
+        this->d->m_chr = other.d->m_chr;
+        this->d->m_image = other.d->m_image;
+        this->d->m_weight = other.d->m_weight;
+    }
+
+    return *this;
+}
+
+QChar Character::chr() const
+{
+    return this->d->m_chr;
+}
+
+const AkVideoPacket &Character::image() const
+{
+    return this->d->m_image;
+}
+
+int Character::weight() const
+{
+    return this->d->m_weight;
+}
+
+AkVideoPacket CharacterPrivate::drawChar(const QChar &chr,
+                                         const QFont &font,
+                                         const QSize &fontSize) const
+{
+    QImage fontImg(fontSize, QImage::Format_Grayscale8);
+    fontImg.fill(qRgb(0, 0, 0));
+
+    QPainter painter;
+    painter.begin(&fontImg);
+    painter.setPen(qRgb(255, 255, 255));
+    painter.setFont(font);
+    painter.drawText(fontImg.rect(), chr, Qt::AlignHCenter | Qt::AlignVCenter);
+    painter.end();
+
+    AkVideoPacket charSprite({AkVideoCaps::Format_gray8,
+                              fontSize.width(),
+                              fontSize.height(),
+                              {}});
+    auto lineSize = qMin<size_t>(fontImg.bytesPerLine(),
+                                 charSprite.lineSize(0));
+
+    for (int y = 0; y < fontSize.height(); y++)
+        memcpy(charSprite.line(0, y),
+               fontImg.constScanLine(y),
+               lineSize);
+
+    return charSprite;
+}
+
+int CharacterPrivate::imageWeight(const AkVideoPacket &image) const
+{
+    int weight = 0;
+
+    for (int y = 0; y < image.caps().height(); y++) {
+        auto imageLine = image.constLine(0, y);
+
+        for (int x = 0; x < image.caps().width(); x++)
+            weight += imageLine[x];
+    }
+
+    weight /= image.caps().width() * image.caps().height();
+
+    return weight;
+}
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Matrix/src/character.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Matrix/src/character.h
@@ -20,23 +20,27 @@
 #ifndef CHARACTER_H
 #define CHARACTER_H
 
-#include <QImage>
+class CharacterPrivate;
+class QChar;
+class QFont;
+class QSize;
+class AkVideoPacket;
 
 class Character
 {
     public:
-        Character(QChar chr, QImage image, int weight,
-                  QRgb foreground=qRgba(0, 0, 0, 0), QRgb background=qRgba(0, 0, 0, 0)):
-            chr(chr), image(image), weight(weight),
-            foreground(foreground), background(background)
-        {
-        }
+        Character();
+        Character(const QChar &chr, const QFont &font, const QSize &fontSize);
+        Character(const Character &other);
+        ~Character();
+        Character &operator =(const Character &other);
 
-        QChar chr;
-        QImage image;
-        int weight;
-        QRgb foreground;
-        QRgb background;
+        QChar chr() const;
+        const AkVideoPacket &image() const;
+        int weight() const;
+
+    private:
+        CharacterPrivate *d;
 };
 
 #endif // CHARACTER_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Matrix/src/matrix.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Matrix/src/matrix.h
@@ -29,8 +29,8 @@ class Matrix: public QObject, public AkP
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // MATRIX_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Matrix/src/matrixelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Matrix/src/matrixelement.cpp
@@ -18,11 +18,14 @@
  */
 
 #include <QApplication>
-#include <QQmlContext>
-#include <QPainter>
 #include <QFontMetrics>
 #include <QMutex>
+#include <QQmlContext>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
+#include <akvideomixer.h>
 #include <akvideopacket.h>
 
 #include "matrixelement.h"
@@ -43,7 +46,9 @@ inline HintingPreferenceToStr initHintin
     return hintingPreferenceToStr;
 }
 
-Q_GLOBAL_STATIC_WITH_ARGS(HintingPreferenceToStr, hintingPreferenceToStr, (initHintingPreferenceToStr()))
+Q_GLOBAL_STATIC_WITH_ARGS(HintingPreferenceToStr,
+                          hintingPreferenceToStr,
+                          (initHintingPreferenceToStr()))
 
 using StyleStrategyToStr = QMap<QFont::StyleStrategy, QString>;
 
@@ -68,11 +73,15 @@ inline StyleStrategyToStr initStyleStrat
     return styleStrategyToStr;
 }
 
-Q_GLOBAL_STATIC_WITH_ARGS(StyleStrategyToStr, styleStrategyToStr, (initStyleStrategyToStr()))
+Q_GLOBAL_STATIC_WITH_ARGS(StyleStrategyToStr,
+                          styleStrategyToStr,
+                          (initStyleStrategyToStr()))
 
 class MatrixElementPrivate
 {
     public:
+        AkVideoConverter m_videoConverter;
+        AkVideoMixer m_videoMixer;
         int m_nDrops {25};
         QString m_charTable;
         QFont m_font {QApplication::font()};
@@ -83,64 +92,53 @@ class MatrixElementPrivate
         int m_maxDropLength {20};
         qreal m_minSpeed {0.5};
         qreal m_maxSpeed {5.0};
-        bool m_showCursor {false};
-        QList<Character> m_characters;
+        bool m_smooth {true};
+        bool m_showCursor {true};
+        bool m_showRain {true};
+        Character *m_characters {nullptr};
+        QRgb m_palette[256];
+        int m_colorTable[256];
         QSize m_fontSize;
         QList<RainDrop> m_rain;
         QMutex m_mutex;
 
+        void updateCharTable();
+        void updatePalette();
         QSize fontSize(const QString &chrTable, const QFont &font) const;
-        QImage drawChar(const QChar &chr, const QFont &font,
+        QSize fontSize(const QChar &chr, const QFont &font) const;
+        AkVideoPacket createMask(const AkVideoPacket &src,
+                                 const QSize &fontSize,
+                                 const Character *characters);
+        AkVideoPacket applyMask(const AkVideoPacket &src,
+                                const AkVideoPacket &mask);
+        AkVideoPacket renderdrop(const RainDrop &drop,
+                                 const QSize &fontSize,
+                                 const Character *characters,
+                                 bool showCursor);
+        void renderRain(AkVideoPacket &src,
                         const QSize &fontSize,
-                        QRgb foreground, QRgb background) const;
-        int imageWeight(const QImage &image) const;
-        static bool chrLessThan(const Character &chr1, const Character &chr2);
-        QImage renderRain(const QSize &frameSize, const QImage &textImage);
+                        const Character *characters);
 };
 
 MatrixElement::MatrixElement(): AkElement()
 {
     this->d = new MatrixElementPrivate;
+    this->d->m_videoMixer.setFlags(AkVideoMixer::MixerFlagLightweightCache);
 
     for (int i = 32; i < 127; i++)
         this->d->m_charTable.append(QChar(i));
 
     this->d->m_font.setHintingPreference(QFont::PreferFullHinting);
     this->d->m_font.setStyleStrategy(QFont::NoAntialias);
-    this->updateCharTable();
-
-    QObject::connect(this,
-                     &MatrixElement::charTableChanged,
-                     this,
-                     &MatrixElement::updateCharTable);
-    QObject::connect(this,
-                     &MatrixElement::fontChanged,
-                     this,
-                     &MatrixElement::updateCharTable);
-    QObject::connect(this,
-                     &MatrixElement::hintingPreferenceChanged,
-                     this,
-                     &MatrixElement::updateCharTable);
-    QObject::connect(this,
-                     &MatrixElement::styleStrategyChanged,
-                     this,
-                     &MatrixElement::updateCharTable);
-    QObject::connect(this,
-                     &MatrixElement::cursorColorChanged,
-                     this,
-                     &MatrixElement::updateCharTable);
-    QObject::connect(this,
-                     &MatrixElement::foregroundColorChanged,
-                     this,
-                     &MatrixElement::updateCharTable);
-    QObject::connect(this,
-                     &MatrixElement::backgroundColorChanged,
-                     this,
-                     &MatrixElement::updateCharTable);
+    this->d->updateCharTable();
+    this->d->updatePalette();
 }
 
 MatrixElement::~MatrixElement()
 {
+    if (this->d->m_characters)
+        delete [] this->d->m_characters;
+
     delete this->d;
 }
 
@@ -206,122 +204,19 @@ qreal MatrixElement::maxSpeed() const
     return this->d->m_maxSpeed;
 }
 
-bool MatrixElement::showCursor() const
+bool MatrixElement::smooth() const
 {
-    return this->d->m_showCursor;
+    return this->d->m_smooth;
 }
 
-QSize MatrixElementPrivate::fontSize(const QString &chrTable,
-                                     const QFont &font) const
-{
-    QFontMetrics metrics(font);
-    int width = -1;
-    int height = -1;
-
-    for (const QChar &chr: chrTable) {
-        QSize size = metrics.size(Qt::TextSingleLine, chr);
-
-        if (size.width() > width)
-            width = size.width();
-
-        if (size.height() > height)
-            height = size.height();
-    }
-
-    return {width, height};
-}
-
-QImage MatrixElementPrivate::drawChar(const QChar &chr, const QFont &font,
-                                      const QSize &fontSize, QRgb foreground,
-                                      QRgb background) const
-{
-    QImage fontImg(fontSize, QImage::Format_RGB32);
-    fontImg.fill(background);
-
-    QPainter painter;
-    painter.begin(&fontImg);
-    painter.setPen(foreground);
-    painter.setFont(font);
-    painter.drawText(fontImg.rect(), chr, Qt::AlignHCenter | Qt::AlignVCenter);
-    painter.end();
-
-    return fontImg;
-}
-
-int MatrixElementPrivate::imageWeight(const QImage &image) const
+bool MatrixElement::showCursor() const
 {
-    int weight = 0;
-
-    for (int y = 0; y < image.height(); y++) {
-        const QRgb *imageLine = reinterpret_cast<const QRgb *>(image.constScanLine(y));
-
-        for (int x = 0; x < image.width(); x++)
-            weight += qGray(imageLine[x]);
-    }
-
-    weight /= image.width() * image.height();
-
-    return weight;
+    return this->d->m_showCursor;
 }
 
-bool MatrixElementPrivate::chrLessThan(const Character &chr1,
-                                       const Character &chr2)
+bool MatrixElement::showRain() const
 {
-    return chr1.weight < chr2.weight;
-}
-
-QImage MatrixElementPrivate::renderRain(const QSize &frameSize,
-                                        const QImage &textImage)
-{
-    this->m_mutex.lock();
-    QImage rain(frameSize, QImage::Format_ARGB32);
-    rain.fill(qRgba(0, 0, 0, 0));
-    QPainter painter;
-
-    bool randomStart = this->m_rain.isEmpty();
-
-    while (this->m_rain.size() < this->m_nDrops)
-        this->m_rain << RainDrop(textImage.size(),
-                                 this->m_charTable,
-                                 this->m_font,
-                                 this->m_fontSize,
-                                 this->m_cursorColor,
-                                 this->m_foregroundColor,
-                                 this->m_backgroundColor,
-                                 this->m_minDropLength,
-                                 this->m_maxDropLength,
-                                 this->m_minSpeed,
-                                 this->m_maxSpeed,
-                                 randomStart);
-
-    painter.begin(&rain);
-
-    for (int i = 0; i < this->m_rain.size(); i++) {
-        QPoint tail = this->m_rain[i].tail();
-        QRgb tailColor;
-
-        if (textImage.rect().contains(tail))
-            tailColor = textImage.pixel(tail);
-        else
-            tailColor = this->m_backgroundColor;
-
-        QImage sprite = this->m_rain[i].render(tailColor, this->m_showCursor);
-
-        if (!sprite.isNull())
-            painter.drawImage(this->m_rain[i].pos(), sprite);
-
-        this->m_rain[i]++;
-
-        if (!this->m_rain[i].isVisible()) {
-            this->m_rain.removeAt(i);
-            i--;
-        }
-    }
-
-    painter.end();
-    this->m_mutex.unlock();
-
-    return rain;
+    return this->d->m_showRain;
 }
 
 QString MatrixElement::controlInterfaceProvide(const QString &controlId) const
@@ -342,53 +237,76 @@ void MatrixElement::controlInterfaceConf
 
 AkPacket MatrixElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_mutex.lock();
+    auto fontSize = this->d->m_fontSize;
 
-    if (src.isNull())
-        return AkPacket();
+    int textWidth = packet.caps().width() / fontSize.width();
+    int textHeight = packet.caps().height() / fontSize.height();
 
-    src = src.convertToFormat(QImage::Format_RGB32);
+    if (this->d->m_charTable.isEmpty()) {
+        this->d->m_mutex.unlock();
 
-    this->d->m_mutex.lock();
-    int textWidth = src.width() / this->d->m_fontSize.width();
-    int textHeight = src.height() / this->d->m_fontSize.height();
+        AkVideoPacket dst({AkVideoCaps::Format_0rgbpack,
+                           textWidth * fontSize.width(),
+                           textHeight * fontSize.height(),
+                           packet.caps().fps()});
+        dst.copyMetadata(packet);
+        dst.fill(this->d->m_backgroundColor);
+
+        if (dst)
+            emit this->oStream(dst);
 
-    int outWidth = textWidth * this->d->m_fontSize.width();
-    int outHeight = textHeight * this->d->m_fontSize.height();
+        return dst;
+    }
 
-    QImage oFrame(outWidth, outHeight, src.format());
+    this->d->m_videoConverter.setScalingMode(this->d->m_smooth?
+                                                 AkVideoConverter::ScalingMode_Linear:
+                                                 AkVideoConverter::ScalingMode_Fast);
+
+    this->d->m_videoConverter.begin();
+    this->d->m_videoConverter.setOutputCaps({AkVideoCaps::Format_gray8,
+                                             textWidth,
+                                             textHeight,
+                                             {}});
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    QList<Character> characters(this->d->m_characters);
-    this->d->m_mutex.unlock();
+    if (!src) {
+        this->d->m_mutex.unlock();
 
-    if (characters.size() < 256) {
-        oFrame.fill(this->d->m_backgroundColor);
-        auto oPacket =
-                AkVideoPacket::fromImage(oFrame.scaled(src.size()), packet);
-        akSend(oPacket)
+        return {};
     }
 
-    QImage textImage = src.scaled(textWidth, textHeight);
-    QRgb *textImageBits = reinterpret_cast<QRgb *>(textImage.bits());
-    int textArea = textImage.width() * textImage.height();
-    QPainter painter;
+    int outWidth = textWidth * fontSize.width();
+    int outHeight = textHeight * fontSize.height();
+
+    auto mask = this->d->createMask(src, fontSize, this->d->m_characters);
+
+    src = this->d->applyMask(src, mask);
 
-    painter.begin(&oFrame);
+    if (this->d->m_showRain)
+        this->d->renderRain(src, fontSize, this->d->m_characters);
 
-    for (int i = 0; i < textArea; i++) {
-        int x = this->d->m_fontSize.width() * (i % textWidth);
-        int y = this->d->m_fontSize.height() * (i / textWidth);
+    this->d->m_mutex.unlock();
+
+    AkVideoPacket dst({AkVideoCaps::Format_0rgbpack,
+                       outWidth,
+                       outHeight,
+                       src.caps().fps()});
+    dst.copyMetadata(src);
+
+    for (int y = 0; y < dst.caps().height(); y++) {
+        auto chrLine = src.constLine(0, y);
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
 
-        Character chr = characters[qGray(textImageBits[i])];
-        painter.drawImage(x, y, chr.image);
-        textImageBits[i] = chr.foreground;
+        for (int x = 0; x < dst.caps().width(); x++)
+            dstLine[x] = this->d->m_palette[chrLine[x]];
     }
 
-    painter.drawImage(0, 0, this->d->renderRain(oFrame.size(), textImage));
-    painter.end();
+    if (dst)
+        emit this->oStream(dst);
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    return dst;
 }
 
 void MatrixElement::setNDrops(int nDrops)
@@ -409,6 +327,8 @@ void MatrixElement::setCharTable(const Q
 
     this->d->m_mutex.lock();
     this->d->m_charTable = charTable;
+    this->d->m_rain.clear();
+    this->d->updateCharTable();
     this->d->m_mutex.unlock();
     emit this->charTableChanged(charTable);
 }
@@ -419,25 +339,23 @@ void MatrixElement::setFont(const QFont
         return;
 
     this->d->m_mutex.lock();
-    QFont::HintingPreference hp =
-            hintingPreferenceToStr->key(this->hintingPreference(),
-                                        QFont::PreferFullHinting);
-    QFont::StyleStrategy ss =
-            styleStrategyToStr->key(this->styleStrategy(),
-                                    QFont::NoAntialias);
+    auto hp = hintingPreferenceToStr->key(this->hintingPreference(),
+                                          QFont::PreferFullHinting);
+    auto ss = styleStrategyToStr->key(this->styleStrategy(),
+                                      QFont::NoAntialias);
     this->d->m_font = font;
     this->d->m_font.setHintingPreference(hp);
     this->d->m_font.setStyleStrategy(ss);
     this->d->m_rain.clear();
+    this->d->updateCharTable();
     this->d->m_mutex.unlock();
     emit this->fontChanged(font);
 }
 
 void MatrixElement::setHintingPreference(const QString &hintingPreference)
 {
-    QFont::HintingPreference hp =
-            hintingPreferenceToStr->key(hintingPreference,
-                                        QFont::PreferFullHinting);
+    auto hp = hintingPreferenceToStr->key(hintingPreference,
+                                          QFont::PreferFullHinting);
 
     if (this->d->m_font.hintingPreference() == hp)
         return;
@@ -445,15 +363,14 @@ void MatrixElement::setHintingPreference
     this->d->m_mutex.lock();
     this->d->m_font.setHintingPreference(hp);
     this->d->m_rain.clear();
+    this->d->updateCharTable();
     this->d->m_mutex.unlock();
-    emit hintingPreferenceChanged(hintingPreference);
+    emit this->hintingPreferenceChanged(hintingPreference);
 }
 
 void MatrixElement::setStyleStrategy(const QString &styleStrategy)
 {
-    QFont::StyleStrategy ss =
-            styleStrategyToStr->key(styleStrategy,
-                                    QFont::NoAntialias);
+    auto ss = styleStrategyToStr->key(styleStrategy, QFont::NoAntialias);
 
     if (this->d->m_font.styleStrategy() == ss)
         return;
@@ -461,8 +378,9 @@ void MatrixElement::setStyleStrategy(con
     this->d->m_mutex.lock();
     this->d->m_font.setStyleStrategy(ss);
     this->d->m_rain.clear();
+    this->d->updateCharTable();
     this->d->m_mutex.unlock();
-    emit styleStrategyChanged(styleStrategy);
+    emit this->styleStrategyChanged(styleStrategy);
 }
 
 void MatrixElement::setCursorColor(QRgb cursorColor)
@@ -472,6 +390,7 @@ void MatrixElement::setCursorColor(QRgb
 
     this->d->m_mutex.lock();
     this->d->m_cursorColor = cursorColor;
+    this->d->updatePalette();
     this->d->m_mutex.unlock();
     emit this->cursorColorChanged(cursorColor);
 }
@@ -483,6 +402,7 @@ void MatrixElement::setForegroundColor(Q
 
     this->d->m_mutex.lock();
     this->d->m_foregroundColor = foregroundColor;
+    this->d->updatePalette();
     this->d->m_mutex.unlock();
     emit this->foregroundColorChanged(foregroundColor);
 }
@@ -494,6 +414,7 @@ void MatrixElement::setBackgroundColor(Q
 
     this->d->m_mutex.lock();
     this->d->m_backgroundColor = backgroundColor;
+    this->d->updatePalette();
     this->d->m_mutex.unlock();
     emit this->backgroundColorChanged(backgroundColor);
 }
@@ -542,6 +463,15 @@ void MatrixElement::setMaxSpeed(qreal ma
     emit this->maxSpeedChanged(maxSpeed);
 }
 
+void MatrixElement::setSmooth(bool smooth)
+{
+    if (this->d->m_smooth == smooth)
+        return;
+
+    this->d->m_smooth = smooth;
+    emit this->smoothChanged(smooth);
+}
+
 void MatrixElement::setShowCursor(bool showCursor)
 {
     if (this->d->m_showCursor == showCursor)
@@ -553,6 +483,15 @@ void MatrixElement::setShowCursor(bool s
     emit this->showCursorChanged(showCursor);
 }
 
+void MatrixElement::setShowRain(bool showRain)
+{
+    if (this->d->m_showRain == showRain)
+        return;
+
+    this->d->m_showRain = showRain;
+    emit this->showRainChanged(showRain);
+}
+
 void MatrixElement::resetNDrops()
 {
     this->setNDrops(25);
@@ -618,95 +557,253 @@ void MatrixElement::resetMaxSpeed()
     this->setMaxSpeed(5.0);
 }
 
+void MatrixElement::resetSmooth()
+{
+    this->setSmooth(true);
+}
+
 void MatrixElement::resetShowCursor()
 {
-    this->setShowCursor(false);
+    this->setShowCursor(true);
 }
 
-void MatrixElement::updateCharTable()
+void MatrixElement::resetShowRain()
 {
-    if (!this->d->m_mutex.tryLock())
-        return;
+    this->setShowRain(true);
+}
 
-    QList<Character> characters;
-    this->d->m_fontSize =
-            this->d->fontSize(this->d->m_charTable, this->d->m_font);
+void MatrixElementPrivate::updateCharTable()
+{
+    if (this->m_characters)
+        delete [] this->m_characters;
 
-    QVector<QRgb> colorTable(256);
+    if (this->m_charTable.isEmpty()) {
+        this->m_fontSize = this->fontSize(' ', this->m_font);
+        this->m_characters = new Character [1];
+        this->m_characters[0] = Character(' ', this->m_font, this->m_fontSize);
+        memset(this->m_colorTable, 0, 256);
+    } else {
+        this->m_fontSize = this->fontSize(this->m_charTable, this->m_font);
+        this->m_characters = new Character [this->m_charTable.size()];
+        int i = 0;
 
-    for (int i = 0; i < 256; i++)
-        colorTable[i] = qRgb(i, i, i);
+        for (auto &chr: this->m_charTable) {
+            this->m_characters[i] = Character(chr, this->m_font, this->m_fontSize);
+            i++;
+        }
 
-    for (auto &chr: this->d->m_charTable) {
-        QImage image =
-                this->d->drawChar(chr,
-                                  this->d->m_font,
-                                  this->d->m_fontSize,
-                                  this->d->m_foregroundColor,
-                                  this->d->m_backgroundColor);
-        int weight = this->d->imageWeight(image);
+        std::sort(this->m_characters,
+                  this->m_characters + this->m_charTable.size(),
+                  [] (const Character &chr1, const Character &chr2) {
+                      return chr1.weight() < chr2.weight();
+                  });
 
-        characters.append(Character(chr, QImage(), weight));
+        auto charMax = this->m_charTable.size() - 1;
+
+        for (int i = 0; i < 256; i++)
+            this->m_colorTable[i] = charMax * i / 255;
     }
+}
 
-    std::sort(characters.begin(), characters.end(), this->d->chrLessThan);
+void MatrixElementPrivate::updatePalette()
+{
+    int r0 = qRed(this->m_backgroundColor);
+    int g0 = qGreen(this->m_backgroundColor);
+    int b0 = qBlue(this->m_backgroundColor);
+
+    int rDiff = qRed(this->m_foregroundColor) - r0;
+    int gDiff = qGreen(this->m_foregroundColor) - g0;
+    int bDiff = qBlue(this->m_foregroundColor) - b0;
 
-    this->d->m_characters.clear();
+    for (int i = 0; i < 128; i++) {
+        int r = (i * rDiff + 127 * r0) / 127;
+        int g = (i * gDiff + 127 * g0) / 127;
+        int b = (i * bDiff + 127 * b0) / 127;
 
-    if (characters.isEmpty()) {
-        this->d->m_mutex.unlock();
+        this->m_palette[i] = qRgb(r, g, b);
+    }
 
-        return;
+    r0 = qRed(this->m_foregroundColor);
+    g0 = qGreen(this->m_foregroundColor);
+    b0 = qBlue(this->m_foregroundColor);
+
+    rDiff = qRed(this->m_cursorColor) - r0;
+    gDiff = qGreen(this->m_cursorColor) - g0;
+    bDiff = qBlue(this->m_cursorColor) - b0;
+
+    for (int i = 0; i < 128; i++) {
+        int r = (i * rDiff + 127 * r0) / 127;
+        int g = (i * gDiff + 127 * g0) / 127;
+        int b = (i * bDiff + 127 * b0) / 127;
+
+        this->m_palette[i + 128] = qRgb(r, g, b);
     }
+}
 
-    QVector<QRgb> pallete;
+QSize MatrixElementPrivate::fontSize(const QString &chrTable,
+                                     const QFont &font) const
+{
+    QFontMetrics metrics(font);
+    int width = -1;
+    int height = -1;
 
-    int r0 = qRed(this->d->m_backgroundColor);
-    int g0 = qGreen(this->d->m_backgroundColor);
-    int b0 = qBlue(this->d->m_backgroundColor);
-
-    int rDiff = qRed(this->d->m_foregroundColor) - r0;
-    int gDiff = qGreen(this->d->m_foregroundColor) - g0;
-    int bDiff = qBlue(this->d->m_foregroundColor) - b0;
+    for (auto &chr: chrTable) {
+        auto size = metrics.size(Qt::TextSingleLine, chr);
 
-    for (int i = 0; i < 128; i++) {
-        int r = (i * rDiff) / 127 + r0;
-        int g = (i * gDiff) / 127 + g0;
-        int b = (i * bDiff) / 127 + b0;
+        if (size.width() > width)
+            width = size.width();
 
-        pallete << qRgb(r, g, b);
+        if (size.height() > height)
+            height = size.height();
     }
 
-    r0 = qRed(this->d->m_foregroundColor);
-    g0 = qGreen(this->d->m_foregroundColor);
-    b0 = qBlue(this->d->m_foregroundColor);
+    return {width, height};
+}
+
+QSize MatrixElementPrivate::fontSize(const QChar &chr, const QFont &font) const
+{
+    return QFontMetrics(font).size(Qt::TextSingleLine, chr);
+}
 
-    rDiff = qRed(this->d->m_cursorColor) - r0;
-    gDiff = qGreen(this->d->m_cursorColor) - g0;
-    bDiff = qBlue(this->d->m_cursorColor) - b0;
+AkVideoPacket MatrixElementPrivate::createMask(const AkVideoPacket &src,
+                                               const QSize &fontSize,
+                                               const Character *characters)
+{
+    int outWidth = src.caps().width() * fontSize.width();
+    int outHeight = src.caps().height() * fontSize.height();
 
-    for (int i = 0; i < 128; i++) {
-        int r = (i * rDiff) / 127 + r0;
-        int g = (i * gDiff) / 127 + g0;
-        int b = (i * bDiff) / 127 + b0;
-
-        pallete << qRgb(r, g, b);
-    }
-
-    for (int i = 0; i < 256; i++) {
-        int c = i * (characters.size() - 1) / 255;
-        characters[c].image =
-                this->d->drawChar(characters[c].chr,
-                                  this->d->m_font,
-                                  this->d->m_fontSize,
-                                  pallete[i],
-                                  this->d->m_backgroundColor);
-        characters[c].foreground = pallete[i];
-        characters[c].background = this->d->m_backgroundColor;
-        this->d->m_characters.append(characters[c]);
+    auto ocaps = src.caps();
+    ocaps.setWidth(outWidth);
+    ocaps.setHeight(outHeight);
+    AkVideoPacket dst(ocaps);
+    dst.copyMetadata(src);
+
+    this->m_videoMixer.begin(&dst);
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto ys = y * fontSize.height();
+        auto srcLine = src.constLine(0, y);
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto xs = x * fontSize.width();
+            auto &chr = characters[this->m_colorTable[srcLine[x]]];
+            this->m_videoMixer.draw(xs, ys, chr.image());
+        }
     }
 
-    this->d->m_mutex.unlock();
+    this->m_videoMixer.end();
+
+    return dst;
+}
+
+AkVideoPacket MatrixElementPrivate::applyMask(const AkVideoPacket &src,
+                                              const AkVideoPacket &mask)
+{
+    auto ocaps = src.caps();
+    ocaps.setWidth(mask.caps().width());
+    ocaps.setHeight(mask.caps().height());
+    AkVideoPacket dst(ocaps);
+    dst.copyMetadata(src);
+
+    auto fontWidth = mask.caps().width() / src.caps().width();
+    auto fontHeight = mask.caps().height() / src.caps().height();
+
+    for (int y = 0; y < dst.caps().height(); y++) {
+        int ys = y / fontHeight;
+        auto srcLine = src.constLine(0, ys);
+        auto maskLine = mask.constLine(0, y);
+        auto dstLine = dst.line(0, y);
+
+        for (int x = 0; x < dst.caps().width(); x++) {
+            int xs = x / fontWidth;
+            dstLine[x] = maskLine[x] * srcLine[xs] / 255;
+        }
+    }
+
+    return dst;
+}
+
+AkVideoPacket MatrixElementPrivate::renderdrop(const RainDrop &drop,
+                                               const QSize &fontSize,
+                                               const Character *characters,
+                                               bool showCursor)
+{
+    AkVideoPacket dropSprite({AkVideoCaps::Format_gray8,
+                              fontSize.width(),
+                              fontSize.height() * drop.length(),
+                              {}});
+    int len_1 = drop.length() - 1;
+    int yd = len_1 * fontSize.height();
+    int j = len_1;
+
+    for (int i = 0; i < drop.length(); i++) {
+        auto character = characters[drop.chr(i)];
+        auto &sprite = character.image();
+
+        if (showCursor && i == 0) {
+            for (int y = 0; y < sprite.caps().height(); y++) {
+                auto srcLine = sprite.constLine(0, y);
+                auto dstLine = dropSprite.line(0, yd + y);
+
+                for (int x = 0; x < sprite.caps().width(); x++)
+                    dstLine[x] = 255 - srcLine[x];
+            }
+        } else {
+            for (int y = 0; y < sprite.caps().height(); y++) {
+                auto srcLine = sprite.constLine(0, y);
+                auto dstLine = dropSprite.line(0, yd + y);
+
+                for (int x = 0; x < sprite.caps().width(); x++)
+                    dstLine[x] = j * srcLine[x] / len_1;
+            }
+        }
+
+        yd -= fontSize.height();
+        j--;
+    }
+
+    return dropSprite;
+}
+
+void MatrixElementPrivate::renderRain(AkVideoPacket &src,
+                                      const QSize &fontSize,
+                                      const Character *characters)
+{
+    int textWidth = src.caps().width() / fontSize.width();
+    int textHeight = src.caps().height() / fontSize.height();
+    bool randomStart = this->m_rain.isEmpty();
+
+    while (this->m_rain.size() < this->m_nDrops)
+        this->m_rain << RainDrop(textWidth,
+                                 textHeight,
+                                 this->m_charTable.size(),
+                                 this->m_minDropLength,
+                                 this->m_maxDropLength,
+                                 this->m_minSpeed,
+                                 this->m_maxSpeed,
+                                 randomStart);
+
+    this->m_videoMixer.begin(&src);
+
+    for (int i = 0; i < this->m_rain.size(); i++) {
+        auto &drop = this->m_rain[i];
+
+        if (drop.isVisible()) {
+            auto sprite = this->renderdrop(drop,
+                                           fontSize,
+                                           characters,
+                                           this->m_showCursor);
+            this->m_videoMixer.draw(drop.x() * fontSize.width(),
+                                    drop.y() * fontSize.height(),
+                                    sprite);
+            drop++;
+        } else {
+            this->m_rain.removeAt(i);
+            i--;
+        }
+    }
+
+    this->m_videoMixer.end();
 }
 
 #include "moc_matrixelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Matrix/src/matrixelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Matrix/src/matrixelement.h
@@ -88,11 +88,21 @@ class MatrixElement: public AkElement
                WRITE setMaxSpeed
                RESET resetMaxSpeed
                NOTIFY maxSpeedChanged)
+    Q_PROPERTY(bool smooth
+               READ smooth
+               WRITE setSmooth
+               RESET resetSmooth
+               NOTIFY smoothChanged)
     Q_PROPERTY(bool showCursor
                READ showCursor
                WRITE setShowCursor
                RESET resetShowCursor
                NOTIFY showCursorChanged)
+    Q_PROPERTY(bool showRain
+               READ showRain
+               WRITE setShowRain
+               RESET resetShowRain
+               NOTIFY showRainChanged)
 
     public:
         MatrixElement();
@@ -110,16 +120,18 @@ class MatrixElement: public AkElement
         Q_INVOKABLE int maxDropLength() const;
         Q_INVOKABLE qreal minSpeed() const;
         Q_INVOKABLE qreal maxSpeed() const;
+        Q_INVOKABLE bool smooth() const;
         Q_INVOKABLE bool showCursor() const;
+        Q_INVOKABLE bool showRain() const;
 
     private:
         MatrixElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void nDropsChanged(int nDrops);
@@ -134,7 +146,9 @@ class MatrixElement: public AkElement
         void maxDropLengthChanged(int maxDropLength);
         void minSpeedChanged(qreal minSpeed);
         void maxSpeedChanged(qreal maxSpeed);
+        void smoothChanged(bool smooth);
         void showCursorChanged(bool showCursor);
+        void showRainChanged(bool showRain);
 
     public slots:
         void setNDrops(int nDrops);
@@ -149,7 +163,9 @@ class MatrixElement: public AkElement
         void setMaxDropLength(int maxDropLength);
         void setMinSpeed(qreal minSpeed);
         void setMaxSpeed(qreal maxSpeed);
+        void setSmooth(bool smooth);
         void setShowCursor(bool showCursor);
+        void setShowRain(bool showRain);
         void resetNDrops();
         void resetCharTable();
         void resetFont();
@@ -162,10 +178,9 @@ class MatrixElement: public AkElement
         void resetMaxDropLength();
         void resetMinSpeed();
         void resetMaxSpeed();
+        void resetSmooth();
         void resetShowCursor();
-
-    private slots:
-        void updateCharTable();
+        void resetShowRain();
 };
 
 #endif // MATRIXELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Matrix/src/raindrop.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Matrix/src/raindrop.cpp
@@ -17,46 +17,29 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QDateTime>
-#include <QFont>
-#include <QPainter>
 #include <QRandomGenerator>
+#include <cstring>
 
 #include "raindrop.h"
 
 class RainDropPrivate
 {
     public:
-        QSize m_textArea;
-        QString m_line;
+        int m_height {0};
+        int m_nCharacters {0};
+        int *m_line {nullptr};
         int m_length {0};
-        QString m_charTable;
-        QFont m_font;
-        QSize m_fontSize;
-        QRgb m_cursorColor {qRgb(255, 255, 255)};
-        QRgb m_startColor {qRgb(0, 255, 0)};
-        QRgb m_endColor {qRgb(0, 0, 0)};
-        QPointF m_pos;
-        QPoint m_prevPos;
+        int m_x {0};
+        qreal m_y {0.0};
+        int m_prevY {0};
         qreal m_speed {0.0};
-        QImage m_sprite;
 
-        int gradientColor(int i, int from, int to, int length);
-        QRgb gradientRgb(int i, QRgb from, QRgb to, int length);
-        QRgb gradient(int i, QRgb from, QRgb mid, QRgb to, int length);
-        QImage drawChar(const QChar &chr,
-                        const QFont &font, const QSize &fontSize,
-                        QRgb foreground, QRgb background) const;
         inline qreal boundedReal(qreal min, qreal max);
 };
 
-RainDrop::RainDrop(const QSize &textArea,
-                   const QString &charTable,
-                   const QFont &font,
-                   const QSize &fontSize,
-                   QRgb cursorColor,
-                   QRgb startColor,
-                   QRgb endColor,
+RainDrop::RainDrop(int width,
+                   int height,
+                   int nCharacters,
                    int minLength,
                    int maxLength,
                    qreal minSpeed,
@@ -64,20 +47,14 @@ RainDrop::RainDrop(const QSize &textArea
                    bool randomStart)
 {
     this->d = new RainDropPrivate;
+    this->d->m_nCharacters = nCharacters;
 
-    for (int i = 0; i < textArea.height(); i++)
-        this->d->m_line.append(QRandomGenerator::global()->bounded(charTable.size()));
-
-    this->d->m_textArea = textArea;
-    int y = randomStart?
-                QRandomGenerator::global()->bounded(textArea.height()): 0;
-    this->d->m_pos =
-            QPointF(QRandomGenerator::global()->bounded(textArea.width()), y);
-    this->d->m_font = font;
-    this->d->m_fontSize = fontSize;
-    this->d->m_cursorColor = cursorColor;
-    this->d->m_startColor = startColor;
-    this->d->m_endColor = endColor;
+    this->d->m_height = height;
+    this->d->m_x = QRandomGenerator::global()->bounded(width);
+    this->d->m_y = randomStart?
+                       QRandomGenerator::global()->bounded(height):
+                       0;
+    this->d->m_prevY = this->d->m_y;
     this->d->m_length =
             QRandomGenerator::global()->bounded(minLength, maxLength);
 
@@ -88,47 +65,60 @@ RainDrop::RainDrop(const QSize &textArea
 
     if (this->d->m_speed < 0.1)
         this->d->m_speed = 0.1;
+
+    if (this->d->m_length > 0) {
+        this->d->m_line = new int [this->d->m_length];
+
+        if (nCharacters > 0)
+            for (int i = 0; i < this->d->m_length; i++)
+                this->d->m_line[i] = QRandomGenerator::global()->bounded(nCharacters);
+        else
+            memset(this->d->m_line, 0, this->d->m_length * sizeof(int));
+    }
 }
 
 RainDrop::RainDrop(const RainDrop &other)
 {
     this->d = new RainDropPrivate;
-    this->d->m_textArea = other.d->m_textArea;
-    this->d->m_line = other.d->m_line;
+    this->d->m_height = other.d->m_height;
+    this->d->m_nCharacters = other.d->m_nCharacters;
     this->d->m_length = other.d->m_length;
-    this->d->m_charTable = other.d->m_charTable;
-    this->d->m_font = other.d->m_font;
-    this->d->m_fontSize = other.d->m_fontSize;
-    this->d->m_cursorColor = other.d->m_cursorColor;
-    this->d->m_startColor = other.d->m_startColor;
-    this->d->m_endColor = other.d->m_endColor;
-    this->d->m_pos = other.d->m_pos;
-    this->d->m_prevPos = other.d->m_prevPos;
+    this->d->m_x = other.d->m_x;
+    this->d->m_y = other.d->m_y;
+    this->d->m_prevY = other.d->m_prevY;
     this->d->m_speed = other.d->m_speed;
-    this->d->m_sprite = other.d->m_sprite;
+
+    if (this->d->m_line)
+        delete [] this->d->m_line;
+
+    this->d->m_line = new int [this->d->m_length];
+    memcpy(this->d->m_line, other.d->m_line, this->d->m_length * sizeof(int));
 }
 
 RainDrop::~RainDrop()
 {
+    if (this->d->m_line)
+        delete [] this->d->m_line;
+
     delete this->d;
 }
 
 RainDrop &RainDrop::operator =(const RainDrop &other)
 {
     if (this != &other) {
-        this->d->m_textArea = other.d->m_textArea;
-        this->d->m_line = other.d->m_line;
+        this->d->m_height = other.d->m_height;
+        this->d->m_nCharacters = other.d->m_nCharacters;
         this->d->m_length = other.d->m_length;
-        this->d->m_charTable = other.d->m_charTable;
-        this->d->m_font = other.d->m_font;
-        this->d->m_fontSize = other.d->m_fontSize;
-        this->d->m_cursorColor = other.d->m_cursorColor;
-        this->d->m_startColor = other.d->m_startColor;
-        this->d->m_endColor = other.d->m_endColor;
-        this->d->m_pos = other.d->m_pos;
-        this->d->m_prevPos = other.d->m_prevPos;
+        this->d->m_x = other.d->m_x;
+        this->d->m_y = other.d->m_y;
+        this->d->m_prevY = other.d->m_prevY;
         this->d->m_speed = other.d->m_speed;
-        this->d->m_sprite = other.d->m_sprite;
+
+        if (this->d->m_line)
+            delete [] this->d->m_line;
+
+        this->d->m_line = new int [this->d->m_length];
+        memcpy(this->d->m_line, other.d->m_line, this->d->m_length * sizeof(int));
     }
 
     return *this;
@@ -136,164 +126,67 @@ RainDrop &RainDrop::operator =(const Rai
 
 RainDrop RainDrop::operator ++(int)
 {
-    RainDrop rainDrop = *this;
-    this->d->m_pos = QPointF(this->d->m_pos.x(),
-                             this->d->m_pos.y() + this->d->m_speed);
+    auto rainDrop = *this;
+    this->d->m_y += this->d->m_speed;
 
-    return rainDrop;
-}
+    if (this->d->m_prevY != int(this->d->m_y)) {
+        memcpy(this->d->m_line + 1, this->d->m_line, (this->d->m_length - 1) * sizeof(int));
+        this->d->m_prevY = int(this->d->m_y);
+    }
 
-bool RainDrop::isVisible() const
-{
-    return int(this->d->m_pos.y() + 1 - this->d->m_length) < this->d->m_line.size();
+    this->d->m_line[0] =
+            this->d->m_nCharacters > 0?
+                QRandomGenerator::global()->bounded(this->d->m_nCharacters):
+                0;
+
+    return rainDrop;
 }
 
-QImage RainDrop::render(QRgb tailColor, bool showCursor)
+RainDrop &RainDrop::operator ++()
 {
-    if (!this->isVisible())
-        return QImage();
-
-    if (this->pos() == this->d->m_prevPos) {
-        if (!showCursor)
-            return this->d->m_sprite;
-
-        QPainter painter;
-        painter.begin(&this->d->m_sprite);
-        QChar c = this->d->m_line[QRandomGenerator::global()->bounded(this->d->m_line.size())];
-        auto sprite =
-                this->d->drawChar(c,
-                                  this->d->m_font,
-                                  this->d->m_fontSize,
-                                  this->d->m_endColor,
-                                  this->d->m_cursorColor);
-        painter.drawImage(0,
-                          (this->d->m_length - 1) * this->d->m_fontSize.height(),
-                          sprite);
-
-        painter.end();
-
-        return this->d->m_sprite;
-    }
-
-    this->d->m_prevPos = this->pos();
+    this->d->m_y += this->d->m_speed;
 
-    QImage drop(this->d->m_fontSize.width(),
-                this->d->m_length * this->d->m_fontSize.height(),
-                QImage::Format_RGB32);
-
-    QPainter painter;
-
-    painter.begin(&drop);
-    QChar chr;
-    QRgb foreground;
-    QRgb background;
-
-    for (int i = 0; i < this->d->m_length; i++) {
-        int c = int(i + this->d->m_pos.y() + 1 - this->d->m_length);
-
-        if (c >= 0 && c < this->d->m_line.size()) {
-            if (i == this->d->m_length - 1) {
-                chr = this->d->m_line[QRandomGenerator::global()->bounded(this->d->m_line.size())];
-
-                if (showCursor) {
-                    foreground = this->d->m_endColor;
-                    background = this->d->m_cursorColor;
-                } else {
-                    foreground = this->d->m_cursorColor;
-                    background = this->d->m_endColor;
-                }
-            } else {
-                chr = this->d->m_line[c];
-                foreground =
-                        this->d->gradient(i,
-                                          tailColor,
-                                          this->d->m_startColor,
-                                          this->d->m_cursorColor,
-                                          this->d->m_length);
-                background = this->d->m_endColor;
-            }
-
-            auto sprite =
-                    this->d->drawChar(chr,
-                                      this->d->m_font,
-                                      this->d->m_fontSize,
-                                      foreground,
-                                      background);
-            painter.drawImage(0, i * this->d->m_fontSize.height(), sprite);
-        }
+    if (this->d->m_prevY != int(this->d->m_y)) {
+        memcpy(this->d->m_line + 1, this->d->m_line, (this->d->m_length - 1) * sizeof(int));
+        this->d->m_prevY = int(this->d->m_y);
     }
 
-    painter.end();
+    this->d->m_line[0] =
+            this->d->m_nCharacters > 0?
+                QRandomGenerator::global()->bounded(this->d->m_nCharacters):
+                0;
 
-    this->d->m_sprite = drop;
-
-    return drop;
+    return *this;
 }
 
-QPoint RainDrop::pos() const
+int RainDrop::length() const
 {
-    int x = int(this->d->m_pos.x() * this->d->m_fontSize.width());
-    int y = int(this->d->m_pos.y() + 1 - this->d->m_length)
-            * this->d->m_fontSize.height();
-
-    return {x, y};
+    return this->d->m_length;
 }
 
-QPoint RainDrop::tail() const
+int RainDrop::chr(int index) const
 {
-    int y = int(this->d->m_pos.y() - this->d->m_length);
-
-    return {int(this->d->m_pos.x()), y};
+    return this->d->m_line[index];
 }
 
-QImage RainDropPrivate::drawChar(const QChar &chr,
-                                 const QFont &font, const QSize &fontSize,
-                                 QRgb foreground, QRgb background) const
-{
-    QImage fontImg(fontSize, QImage::Format_RGB32);
-    fontImg.fill(background);
-
-    QPainter painter;
-
-    painter.begin(&fontImg);
-    painter.setPen(foreground);
-    painter.setFont(font);
-    painter.drawText(fontImg.rect(), chr, Qt::AlignHCenter | Qt::AlignVCenter);
-    painter.end();
-
-    return fontImg;
-}
-
-qreal RainDropPrivate::boundedReal(qreal min, qreal max)
+bool RainDrop::isVisible() const
 {
-    std::uniform_real_distribution<qreal> distribution(min, max);
-
-    return distribution(*QRandomGenerator::global());
+    return int(this->d->m_y - this->d->m_length + 1) < this->d->m_height;
 }
 
-int RainDropPrivate::gradientColor(int i, int from, int to, int length)
+int RainDrop::x() const
 {
-    if (length < 2)
-        return from;
-
-    return (i * (to - from)) / (length - 1) + from;
+    return this->d->m_x;
 }
 
-QRgb RainDropPrivate::gradientRgb(int i, QRgb from, QRgb to, int length)
+int RainDrop::y() const
 {
-    int r = this->gradientColor(i, qRed(from), qRed(to), length);
-    int g = this->gradientColor(i, qGreen(from), qGreen(to), length);
-    int b = this->gradientColor(i, qBlue(from), qBlue(to), length);
-
-    return qRgb(r, g, b);
+    return int(this->d->m_y - this->d->m_length + 1);
 }
 
-QRgb RainDropPrivate::gradient(int i, QRgb from, QRgb mid, QRgb to, int length)
+qreal RainDropPrivate::boundedReal(qreal min, qreal max)
 {
-    int l1 = length >> 1;
-
-    if (i < l1)
-        return this->gradientRgb(i, from, mid, l1);
+    std::uniform_real_distribution<qreal> distribution(min, max);
 
-    return this->gradientRgb(i - l1, mid, to, length - l1);
+    return distribution(*QRandomGenerator::global());
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Matrix/src/raindrop.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Matrix/src/raindrop.h
@@ -20,24 +20,16 @@
 #ifndef RAINDROP_H
 #define RAINDROP_H
 
-#include <qrgb.h>
+#include <qglobal.h>
 
 class RainDropPrivate;
-class QImage;
-class QPoint;
-class QSize;
-class QFont;
 
 class RainDrop
 {
     public:
-        RainDrop(const QSize &textArea,
-                 const QString &charTable,
-                 const QFont &font,
-                 const QSize &fontSize,
-                 QRgb cursorColor,
-                 QRgb startColor,
-                 QRgb endColor,
+        RainDrop(int width,
+                 int height,
+                 int nCharacters,
                  int minLength,
                  int maxLength,
                  qreal minSpeed,
@@ -47,10 +39,12 @@ class RainDrop
         ~RainDrop();
         RainDrop &operator =(const RainDrop &other);
         RainDrop operator ++(int);
+        RainDrop &operator ++();
+        int length() const;
+        int chr(int index) const;
         bool isVisible() const;
-        QImage render(QRgb tailColor, bool showCursor);
-        QPoint pos() const;
-        QPoint tail() const;
+        int x() const;
+        int y() const;
 
     private:
         RainDropPrivate *d;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MatrixTransform/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/MatrixTransform/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(MatrixTransfo
 target_compile_definitions(MatrixTransform PRIVATE AVKYS_PLUGIN_MATRIXTRANSFORM)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(MatrixTransform avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS MatrixTransform RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MatrixTransform/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/MatrixTransform/share/qml/main.qml
@@ -47,6 +47,7 @@ ColumnLayout {
             validator: RegExpValidator {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
+            Accessible.name: qsTr("Column 0, Row 0")
 
             onTextChanged: updateKernel(0, text)
         }
@@ -58,6 +59,7 @@ ColumnLayout {
             validator: RegExpValidator {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
+            Accessible.name: qsTr("Column 1, Row 0")
 
             onTextChanged: updateKernel(1, text)
         }
@@ -69,6 +71,7 @@ ColumnLayout {
             validator: RegExpValidator {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
+            Accessible.name: qsTr("Column 2, Row 0")
 
             onTextChanged: updateKernel(2, text)
         }
@@ -82,6 +85,7 @@ ColumnLayout {
             validator: RegExpValidator {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
+            Accessible.name: qsTr("Column 0, Row 1")
 
             onTextChanged: updateKernel(3, text)
         }
@@ -93,6 +97,7 @@ ColumnLayout {
             validator: RegExpValidator {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
+            Accessible.name: qsTr("Column 1, Row 1")
 
             onTextChanged: updateKernel(4, text)
         }
@@ -104,6 +109,7 @@ ColumnLayout {
             validator: RegExpValidator {
                 regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
             }
+            Accessible.name: qsTr("Column 2, Row 1")
 
             onTextChanged: updateKernel(5, text)
         }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MatrixTransform/src/matrixtransform.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MatrixTransform/src/matrixtransform.h
@@ -29,8 +29,8 @@ class MatrixTransform: public QObject, p
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // MATRIXTRANSFORM_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MatrixTransform/src/matrixtransformelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MatrixTransform/src/matrixtransformelement.cpp
@@ -17,30 +17,45 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QVariant>
-#include <QVector>
-#include <QImage>
 #include <QMutex>
 #include <QQmlContext>
+#include <QVariant>
+#include <QVector>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "matrixtransformelement.h"
 
+#define VALUE_SHIFT 8
+
 class MatrixTransformElementPrivate
 {
     public:
         QVector<qreal> m_kernel;
+        int m_ikernel[6];
         QMutex m_mutex;
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 };
 
 MatrixTransformElement::MatrixTransformElement(): AkElement()
 {
     this->d = new MatrixTransformElementPrivate;
     this->d->m_kernel = {
-        1, 0, 0,
-        0, 1, 0
+        1.0, 0.0, 0.0,
+        0.0, 1.0, 0.0
+    };
+
+    auto mult = 1 << VALUE_SHIFT;
+
+    int ik[] {
+        mult, 0, 0,
+        mult, 0, 0,
     };
+    memcpy(this->d->m_ikernel, ik, 6 * sizeof(int));
 }
 
 MatrixTransformElement::~MatrixTransformElement()
@@ -76,44 +91,54 @@ void MatrixTransformElement::controlInte
 
 AkPacket MatrixTransformElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull())
-        return AkPacket();
+    if (!src)
+        return {};
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame = QImage(src.size(), src.format());
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
 
     this->d->m_mutex.lock();
-    QVector<qreal> kernel = this->d->m_kernel;
-    this->d->m_mutex.unlock();
-
-    qreal det = kernel[0] * kernel[4] - kernel[1] * kernel[3];
-
-    QRect rect(0, 0, src.width(), src.height());
-    int cx = src.width() >> 1;
-    int cy = src.height() >> 1;
-
-    for (int y = 0; y < src.height(); y++) {
-        QRgb *oLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++) {
-            int dx = int(x - cx - kernel[2]);
-            int dy = int(y - cy - kernel[5]);
-
-            int xp = int(cx + (dx * kernel[4] - dy * kernel[3]) / det);
-            int yp = int(cy + (dy * kernel[0] - dx * kernel[1]) / det);
 
-            if (rect.contains(xp, yp)) {
-                const QRgb *iLine = reinterpret_cast<const QRgb *>(src.constScanLine(yp));
+    int cx = src.caps().width() >> 1;
+    int cy = src.caps().height() >> 1;
+    int dxi = -(cx + this->d->m_ikernel[2]);
+    int dy  = -(cy + this->d->m_ikernel[5]);
+    auto mult = 1 << VALUE_SHIFT;
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto oLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+        int dx = dxi;
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            int xp = (dx * this->d->m_ikernel[0] + dy * this->d->m_ikernel[1] + cx * mult) >> VALUE_SHIFT;
+            int yp = (dy * this->d->m_ikernel[3] + dx * this->d->m_ikernel[4] + cy * mult) >> VALUE_SHIFT;
+
+            if (xp >= 0
+                && xp < src.caps().width()
+                && yp >= 0
+                && yp < src.caps().height()) {
+                auto iLine = reinterpret_cast<const QRgb *>(src.constLine(0, yp));
                 oLine[x] = iLine[xp];
-            } else
+            } else {
                 oLine[x] = qRgba(0, 0, 0, 0);
+            }
+
+            dx++;
         }
+
+        dy++;
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    this->d->m_mutex.unlock();
+
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void MatrixTransformElement::setKernel(const QVariantList &kernel)
@@ -126,16 +151,32 @@ void MatrixTransformElement::setKernel(c
     if (this->d->m_kernel == k)
         return;
 
-    QMutexLocker locker(&this->d->m_mutex);
     this->d->m_kernel = k;
+
+    auto det = k[0] * k[4] - k[1] * k[3];
+
+    if (qFuzzyCompare(det, 0.0))
+        det = 0.01;
+
+    auto mult = (1 << VALUE_SHIFT) / det;
+
+    int ik[] {
+        qRound(mult * k[4]), -qRound(mult * k[3]), qRound(k[2]),
+        qRound(mult * k[0]), -qRound(mult * k[1]), qRound(k[5]),
+    };
+
+    this->d->m_mutex.lock();
+    memcpy(this->d->m_ikernel, ik, 6 * sizeof(int));
+    this->d->m_mutex.unlock();
+
     emit this->kernelChanged(kernel);
 }
 
 void MatrixTransformElement::resetKernel()
 {
-    static const QVariantList kernel = {
-        1, 0, 0,
-        0, 1, 0
+    static const QVariantList kernel {
+        1.0, 0.0, 0.0,
+        0.0, 1.0, 0.0
     };
 
     this->setKernel(kernel);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MatrixTransform/src/matrixtransformelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MatrixTransform/src/matrixtransformelement.h
@@ -43,10 +43,10 @@ class MatrixTransformElement: public AkE
         MatrixTransformElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void kernelChanged(const QVariantList &kernel);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/CMakeLists.txt
@@ -42,8 +42,6 @@ add_library(MultiSinkSrc SHARED
             multisink.h
             multisinkelement.cpp
             multisinkelement.h
-            multisinkutils.cpp
-            multisinkutils.h
             ../pspec.json)
 set_target_properties(MultiSinkSrc PROPERTIES
                       OUTPUT_NAME MultiSink)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/ffmpeg/src/audiostream.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/ffmpeg/src/audiostream.cpp
@@ -157,23 +157,15 @@ AudioStream::AudioStream(const AVFormatC
     }
 
     AkAudioCaps audioCaps(configs["caps"].value<AkCaps>());
-    auto ffFormat =
-            AudioStreamPrivate::sampleFormats(audioCaps.planar())
-            .value(audioCaps.format(), AV_SAMPLE_FMT_NONE);
-    auto sampleFormat = QString(av_get_sample_fmt_name(ffFormat));
+    auto sampleFormat = audioCaps.format();
     auto supportedSampleFormats =
-            defaultCodecParams["supportedSampleFormats"].toStringList();
+            defaultCodecParams["supportedSampleFormats"].toList();
 
     if (!supportedSampleFormats.isEmpty()
         && !supportedSampleFormats.contains(sampleFormat)) {
-        auto defaultSampleFormat = defaultCodecParams["defaultSampleFormat"].toString();
-        ffFormat = av_get_sample_fmt(defaultSampleFormat.toStdString().c_str());
-        auto planar = AudioStreamPrivate::planarFormats().contains(ffFormat);
-        auto format =
-                AudioStreamPrivate::sampleFormats(planar)
-                .key(ffFormat, AkAudioCaps::SampleFormat_none);
-        audioCaps.setFormat(format);
-        audioCaps.updatePlaneSize(planar);
+        auto defaultSampleFormat =
+                AkAudioCaps::SampleFormat(defaultCodecParams["defaultSampleFormat"].toInt());
+        audioCaps.setFormat(defaultSampleFormat);
     }
 
     auto supportedSampleRates =
@@ -196,24 +188,25 @@ AudioStream::AudioStream(const AVFormatC
             }
         }
 
-        audioCaps.rate() = sampleRate;
+        audioCaps.setRate(sampleRate);
     }
 
-    auto channelLayout = AkAudioCaps::channelLayoutToString(audioCaps.layout());
+    auto channelLayout = audioCaps.layout();
     auto supportedChannelLayouts =
-            defaultCodecParams["supportedChannelLayouts"].toStringList();
+            defaultCodecParams["supportedChannelLayouts"].toList();
 
-    if (!supportedChannelLayouts.isEmpty() && !supportedChannelLayouts.contains(channelLayout)) {
-        auto defaultChannelLayout = defaultCodecParams["defaultChannelLayout"].toString();
-        auto layout = AkAudioCaps::channelLayoutFromString(defaultChannelLayout);
-        audioCaps.setLayout(layout);
+    if (!supportedChannelLayouts.isEmpty()
+        && !supportedChannelLayouts.contains(channelLayout)) {
+        auto defaultChannelLayout =
+                AkAudioCaps::ChannelLayout(defaultCodecParams["defaultChannelLayout"].toInt());
+        audioCaps.setLayout(defaultChannelLayout);
     }
 
     if (!strcmp(formatContext->oformat->name, "gxf")) {
-        audioCaps.rate() = 48000;
+        audioCaps.setRate(48000);
         audioCaps.setLayout(AkAudioCaps::Layout_mono);
     } else if (!strcmp(formatContext->oformat->name, "mxf")) {
-        audioCaps.rate() = 48000;
+        audioCaps.setRate(48000);
     } else if (!strcmp(formatContext->oformat->name, "swf")) {
         audioCaps = mediaWriter->nearestSWFCaps(audioCaps);
     }
@@ -222,9 +215,15 @@ AudioStream::AudioStream(const AVFormatC
             AudioStreamPrivate::sampleFormats(audioCaps.planar())
             .value(audioCaps.format(), AV_SAMPLE_FMT_NONE);
     codecContext->sample_rate = audioCaps.rate();
-    auto layout = AkAudioCaps::channelLayoutToString(audioCaps.layout());
-    codecContext->channel_layout = av_get_channel_layout(layout.toStdString().c_str());
+    auto layout = AudioStreamPrivate::channelLayouts()
+                  .value(audioCaps.layout(), AV_CH_LAYOUT_STEREO);
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 24, 100)
+    memset(&codecContext->ch_layout, 0, sizeof(AVChannelLayout));
+    av_channel_layout_from_mask(&codecContext->ch_layout, layout);
+#else
+    codecContext->channel_layout = layout;
     codecContext->channels = audioCaps.channels();
+#endif
 
     auto stream = this->stream();
     stream->time_base.num = 1;
@@ -253,20 +252,18 @@ void AudioStream::convertPacket(const Ak
     AVFrame iFrame;
     memset(&iFrame, 0, sizeof(AVFrame));
     iFrame.format = codecContext->sample_fmt;
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 24, 100)
+    av_channel_layout_copy(&iFrame.ch_layout, &codecContext->ch_layout);
+#else
     iFrame.channel_layout = codecContext->channel_layout;
+#endif
     iFrame.sample_rate = codecContext->sample_rate;
-    iFrame.nb_samples = iPacket.caps().samples();
+    iFrame.nb_samples = iPacket.samples();
     iFrame.pts = iPacket.pts();
-    int channels = av_get_channel_layout_nb_channels(iFrame.channel_layout);
 
-    if (av_samples_fill_arrays(iFrame.data,
-                               iFrame.linesize,
-                               reinterpret_cast<const uint8_t *>(iPacket.buffer().constData()),
-                               channels,
-                               iPacket.caps().samples(),
-                               AVSampleFormat(iFrame.format),
-                               1) < 0) {
-        return;
+    for (int plane = 0; plane < iPacket.planes(); ++plane) {
+        iFrame.data[plane] = iPacket.plane(plane);
+        iFrame.linesize[plane] = iPacket.planeSize(plane);
     }
 
     this->d->m_frameMutex.lock();
@@ -274,7 +271,11 @@ void AudioStream::convertPacket(const Ak
     // Create new buffer.
     auto oFrame = av_frame_alloc();
     oFrame->format = codecContext->sample_fmt;
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 24, 100)
+    av_channel_layout_copy(&oFrame->ch_layout, &codecContext->ch_layout);
+#else
     oFrame->channel_layout = codecContext->channel_layout;
+#endif
     oFrame->sample_rate = codecContext->sample_rate;
     oFrame->nb_samples = (this->d->m_frame? this->d->m_frame->nb_samples: 0)
                          + iFrame.nb_samples;
@@ -287,6 +288,12 @@ void AudioStream::convertPacket(const Ak
         return;
     }
 
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 24, 100)
+    int channels = iFrame.ch_layout.nb_channels;
+#else
+    int channels = av_get_channel_layout_nb_channels(iFrame.channel_layout);
+#endif
+
     // Copy old samples to new buffer.
     if (this->d->m_frame)
         if (av_samples_copy(oFrame->data,
@@ -413,11 +420,20 @@ AVFrame *AudioStream::dequeueFrame()
         // Create output buffer.
         oFrame = av_frame_alloc();
         oFrame->format = codecContext->sample_fmt;
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 24, 100)
+        av_channel_layout_copy(&oFrame->ch_layout, &codecContext->ch_layout);
+#else
         oFrame->channel_layout = codecContext->channel_layout;
+#endif
         oFrame->sample_rate = codecContext->sample_rate;
         oFrame->nb_samples = codecContext->frame_size;
         oFrame->pts = this->d->m_frame->pts;
+
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 24, 100)
+        int channels = oFrame->ch_layout.nb_channels;
+#else
         int channels = av_get_channel_layout_nb_channels(oFrame->channel_layout);
+#endif
 
         if (av_frame_get_buffer(oFrame, 0) < 0) {
             this->deleteFrame(&oFrame);
@@ -443,7 +459,11 @@ AVFrame *AudioStream::dequeueFrame()
         // Create new buffer.
         auto frame = av_frame_alloc();
         frame->format = codecContext->sample_fmt;
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 24, 100)
+        av_channel_layout_copy(&frame->ch_layout, &codecContext->ch_layout);
+#else
         frame->channel_layout = codecContext->channel_layout;
+#endif
         frame->sample_rate = codecContext->sample_rate;
         frame->nb_samples = this->d->m_frame->nb_samples - codecContext->frame_size;
         frame->pts = this->d->m_frame->pts + codecContext->frame_size;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/ffmpeg/src/audiostream.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/ffmpeg/src/audiostream.h
@@ -41,13 +41,13 @@ class AudioStream: public AbstractStream
         AudioStreamPrivate *d;
 
     protected:
-        void convertPacket(const AkPacket &packet);
-        int encodeData(AVFrame *frame);
-        AVFrame *dequeueFrame();
+        void convertPacket(const AkPacket &packet) override;
+        int encodeData(AVFrame *frame) override;
+        AVFrame *dequeueFrame() override;
 
     public slots:
-        bool init();
-        void uninit();
+        bool init() override;
+        void uninit() override;
 };
 
 #endif // AUDIOSTREAM_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/ffmpeg/src/mediawriterffmpeg.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/ffmpeg/src/mediawriterffmpeg.cpp
@@ -31,6 +31,7 @@
 #include <akfrac.h>
 #include <akcaps.h>
 #include <akpacket.h>
+#include <aksubtitlecaps.h>
 #include <akvideocaps.h>
 
 #include "mediawriterffmpeg.h"
@@ -49,7 +50,7 @@ extern "C"
     #include <libavutil/mathematics.h>
 }
 
-using AvMediaTypeStrMap = QMap<AVMediaType, QString>;
+using AvMediaAkCapsTypeMap = QMap<AVMediaType, AkCaps::CapsType>;
 using VectorVideoCaps = QVector<AkVideoCaps>;
 using OptionTypeStrMap = QMap<AVOptionType, QString>;
 using SupportedCodecsType = QMap<QString, QMap<AVMediaType, QStringList>>;
@@ -57,7 +58,7 @@ using SupportedCodecsType = QMap<QString
 class MediaWriterFFmpegGlobal
 {
     public:
-        AvMediaTypeStrMap m_mediaTypeToStr;
+        AvMediaAkCapsTypeMap m_mediaTypeToStr;
         VectorVideoCaps m_dvSupportedCaps;
         VectorVideoCaps m_dnXhdSupportedCaps;
         QVector<QSize> m_h261SupportedSize;
@@ -70,7 +71,7 @@ class MediaWriterFFmpegGlobal
         QMap<QString, QVariantMap> m_codecDefaults;
 
         MediaWriterFFmpegGlobal();
-        inline const AvMediaTypeStrMap &initAvMediaTypeStrMap();
+        inline const AvMediaAkCapsTypeMap &initAvMediaAkCapsTypeMap();
         inline const VectorVideoCaps &initDVSupportedCaps();
         inline const VectorVideoCaps &initDNxHDSupportedCaps();
         inline const QVector<QSize> &initH261SupportedSize();
@@ -258,15 +259,15 @@ QVariantList MediaWriterFFmpeg::formatOp
 
 QStringList MediaWriterFFmpeg::supportedCodecs(const QString &format)
 {
-    return this->supportedCodecs(format, "");
+    return this->supportedCodecs(format, AkCaps::CapsUnknown);
 }
 
 QStringList MediaWriterFFmpeg::supportedCodecs(const QString &format,
-                                               const QString &type)
+                                               AkCaps::CapsType type)
 {
     QStringList supportedCodecs;
 
-    if (type.isEmpty()) {
+    if (type == AkCaps::CapsUnknown) {
         for (auto &codecs: mediaWriterFFmpegGlobal->m_supportedCodecs.value(format)) {
             for (auto &codec: codecs)
                 if (!this->m_codecsBlackList.contains(codec))
@@ -290,7 +291,7 @@ QStringList MediaWriterFFmpeg::supported
 }
 
 QString MediaWriterFFmpeg::defaultCodec(const QString &format,
-                                        const QString &type)
+                                        AkCaps::CapsType type)
 {
     auto outputFormat =
             av_guess_format(format.toStdString().c_str(),
@@ -300,11 +301,11 @@ QString MediaWriterFFmpeg::defaultCodec(
     if (!outputFormat)
         return QString();
 
-    AVCodecID codecId = type == "audio/x-raw"?
+    AVCodecID codecId = type == AkCaps::CapsAudio?
                             outputFormat->audio_codec:
-                        type == "video/x-raw"?
+                        type == AkCaps::CapsVideo?
                             outputFormat->video_codec:
-                        type == "text/x-raw"?
+                        type == AkCaps::CapsSubtitle?
                             outputFormat->subtitle_codec:
                             AV_CODEC_ID_NONE;
 
@@ -342,7 +343,7 @@ QString MediaWriterFFmpeg::codecDescript
     return QString(avCodec->long_name);
 }
 
-QString MediaWriterFFmpeg::codecType(const QString &codec)
+AkCaps::CapsType MediaWriterFFmpeg::codecType(const QString &codec)
 {
     auto avCodec =
             avcodec_find_encoder_by_name(codec.toStdString().c_str());
@@ -380,18 +381,18 @@ QVariantMap MediaWriterFFmpeg::addStream
     if (codec.isEmpty())
         return {};
 
-    auto supportedCodecs = this->supportedCodecs(outputFormat, streamCaps.mimeType());
+    auto supportedCodecs = this->supportedCodecs(outputFormat, streamCaps.type());
 
     if (codec.isEmpty() || !supportedCodecs.contains(codec))
-        codec = this->defaultCodec(outputFormat, streamCaps.mimeType());
+        codec = this->defaultCodec(outputFormat, streamCaps.type());
 
     outputParams["codec"] = codec;
     outputParams["caps"] = QVariant::fromValue(streamCaps);
 
     auto defaultCodecParams = this->defaultCodecParams(codec);
 
-    if (streamCaps.mimeType() == "audio/x-raw"
-        || streamCaps.mimeType() == "video/x-raw") {
+    if (streamCaps.type() == AkCaps::CapsAudio
+        || streamCaps.type() == AkCaps::CapsVideo) {
         int bitrate = codecParams.value("bitrate").toInt();
 
         if (bitrate < 1)
@@ -400,7 +401,7 @@ QVariantMap MediaWriterFFmpeg::addStream
         outputParams["bitrate"] = bitrate;
     }
 
-    if (streamCaps.mimeType() == "video/x-raw") {
+    if (streamCaps.type() == AkCaps::CapsVideo) {
         int gop = codecParams.value("gop").toInt();
 
         if (gop < 1)
@@ -440,11 +441,11 @@ QVariantMap MediaWriterFFmpeg::updateStr
     QString codec;
 
     if (codecParams.contains("codec")) {
-        if (this->supportedCodecs(outputFormat, streamCaps.mimeType())
+        if (this->supportedCodecs(outputFormat, streamCaps.type())
             .contains(codecParams["codec"].toString())) {
             codec = codecParams["codec"].toString();
         } else
-            codec = this->defaultCodec(outputFormat, streamCaps.mimeType());
+            codec = this->defaultCodec(outputFormat, streamCaps.type());
 
         this->d->m_streamConfigs[index]["codec"] = codec;
         streamChanged = true;
@@ -453,8 +454,8 @@ QVariantMap MediaWriterFFmpeg::updateStr
 
     auto codecDefaults = this->defaultCodecParams(codec);
 
-    if ((streamCaps.mimeType() == "audio/x-raw"
-         || streamCaps.mimeType() == "video/x-raw")
+    if ((streamCaps.type() == AkCaps::CapsAudio
+         || streamCaps.type() == AkCaps::CapsVideo)
         && codecParams.contains("bitrate")) {
         int bitRate = codecParams["bitrate"].toInt();
         this->d->m_streamConfigs[index]["bitrate"] =
@@ -462,7 +463,7 @@ QVariantMap MediaWriterFFmpeg::updateStr
         streamChanged = true;
     }
 
-    if (streamCaps.mimeType() == "video/x-raw"
+    if (streamCaps.type() == AkCaps::CapsVideo
         && codecParams.contains("gop")) {
         int gop = codecParams["gop"].toInt();
         this->d->m_streamConfigs[index]["gop"] =
@@ -969,7 +970,7 @@ AkAudioCaps MediaWriterFFmpeg::nearestSW
     }
 
     AkAudioCaps nearestCaps(caps);
-    nearestCaps.rate() = nearestSampleRate;
+    nearestCaps.setRate(nearestSampleRate);
 
     return nearestCaps;
 }
@@ -1118,7 +1119,7 @@ bool MediaWriterFFmpeg::init()
         for (auto &configs: streamConfigs) {
             auto streamCaps = configs["caps"].value<AkCaps>();
 
-            if (streamCaps.mimeType() == "video/x-raw") {
+            if (streamCaps.type() == AkCaps::CapsVideo) {
                 mxfConfigs << configs;
 
                 break;
@@ -1129,7 +1130,7 @@ bool MediaWriterFFmpeg::init()
             for (auto &configs: streamConfigs) {
                 auto streamCaps = configs["caps"].value<AkCaps>();
 
-                if (streamCaps.mimeType() == "audio/x-raw") {
+                if (streamCaps.type() == AkCaps::CapsAudio) {
                     mxfConfigs << configs;
 
                     break;
@@ -1149,14 +1150,14 @@ bool MediaWriterFFmpeg::init()
         AbstractStreamPtr mediaStream;
         int inputId = configs["index"].toInt();
 
-        if (streamCaps.mimeType() == "audio/x-raw") {
+        if (streamCaps.type() == AkCaps::CapsAudio) {
             mediaStream =
                     AbstractStreamPtr(new AudioStream(this->d->m_formatContext,
                                                       uint(i), inputId,
                                                       configs,
                                                       this->d->m_codecOptions,
                                                       this));
-        } else if (streamCaps.mimeType() == "video/x-raw") {
+        } else if (streamCaps.type() == AkCaps::CapsVideo) {
             mediaStream =
                     AbstractStreamPtr(new VideoStream(this->d->m_formatContext,
                                                       uint(i), inputId,
@@ -1271,7 +1272,7 @@ MediaWriterFFmpegGlobal::MediaWriterFFmp
     av_log_set_level(AV_LOG_QUIET);
 #endif
 
-    this->m_mediaTypeToStr = this->initAvMediaTypeStrMap();
+    this->m_mediaTypeToStr = this->initAvMediaAkCapsTypeMap();
     this->m_dvSupportedCaps = this->initDVSupportedCaps();
     this->m_dnXhdSupportedCaps = this->initDNxHDSupportedCaps();
     this->m_h261SupportedSize = this->initH261SupportedSize();
@@ -1284,19 +1285,16 @@ MediaWriterFFmpegGlobal::MediaWriterFFmp
     this->m_codecDefaults = this->initCodecDefaults();
 }
 
-const AvMediaTypeStrMap &MediaWriterFFmpegGlobal::initAvMediaTypeStrMap()
+const AvMediaAkCapsTypeMap &MediaWriterFFmpegGlobal::initAvMediaAkCapsTypeMap()
 {
-    static const AvMediaTypeStrMap mediaTypeToStr = {
-        {AVMEDIA_TYPE_UNKNOWN   , "unknown/x-raw"   },
-        {AVMEDIA_TYPE_VIDEO     , "video/x-raw"     },
-        {AVMEDIA_TYPE_AUDIO     , "audio/x-raw"     },
-        {AVMEDIA_TYPE_DATA      , "data/x-raw"      },
-        {AVMEDIA_TYPE_SUBTITLE  , "text/x-raw"      },
-        {AVMEDIA_TYPE_ATTACHMENT, "attachment/x-raw"},
-        {AVMEDIA_TYPE_NB        , "nb/x-raw"        }
+    static const AvMediaAkCapsTypeMap mediaTypeToCapsType = {
+        {AVMEDIA_TYPE_UNKNOWN   , AkCaps::CapsUnknown },
+        {AVMEDIA_TYPE_VIDEO     , AkCaps::CapsVideo   },
+        {AVMEDIA_TYPE_AUDIO     , AkCaps::CapsAudio   },
+        {AVMEDIA_TYPE_SUBTITLE  , AkCaps::CapsSubtitle},
     };
 
-    return mediaTypeToStr;
+    return mediaTypeToCapsType;
 }
 
 const VectorVideoCaps &MediaWriterFFmpegGlobal::initDVSupportedCaps()
@@ -1624,14 +1622,30 @@ QMap<QString, QVariantMap> MediaWriterFF
                 }
 
             QStringList supportedChannelLayouts;
-            char layout[1024];
-
+            static const size_t layoutStrSize = 1024;
+            char layout[layoutStrSize];
+            memset(&layout, 0, layoutStrSize);
+
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 24, 100)
+            if (codec->ch_layouts)
+                for (int i = 0; codec->ch_layouts[i].nb_channels > 0; i++) {
+                    auto &channelLayout = codec->ch_layouts[i];
+                    av_channel_layout_describe(&channelLayout,
+                                               layout,
+                                               layoutStrSize);
+                    supportedChannelLayouts << QString(layout);
+                }
+#else
             if (codec->channel_layouts)
                 for (int i = 0; auto channelLayout = codec->channel_layouts[i]; i++) {
                     int channels = av_get_channel_layout_nb_channels(channelLayout);
-                    av_get_channel_layout_string(layout, 1024, channels, channelLayout);
+                    av_get_channel_layout_string(layout,
+                                                 layoutStrSize,
+                                                 channels,
+                                                 channelLayout);
                     supportedChannelLayouts << QString(layout);
                 }
+#endif
 
             if (supportedChannelLayouts.isEmpty())
                 switch (codec->id) {
@@ -1641,9 +1655,22 @@ QMap<QString, QVariantMap> MediaWriterFF
                 case AV_CODEC_ID_G723_1:
                 case AV_CODEC_ID_GSM_MS:
                 case AV_CODEC_ID_NELLYMOSER: {
-                    uint64_t channelLayout = AV_CH_LAYOUT_MONO;
-                    int channels = av_get_channel_layout_nb_channels(channelLayout);
-                    av_get_channel_layout_string(layout, 1024, channels, channelLayout);
+                    uint64_t defaultChannelLayout = AV_CH_LAYOUT_MONO;
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 24, 100)
+                    AVChannelLayout channelLayout;
+                    memset(&channelLayout, 0, sizeof(AVChannelLayout));
+                    av_channel_layout_from_mask(&channelLayout,
+                                                defaultChannelLayout);
+                    av_channel_layout_describe(&channelLayout,
+                                               layout,
+                                               layoutStrSize);
+#else
+                    int channels = av_get_channel_layout_nb_channels(defaultChannelLayout);
+                    av_get_channel_layout_string(layout,
+                                                 layoutStrSize,
+                                                 channels,
+                                                 defaultChannelLayout);
+#endif
                     supportedChannelLayouts << QString(layout);
                 }
                     break;
@@ -1677,25 +1704,41 @@ QMap<QString, QVariantMap> MediaWriterFF
                         codecContext->sample_rate:
                         supportedSampleRates.value(0, 44100);
 
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 24, 100)
+            av_channel_layout_describe(&codecContext->ch_layout,
+                                       layout,
+                                       layoutStrSize);
+            QString channelLayout = codecContext->ch_layout.nb_channels > 0?
+                                        QString(layout):
+                                        supportedChannelLayouts.value(0, "mono");
+#else
             int channels =
                     av_get_channel_layout_nb_channels(codecContext->channel_layout);
             av_get_channel_layout_string(layout,
-                                         1024,
+                                         layoutStrSize,
                                          channels,
                                          codecContext->channel_layout);
-
             QString channelLayout = codecContext->channel_layout?
                                         QString(layout):
                                         supportedChannelLayouts.value(0, "mono");
+#endif
 
             codecParams["defaultChannelLayout"] = channelLayout;
-
-            int channelsCount =
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 24, 100)
+            int codecChannelsCount = codecContext->ch_layout.nb_channels;
+            AVChannelLayout ffChannelLayout;
+            memset(&ffChannelLayout, 0, sizeof(AVChannelLayout));
+            av_channel_layout_from_string(&ffChannelLayout,
+                                          channelLayout.toStdString().c_str());
+            int streamChannelsCount = ffChannelLayout.nb_channels;
+#else
+            int codecChannelsCount = codecContext->channels;
+            int streamChannelsCount =
                     av_get_channel_layout_nb_channels(av_get_channel_layout(channelLayout.toStdString().c_str()));
-
-            codecParams["defaultChannels"] = codecContext->channels?
-                                                 codecContext->channels:
-                                                 channelsCount;
+#endif
+            codecParams["defaultChannels"] = codecChannelsCount?
+                                                 codecChannelsCount:
+                                                 streamChannelsCount;
         } else if (codec->type == AVMEDIA_TYPE_VIDEO) {
             QVariantList supportedFrameRates;
 
@@ -1719,16 +1762,19 @@ QMap<QString, QVariantMap> MediaWriterFF
 
             codecParams["supportedFrameRates"] = supportedFrameRates;
 
-            QStringList supportedPixelFormats;
+            QVariantList supportedPixelFormats;
 
             if (codec->pix_fmts)
                 for (int i = 0; ; i++) {
-                    AVPixelFormat pixelFormat = codec->pix_fmts[i];
+                    auto pixelFormat = codec->pix_fmts[i];
 
                     if (pixelFormat == AV_PIX_FMT_NONE)
                         break;
 
-                    supportedPixelFormats << QString(av_get_pix_fmt_name(pixelFormat));
+                    auto akFormat = VideoStream::ffToAkFormat(pixelFormat);
+
+                    if (akFormat != AkVideoCaps::Format_none)
+                        supportedPixelFormats << int(akFormat);
                 }
 
             codecParams["supportedPixelFormats"] = supportedPixelFormats;
@@ -1736,10 +1782,11 @@ QMap<QString, QVariantMap> MediaWriterFF
                                             codecContext->gop_size: 12;
             codecParams["defaultBitRate"] = qMax<qint64>(codecContext->bit_rate,
                                                          1500000);
+            auto akFormat = VideoStream::ffToAkFormat(codecContext->pix_fmt);
             codecParams["defaultPixelFormat"] =
-                    codecContext->pix_fmt != AV_PIX_FMT_NONE?
-                                                 QString(av_get_pix_fmt_name(codecContext->pix_fmt)):
-                                                 supportedPixelFormats.value(0, "yuv420p");
+                    codecContext->pix_fmt != AV_PIX_FMT_NONE && akFormat != AkVideoCaps::Format_none?
+                                                 int(akFormat):
+                                                 supportedPixelFormats.value(0, int(AkVideoCaps::Format_yuv420p)).toInt();
         }
 
         codecDefaults[codec->name] = codecParams;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/ffmpeg/src/mediawriterffmpeg.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/ffmpeg/src/mediawriterffmpeg.h
@@ -35,32 +35,31 @@ class MediaWriterFFmpeg: public MediaWri
         MediaWriterFFmpeg(QObject *parent=nullptr);
         ~MediaWriterFFmpeg();
 
-        Q_INVOKABLE QString defaultFormat();
-        Q_INVOKABLE QString outputFormat() const;
-        Q_INVOKABLE QVariantList streams() const;
-        Q_INVOKABLE qint64 maxPacketQueueSize() const;
-
-        Q_INVOKABLE QStringList supportedFormats();
-        Q_INVOKABLE QStringList fileExtensions(const QString &format);
-        Q_INVOKABLE QString formatDescription(const QString &format);
-        Q_INVOKABLE QVariantList formatOptions();
-        Q_INVOKABLE QStringList supportedCodecs(const QString &format);
+        Q_INVOKABLE QString defaultFormat() override;
+        Q_INVOKABLE QString outputFormat() const override;
+        Q_INVOKABLE QVariantList streams() const override;
+        Q_INVOKABLE qint64 maxPacketQueueSize() const override;
+        Q_INVOKABLE QStringList supportedFormats() override;
+        Q_INVOKABLE QStringList fileExtensions(const QString &format) override;
+        Q_INVOKABLE QString formatDescription(const QString &format) override;
+        Q_INVOKABLE QVariantList formatOptions() override;
+        Q_INVOKABLE QStringList supportedCodecs(const QString &format) override;
         Q_INVOKABLE QStringList supportedCodecs(const QString &format,
-                                                const QString &type);
+                                                AkCaps::CapsType type) override;
         Q_INVOKABLE QString defaultCodec(const QString &format,
-                                         const QString &type);
-        Q_INVOKABLE QString codecDescription(const QString &codec);
-        Q_INVOKABLE QString codecType(const QString &codec);
-        Q_INVOKABLE QVariantMap defaultCodecParams(const QString &codec);
+                                         AkCaps::CapsType type) override;
+        Q_INVOKABLE QString codecDescription(const QString &codec) override;
+        Q_INVOKABLE AkCaps::CapsType codecType(const QString &codec) override;
+        Q_INVOKABLE QVariantMap defaultCodecParams(const QString &codec) override;
         Q_INVOKABLE QVariantMap addStream(int streamIndex,
-                                          const AkCaps &streamCaps);
+                                          const AkCaps &streamCaps) override;
         Q_INVOKABLE QVariantMap addStream(int streamIndex,
                                           const AkCaps &streamCaps,
-                                          const QVariantMap &codecParams);
-        Q_INVOKABLE QVariantMap updateStream(int index);
+                                          const QVariantMap &codecParams) override;
+        Q_INVOKABLE QVariantMap updateStream(int index) override;
         Q_INVOKABLE QVariantMap updateStream(int index,
-                                             const QVariantMap &codecParams);
-        Q_INVOKABLE QVariantList codecOptions(int index);
+                                             const QVariantMap &codecParams) override;
+        Q_INVOKABLE QVariantList codecOptions(int index) override;
 
     private:
         MediaWriterFFmpegPrivate *d;
@@ -73,18 +72,18 @@ class MediaWriterFFmpeg: public MediaWri
         AkAudioCaps nearestSWFCaps(const AkAudioCaps &caps) const;
 
     public slots:
-        void setOutputFormat(const QString &outputFormat);
-        void setFormatOptions(const QVariantMap &formatOptions);
-        void setCodecOptions(int index, const QVariantMap &codecOptions);
-        void setMaxPacketQueueSize(qint64 maxPacketQueueSize);
-        void resetOutputFormat();
-        void resetFormatOptions();
-        void resetCodecOptions(int index);
-        void resetMaxPacketQueueSize();
-        void enqueuePacket(const AkPacket &packet);
-        void clearStreams();
-        bool init();
-        void uninit();
+        void setOutputFormat(const QString &outputFormat) override;
+        void setFormatOptions(const QVariantMap &formatOptions) override;
+        void setCodecOptions(int index, const QVariantMap &codecOptions) override;
+        void setMaxPacketQueueSize(qint64 maxPacketQueueSize) override;
+        void resetOutputFormat() override;
+        void resetFormatOptions() override;
+        void resetCodecOptions(int index) override;
+        void resetMaxPacketQueueSize() override;
+        void enqueuePacket(const AkPacket &packet) override;
+        void clearStreams() override;
+        bool init() override;
+        void uninit() override;
 
     private slots:
         void writePacket(AVPacket *packet);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/ffmpeg/src/videostream.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/ffmpeg/src/videostream.cpp
@@ -37,21 +37,180 @@ extern "C"
 #include "videostream.h"
 #include "mediawriterffmpeg.h"
 
-struct XRGB
-{
-    quint8 x;
-    quint8 r;
-    quint8 g;
-    quint8 b;
-};
+using FFToAkFormatMap = QMap<AVPixelFormat, AkVideoCaps::PixelFormat>;
 
-struct BGRX
+inline const FFToAkFormatMap &initFFToAkFormatMap()
 {
-    quint8 b;
-    quint8 g;
-    quint8 r;
-    quint8 x;
-};
+    static const FFToAkFormatMap formatMap = {
+        {AV_PIX_FMT_NONE        , AkVideoCaps::Format_none        },
+        {AV_PIX_FMT_YUV420P     , AkVideoCaps::Format_yuv420p     },
+        {AV_PIX_FMT_YUYV422     , AkVideoCaps::Format_yuyv422     },
+        {AV_PIX_FMT_RGB24       , AkVideoCaps::Format_rgb24       },
+        {AV_PIX_FMT_BGR24       , AkVideoCaps::Format_bgr24       },
+        {AV_PIX_FMT_YUV422P     , AkVideoCaps::Format_yuv422p     },
+        {AV_PIX_FMT_YUV444P     , AkVideoCaps::Format_yuv444p     },
+        {AV_PIX_FMT_YUV410P     , AkVideoCaps::Format_yuv410p     },
+        {AV_PIX_FMT_YUV411P     , AkVideoCaps::Format_yuv411p     },
+        {AV_PIX_FMT_GRAY8       , AkVideoCaps::Format_gray8       },
+        {AV_PIX_FMT_UYVY422     , AkVideoCaps::Format_uyvy422     },
+        {AV_PIX_FMT_BGR8        , AkVideoCaps::Format_bgr233      },
+        {AV_PIX_FMT_RGB8        , AkVideoCaps::Format_rgb332      },
+        {AV_PIX_FMT_NV12        , AkVideoCaps::Format_nv12        },
+        {AV_PIX_FMT_NV21        , AkVideoCaps::Format_nv21        },
+        {AV_PIX_FMT_ARGB        , AkVideoCaps::Format_argb        },
+        {AV_PIX_FMT_RGBA        , AkVideoCaps::Format_rgba        },
+        {AV_PIX_FMT_ABGR        , AkVideoCaps::Format_abgr        },
+        {AV_PIX_FMT_BGRA        , AkVideoCaps::Format_bgra        },
+        {AV_PIX_FMT_GRAY16BE    , AkVideoCaps::Format_gray16be    },
+        {AV_PIX_FMT_GRAY16LE    , AkVideoCaps::Format_gray16le    },
+        {AV_PIX_FMT_YUV440P     , AkVideoCaps::Format_yuv440p     },
+        {AV_PIX_FMT_YUVA420P    , AkVideoCaps::Format_yuva420p    },
+        {AV_PIX_FMT_RGB48BE     , AkVideoCaps::Format_bgr555le    },
+        {AV_PIX_FMT_RGB48LE     , AkVideoCaps::Format_rgb48be     },
+        {AV_PIX_FMT_RGB565BE    , AkVideoCaps::Format_rgb48le     },
+        {AV_PIX_FMT_RGB565LE    , AkVideoCaps::Format_rgb565be    },
+        {AV_PIX_FMT_RGB555BE    , AkVideoCaps::Format_rgb565le    },
+        {AV_PIX_FMT_RGB555LE    , AkVideoCaps::Format_rgb555be    },
+        {AV_PIX_FMT_BGR565BE    , AkVideoCaps::Format_rgb555le    },
+        {AV_PIX_FMT_BGR565LE    , AkVideoCaps::Format_bgr565be    },
+        {AV_PIX_FMT_BGR555BE    , AkVideoCaps::Format_bgr565le    },
+        {AV_PIX_FMT_BGR555LE    , AkVideoCaps::Format_bgr555be    },
+        {AV_PIX_FMT_YUV420P16LE , AkVideoCaps::Format_yuv420p16le },
+        {AV_PIX_FMT_YUV420P16BE , AkVideoCaps::Format_yuv420p16be },
+        {AV_PIX_FMT_YUV422P16LE , AkVideoCaps::Format_yuv422p16le },
+        {AV_PIX_FMT_YUV422P16BE , AkVideoCaps::Format_yuv422p16be },
+        {AV_PIX_FMT_YUV444P16LE , AkVideoCaps::Format_yuv444p16le },
+        {AV_PIX_FMT_YUV444P16BE , AkVideoCaps::Format_yuv444p16be },
+        {AV_PIX_FMT_RGB444LE    , AkVideoCaps::Format_rgb444le    },
+        {AV_PIX_FMT_RGB444BE    , AkVideoCaps::Format_rgb444be    },
+        {AV_PIX_FMT_BGR444LE    , AkVideoCaps::Format_bgr444le    },
+        {AV_PIX_FMT_BGR444BE    , AkVideoCaps::Format_bgr444be    },
+        {AV_PIX_FMT_YA8         , AkVideoCaps::Format_graya8      },
+        {AV_PIX_FMT_Y400A       , AkVideoCaps::Format_graya8      },
+        {AV_PIX_FMT_GRAY8A      , AkVideoCaps::Format_graya8      },
+        {AV_PIX_FMT_BGR48BE     , AkVideoCaps::Format_bgr48be     },
+        {AV_PIX_FMT_BGR48LE     , AkVideoCaps::Format_bgr48le     },
+        {AV_PIX_FMT_YUV420P9BE  , AkVideoCaps::Format_yuv420p9be  },
+        {AV_PIX_FMT_YUV420P9LE  , AkVideoCaps::Format_yuv420p9le  },
+        {AV_PIX_FMT_YUV420P10BE , AkVideoCaps::Format_yuv420p10be },
+        {AV_PIX_FMT_YUV420P10LE , AkVideoCaps::Format_yuv420p10le },
+        {AV_PIX_FMT_YUV422P10BE , AkVideoCaps::Format_yuv422p10be },
+        {AV_PIX_FMT_YUV422P10LE , AkVideoCaps::Format_yuv422p10le },
+        {AV_PIX_FMT_YUV444P9BE  , AkVideoCaps::Format_yuv444p9be  },
+        {AV_PIX_FMT_YUV444P9LE  , AkVideoCaps::Format_yuv444p9le  },
+        {AV_PIX_FMT_YUV444P10BE , AkVideoCaps::Format_yuv444p10be },
+        {AV_PIX_FMT_YUV444P10LE , AkVideoCaps::Format_yuv444p10le },
+        {AV_PIX_FMT_YUV422P9BE  , AkVideoCaps::Format_yuv422p9be  },
+        {AV_PIX_FMT_YUV422P9LE  , AkVideoCaps::Format_yuv422p9le  },
+        {AV_PIX_FMT_GBRP        , AkVideoCaps::Format_gbrp        },
+        {AV_PIX_FMT_GBR24P      , AkVideoCaps::Format_gbr24p      },
+        {AV_PIX_FMT_GBRP9BE     , AkVideoCaps::Format_gbrp9be     },
+        {AV_PIX_FMT_GBRP9LE     , AkVideoCaps::Format_gbrp9le     },
+        {AV_PIX_FMT_GBRP10BE    , AkVideoCaps::Format_gbrp10be    },
+        {AV_PIX_FMT_GBRP10LE    , AkVideoCaps::Format_gbrp10le    },
+        {AV_PIX_FMT_GBRP16BE    , AkVideoCaps::Format_gbrp16be    },
+        {AV_PIX_FMT_GBRP16LE    , AkVideoCaps::Format_gbrp16le    },
+        {AV_PIX_FMT_YUVA422P    , AkVideoCaps::Format_yuva422p    },
+        {AV_PIX_FMT_YUVA444P    , AkVideoCaps::Format_yuva444p    },
+        {AV_PIX_FMT_YUVA420P9BE , AkVideoCaps::Format_yuva420p9be },
+        {AV_PIX_FMT_YUVA420P9LE , AkVideoCaps::Format_yuva420p9le },
+        {AV_PIX_FMT_YUVA422P9BE , AkVideoCaps::Format_yuva422p9be },
+        {AV_PIX_FMT_YUVA422P9LE , AkVideoCaps::Format_yuva422p9le },
+        {AV_PIX_FMT_YUVA444P9BE , AkVideoCaps::Format_yuva444p9be },
+        {AV_PIX_FMT_YUVA444P9LE , AkVideoCaps::Format_yuva444p9le },
+        {AV_PIX_FMT_YUVA420P10BE, AkVideoCaps::Format_yuva420p10be},
+        {AV_PIX_FMT_YUVA420P10LE, AkVideoCaps::Format_yuva420p10le},
+        {AV_PIX_FMT_YUVA422P10BE, AkVideoCaps::Format_yuva422p10be},
+        {AV_PIX_FMT_YUVA422P10LE, AkVideoCaps::Format_yuva422p10le},
+        {AV_PIX_FMT_YUVA444P10BE, AkVideoCaps::Format_yuva444p10be},
+        {AV_PIX_FMT_YUVA444P10LE, AkVideoCaps::Format_yuva444p10le},
+        {AV_PIX_FMT_YUVA420P16BE, AkVideoCaps::Format_yuva420p16be},
+        {AV_PIX_FMT_YUVA420P16LE, AkVideoCaps::Format_yuva420p16le},
+        {AV_PIX_FMT_YUVA422P16BE, AkVideoCaps::Format_yuva422p16be},
+        {AV_PIX_FMT_YUVA422P16LE, AkVideoCaps::Format_yuva422p16le},
+        {AV_PIX_FMT_YUVA444P16BE, AkVideoCaps::Format_yuva444p16be},
+        {AV_PIX_FMT_YUVA444P16LE, AkVideoCaps::Format_yuva444p16le},
+        {AV_PIX_FMT_NV16        , AkVideoCaps::Format_nv16        },
+        {AV_PIX_FMT_NV20LE      , AkVideoCaps::Format_nv20le      },
+        {AV_PIX_FMT_NV20BE      , AkVideoCaps::Format_nv20be      },
+        {AV_PIX_FMT_RGBA64BE    , AkVideoCaps::Format_rgba64be    },
+        {AV_PIX_FMT_RGBA64LE    , AkVideoCaps::Format_rgba64le    },
+        {AV_PIX_FMT_BGRA64BE    , AkVideoCaps::Format_bgra64be    },
+        {AV_PIX_FMT_BGRA64LE    , AkVideoCaps::Format_bgra64le    },
+        {AV_PIX_FMT_YVYU422     , AkVideoCaps::Format_yvyu422     },
+        {AV_PIX_FMT_YA16BE      , AkVideoCaps::Format_graya16be   },
+        {AV_PIX_FMT_YA16LE      , AkVideoCaps::Format_graya16le   },
+        {AV_PIX_FMT_GBRAP       , AkVideoCaps::Format_gbrap       },
+        {AV_PIX_FMT_GBRAP16BE   , AkVideoCaps::Format_gbrap16be   },
+        {AV_PIX_FMT_GBRAP16LE   , AkVideoCaps::Format_gbrap16le   },
+        {AV_PIX_FMT_0RGB        , AkVideoCaps::Format_0rgb        },
+        {AV_PIX_FMT_RGB0        , AkVideoCaps::Format_rgb0        },
+        {AV_PIX_FMT_0BGR        , AkVideoCaps::Format_0bgr        },
+        {AV_PIX_FMT_BGR0        , AkVideoCaps::Format_bgr0        },
+        {AV_PIX_FMT_YUV420P12BE , AkVideoCaps::Format_yuv420p12be },
+        {AV_PIX_FMT_YUV420P12LE , AkVideoCaps::Format_yuv420p12le },
+        {AV_PIX_FMT_YUV420P14BE , AkVideoCaps::Format_yuv420p14be },
+        {AV_PIX_FMT_YUV420P14LE , AkVideoCaps::Format_yuv420p14le },
+        {AV_PIX_FMT_YUV422P12BE , AkVideoCaps::Format_yuv422p12be },
+        {AV_PIX_FMT_YUV422P12LE , AkVideoCaps::Format_yuv422p12le },
+        {AV_PIX_FMT_YUV422P14BE , AkVideoCaps::Format_yuv422p14be },
+        {AV_PIX_FMT_YUV422P14LE , AkVideoCaps::Format_yuv422p14le },
+        {AV_PIX_FMT_YUV444P12BE , AkVideoCaps::Format_yuv444p12be },
+        {AV_PIX_FMT_YUV444P12LE , AkVideoCaps::Format_yuv444p12le },
+        {AV_PIX_FMT_YUV444P14BE , AkVideoCaps::Format_yuv444p14be },
+        {AV_PIX_FMT_YUV444P14LE , AkVideoCaps::Format_yuv444p14le },
+        {AV_PIX_FMT_GBRP12BE    , AkVideoCaps::Format_gbrp12be    },
+        {AV_PIX_FMT_GBRP12LE    , AkVideoCaps::Format_gbrp12le    },
+        {AV_PIX_FMT_GBRP14BE    , AkVideoCaps::Format_gbrp14be    },
+        {AV_PIX_FMT_GBRP14LE    , AkVideoCaps::Format_gbrp14le    },
+        {AV_PIX_FMT_YUV440P10LE , AkVideoCaps::Format_yuv440p10le },
+        {AV_PIX_FMT_YUV440P10BE , AkVideoCaps::Format_yuv440p10be },
+        {AV_PIX_FMT_YUV440P12LE , AkVideoCaps::Format_yuv440p12le },
+        {AV_PIX_FMT_YUV440P12BE , AkVideoCaps::Format_yuv440p12be },
+        {AV_PIX_FMT_AYUV64LE    , AkVideoCaps::Format_ayuv64le    },
+        {AV_PIX_FMT_AYUV64BE    , AkVideoCaps::Format_ayuv64be    },
+        {AV_PIX_FMT_P010LE      , AkVideoCaps::Format_p010le      },
+        {AV_PIX_FMT_P010BE      , AkVideoCaps::Format_p010be      },
+        {AV_PIX_FMT_GBRAP12BE   , AkVideoCaps::Format_gbrap12be   },
+        {AV_PIX_FMT_GBRAP12LE   , AkVideoCaps::Format_gbrap12le   },
+        {AV_PIX_FMT_GBRAP10BE   , AkVideoCaps::Format_gbrap10be   },
+        {AV_PIX_FMT_GBRAP10LE   , AkVideoCaps::Format_gbrap10le   },
+        {AV_PIX_FMT_GRAY12BE    , AkVideoCaps::Format_gray12be    },
+        {AV_PIX_FMT_GRAY12LE    , AkVideoCaps::Format_gray12le    },
+        {AV_PIX_FMT_GRAY10BE    , AkVideoCaps::Format_gray10be    },
+        {AV_PIX_FMT_GRAY10LE    , AkVideoCaps::Format_gray10le    },
+        {AV_PIX_FMT_P016LE      , AkVideoCaps::Format_p016le      },
+        {AV_PIX_FMT_P016BE      , AkVideoCaps::Format_p016be      },
+        {AV_PIX_FMT_GRAY9BE     , AkVideoCaps::Format_gray9be     },
+        {AV_PIX_FMT_GRAY9LE     , AkVideoCaps::Format_gray9le     },
+        {AV_PIX_FMT_GRAY14BE    , AkVideoCaps::Format_gray14be    },
+        {AV_PIX_FMT_GRAY14LE    , AkVideoCaps::Format_gray14le    },
+        {AV_PIX_FMT_YUVA422P12BE, AkVideoCaps::Format_yuva422p12be},
+        {AV_PIX_FMT_YUVA422P12LE, AkVideoCaps::Format_yuva422p12le},
+        {AV_PIX_FMT_YUVA444P12BE, AkVideoCaps::Format_yuva444p12be},
+        {AV_PIX_FMT_YUVA444P12LE, AkVideoCaps::Format_yuva444p12le},
+        {AV_PIX_FMT_NV24        , AkVideoCaps::Format_nv24        },
+        {AV_PIX_FMT_NV42        , AkVideoCaps::Format_nv42        },
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 42, 100)
+        {AV_PIX_FMT_Y210BE      , AkVideoCaps::Format_y210be      },
+        {AV_PIX_FMT_Y210LE      , AkVideoCaps::Format_y210le      },
+#endif
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 9, 100)
+        {AV_PIX_FMT_P210BE      , AkVideoCaps::Format_p210be      },
+        {AV_PIX_FMT_P210LE      , AkVideoCaps::Format_p210le      },
+        {AV_PIX_FMT_P410BE      , AkVideoCaps::Format_p410be      },
+        {AV_PIX_FMT_P410LE      , AkVideoCaps::Format_p410le      },
+        {AV_PIX_FMT_P216BE      , AkVideoCaps::Format_p216be      },
+        {AV_PIX_FMT_P216LE      , AkVideoCaps::Format_p216le      },
+        {AV_PIX_FMT_P416BE      , AkVideoCaps::Format_p416be      },
+        {AV_PIX_FMT_P416LE      , AkVideoCaps::Format_p416le      },
+#endif
+    };
+
+    return formatMap;
+}
+
+Q_GLOBAL_STATIC_WITH_ARGS(FFToAkFormatMap, ffToAkFormatMap, (initFFToAkFormatMap()))
 
 class VideoStreamPrivate
 {
@@ -62,8 +221,6 @@ class VideoStreamPrivate
         int64_t m_lastPts {AV_NOPTS_VALUE};
         int64_t m_refPts {AV_NOPTS_VALUE};
         QWaitCondition m_frameReady;
-
-        QImage swapChannels(const QImage &image) const;
 };
 
 VideoStream::VideoStream(const AVFormatContext *formatContext,
@@ -91,14 +248,14 @@ VideoStream::VideoStream(const AVFormatC
 
     AkVideoCaps videoCaps(configs["caps"].value<AkCaps>());
 
-    auto pixelFormat = AkVideoCaps::pixelFormatToString(videoCaps.format());
+    auto pixelFormat = videoCaps.format();
     auto supportedPixelFormats =
-            defaultCodecParams["supportedPixelFormats"].toStringList();
+            defaultCodecParams["supportedPixelFormats"].toList();
 
-    if (!supportedPixelFormats.isEmpty()
-        && !supportedPixelFormats.contains(pixelFormat)) {
-        auto defaultPixelFormat = defaultCodecParams["defaultPixelFormat"].toString();
-        videoCaps.setFormat(AkVideoCaps::pixelFormatFromString(defaultPixelFormat));
+    if (!supportedPixelFormats.contains(int(pixelFormat))) {
+        auto defaultPixelFormat =
+                AkVideoCaps::PixelFormat(defaultCodecParams["defaultPixelFormat"].toInt());
+        videoCaps.setFormat(defaultPixelFormat);
     }
 
     auto supportedFrameRates =
@@ -163,8 +320,8 @@ VideoStream::VideoStream(const AVFormatC
     if (!strcmp(formatContext->oformat->name, "gxf"))
         videoCaps = mediaWriter->nearestGXFCaps(videoCaps);
 
-    auto pixelFormatStr = AkVideoCaps::pixelFormatToString(videoCaps.format());
-    codecContext->pix_fmt = av_get_pix_fmt(pixelFormatStr.toStdString().c_str());
+    codecContext->pix_fmt = ffToAkFormatMap->key(videoCaps.format(),
+                                                 AV_PIX_FMT_NONE);
     codecContext->width = videoCaps.width();
     codecContext->height = videoCaps.height();
 
@@ -187,23 +344,9 @@ VideoStream::~VideoStream()
     delete this->d;
 }
 
-QImage VideoStreamPrivate::swapChannels(const QImage &image) const
+AkVideoCaps::PixelFormat VideoStream::ffToAkFormat(AVPixelFormat format)
 {
-    QImage swapped(image.size(), image.format());
-
-    for (int y = 0; y < image.height(); y++) {
-        auto src = reinterpret_cast<const XRGB *>(image.constScanLine(y));
-        auto dst = reinterpret_cast<BGRX *>(swapped.scanLine(y));
-
-        for (int x = 0; x < image.width(); x++) {
-            dst[x].x = src[x].x;
-            dst[x].r = src[x].r;
-            dst[x].g = src[x].g;
-            dst[x].b = src[x].b;
-        }
-    }
-
-    return swapped;
+    return ffToAkFormatMap->value(format, AkVideoCaps::Format_none);
 }
 
 void VideoStream::convertPacket(const AkPacket &packet)
@@ -211,6 +354,18 @@ void VideoStream::convertPacket(const Ak
     if (!packet)
         return;
 
+    AkVideoPacket videoPacket(packet);
+    auto iFormat = ffToAkFormatMap->key(videoPacket.caps().format(), AV_PIX_FMT_NONE);
+
+    if (iFormat == AV_PIX_FMT_NONE)
+        return;
+
+    int iWidth = videoPacket.caps().width();
+    int iHeight = videoPacket.caps().height();
+
+    if (iWidth < 1 || iHeight < 1)
+        return;
+
     auto codecContext = this->codecContext();
 
     auto oFrame = av_frame_alloc();
@@ -219,17 +374,6 @@ void VideoStream::convertPacket(const Ak
     oFrame->height = codecContext->height;
     oFrame->pts = packet.pts();
 
-    AkVideoPacket videoPacket(packet);
-    auto image = videoPacket.toImage();
-    image = image.convertToFormat(QImage::Format_ARGB32);
-    image = this->d->swapChannels(image);
-    videoPacket = AkVideoPacket::fromImage(image, videoPacket);
-
-    QString format = AkVideoCaps::pixelFormatToString(videoPacket.caps().format());
-    AVPixelFormat iFormat = av_get_pix_fmt(format.toStdString().c_str());
-    int iWidth = videoPacket.caps().width();
-    int iHeight = videoPacket.caps().height();
-
     this->d->m_scaleContext =
             sws_getCachedContext(this->d->m_scaleContext,
                                  iWidth,
@@ -249,23 +393,9 @@ void VideoStream::convertPacket(const Ak
     AVFrame iFrame;
     memset(&iFrame, 0, sizeof(AVFrame));
 
-    if (av_image_check_size(uint(iWidth),
-                            uint(iHeight),
-                            0,
-                            nullptr) < 0)
-        return;
-
-    if (av_image_fill_linesizes(iFrame.linesize,
-                                iFormat,
-                                iWidth) < 0)
-        return;
-
-    if (av_image_fill_pointers(reinterpret_cast<uint8_t **>(iFrame.data),
-                               iFormat,
-                               iHeight,
-                               reinterpret_cast<uint8_t *>(videoPacket.buffer().data()),
-                               iFrame.linesize) < 0) {
-        return;
+    for (int plane = 0; plane < videoPacket.planes(); ++plane) {
+        iFrame.data[plane] = videoPacket.plane(plane);
+        iFrame.linesize[plane] = videoPacket.lineSize(plane);
     }
 
     if (av_frame_get_buffer(oFrame, 4) < 0)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/ffmpeg/src/videostream.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/ffmpeg/src/videostream.h
@@ -20,6 +20,8 @@
 #ifndef VIDEOSTREAM_H
 #define VIDEOSTREAM_H
 
+#include <akvideocaps.h>
+
 #include "abstractstream.h"
 
 class VideoStreamPrivate;
@@ -37,13 +39,15 @@ class VideoStream: public AbstractStream
                     QObject *parent=nullptr);
         ~VideoStream();
 
+        Q_INVOKABLE static AkVideoCaps::PixelFormat ffToAkFormat(AVPixelFormat format);
+
     private:
         VideoStreamPrivate *d;
 
     protected:
-        void convertPacket(const AkPacket &packet);
-        int encodeData(AVFrame *frame);
-        AVFrame *dequeueFrame();
+        void convertPacket(const AkPacket &packet) override;
+        int encodeData(AVFrame *frame) override;
+        AVFrame *dequeueFrame() override;
 };
 
 #endif // VIDEOSTREAM_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/gstreamer/src/mediawritergstreamer.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/gstreamer/src/mediawritergstreamer.cpp
@@ -25,15 +25,20 @@
 #include <QFileInfo>
 #include <QtConcurrent>
 #include <QThreadPool>
-#include <akfrac.h>
-#include <akcaps.h>
 #include <akaudiocaps.h>
-#include <akpacket.h>
 #include <akaudiopacket.h>
+#include <akcaps.h>
+#include <akfrac.h>
+#include <akpacket.h>
+#include <aksubtitlecaps.h>
+#include <aksubtitlepacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 #include <gst/gst.h>
 #include <gst/app/gstappsrc.h>
 #include <gst/pbutils/encoding-profile.h>
+#include <gst/video/video.h>
 
 #include "mediawritergstreamer.h"
 #include "outputparams.h"
@@ -60,8 +65,10 @@ class MediaWriterGStreamerPrivate
         QThreadPool m_threadPool;
         GstElement *m_pipeline {nullptr};
         GMainLoop *m_mainLoop {nullptr};
+        QFuture<void> m_mainLoopResult;
         guint m_busWatchId {0};
         bool m_isRecording {false};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_rgb24, 0, 0, {}}};
 
         explicit MediaWriterGStreamerPrivate(MediaWriterGStreamer *self);
         QString guessFormat(const QString &fileName);
@@ -85,6 +92,31 @@ class MediaWriterGStreamerPrivate
                                      const QList<AkFrac> &frameRates) const;
         AkVideoCaps nearestFrameSize(const AkVideoCaps &caps,
                                      const QList<QSize> &frameSizes) const;
+        bool setDefaultAudioCodecParams(const QString &codec,
+                                        GstCaps *rawCaps,
+                                        QVariantMap &codecParams);
+        bool setDefaultVideoCodecParams(const QString &codec,
+                                        GstCaps *rawCaps,
+                                        QVariantMap &codecParams);
+        void initAudio(int index,
+                       const QString &optKey,
+                       const AkCaps &streamCaps,
+                       const QVariantMap &codecDefaults,
+                       const QVariantMap &configs,
+                       const QString &codec,
+                       const QString &outputFormat,
+                       GstElement *muxer);
+        void initVideo(int index,
+                       const QString &optKey,
+                       const AkCaps &streamCaps,
+                       const QVariantMap &codecDefaults,
+                       const QVariantMap &configs,
+                       const QString &codec,
+                       const QString &outputFormat,
+                       GstElement *muxer);
+        void writeAudioPacket(const AkAudioPacket &packet);
+        void writeVideoPacket(const AkVideoPacket &packet);
+        void writeSubtitlePacket(const AkSubtitlePacket &packet);
 
         inline static const GstToSampleFormatMap &gstToSampleFormat()
         {
@@ -129,7 +161,7 @@ class MediaWriterGStreamerPrivate
                 {AkVideoCaps::Format_yuv444p     , "Y444"     },
                 {AkVideoCaps::Format_nv12        , "NV12"     },
                 {AkVideoCaps::Format_nv21        , "NV21"     },
-                {AkVideoCaps::Format_gray        , "GRAY8"    },
+                {AkVideoCaps::Format_gray8       , "GRAY8"    },
                 {AkVideoCaps::Format_gray16be    , "GRAY16_BE"},
                 {AkVideoCaps::Format_gray16le    , "GRAY16_LE"},
                 {AkVideoCaps::Format_rgb565le    , "RGB16"    },
@@ -137,7 +169,6 @@ class MediaWriterGStreamerPrivate
                 {AkVideoCaps::Format_rgb555le    , "RGB15"    },
                 {AkVideoCaps::Format_rgb555le    , "BGR15"    },
                 {AkVideoCaps::Format_yuva420p    , "A420"     },
-                {AkVideoCaps::Format_pal8        , "RGB8P"    },
                 {AkVideoCaps::Format_yuv410p     , "YUV9"     },
                 {AkVideoCaps::Format_ayuv64le    , "AYUV64"   },
                 {AkVideoCaps::Format_yuv420p10be , "I420_10BE"},
@@ -427,11 +458,11 @@ QVariantList MediaWriterGStreamer::forma
 
 QStringList MediaWriterGStreamer::supportedCodecs(const QString &format)
 {
-    return this->supportedCodecs(format, "");
+    return this->supportedCodecs(format, AkCaps::CapsUnknown);
 }
 
 QStringList MediaWriterGStreamer::supportedCodecs(const QString &format,
-                                                  const QString &type)
+                                                  AkCaps::CapsType type)
 {
     auto factory = gst_element_factory_find(format.toStdString().c_str());
 
@@ -453,6 +484,12 @@ QStringList MediaWriterGStreamer::suppor
                             "subpicture/x-dvd;"
                             "subpicture/x-pgs");
 
+    static const QMap<QString, AkCaps::CapsType> structureTypeToAk {
+        {"audio/x-raw", AkCaps::CapsAudio   },
+        {"video/x-raw", AkCaps::CapsVideo   },
+        {"text/x-raw" , AkCaps::CapsSubtitle},
+    };
+
     auto rawCaps = gst_static_caps_get(&staticRawCaps);
     auto encodersList =
             gst_element_factory_list_get_elements(GST_ELEMENT_FACTORY_TYPE_ENCODER,
@@ -476,14 +513,16 @@ QStringList MediaWriterGStreamer::suppor
                 auto compCaps = gst_caps_from_string(structureStr);
 
                 if (gst_caps_can_intersect(compCaps, rawCaps)) {
-                    if (!type.isEmpty() && structureType != type) {
+                    if (type != AkCaps::CapsUnknown
+                        && structureTypeToAk.value(structureType,
+                                                   AkCaps::CapsUnknown) != type) {
                         gst_caps_unref(compCaps);
                         g_free(structureStr);
 
                         continue;
                     }
 
-                    auto codecType = structureType.mid(0, type.indexOf('/')).remove("/x-raw");
+                    auto codecType = structureType.mid(0, structureType.indexOf('/'));
 
                     if (gst_structure_has_field(capsStructure, "format")) {
                         GType fieldType = gst_structure_get_field_type(capsStructure, "format");
@@ -491,7 +530,7 @@ QStringList MediaWriterGStreamer::suppor
                         if (fieldType == G_TYPE_STRING) {
                             auto format = gst_structure_get_string(capsStructure, "format");
                             auto codecId = QString("identity/%1/%2")
-                                           .arg(codecType,format);
+                                           .arg(codecType, format);
 
                             if (!supportedCodecs.contains(codecId)
                                 && !this->m_codecsBlackList.contains(codecId))
@@ -531,14 +570,14 @@ QStringList MediaWriterGStreamer::suppor
                         auto klass =
                                 gst_element_factory_get_metadata(encoder,
                                                                  GST_ELEMENT_METADATA_KLASS);
-                        QString codecType =
+                        AkCaps::CapsType codecType =
                                 !strcmp(klass, "Codec/Encoder/Audio")?
-                                    "audio/x-raw":
+                                    AkCaps::CapsAudio:
                                 (!strcmp(klass, "Codec/Encoder/Video")
                                  || !strcmp(klass, "Codec/Encoder/Image"))?
-                                     "video/x-raw": "";
+                                     AkCaps::CapsVideo: AkCaps::CapsUnknown;
 
-                        if (!type.isEmpty() && type != codecType)
+                        if (type != AkCaps::CapsUnknown && type != codecType)
                             continue;
 
                         if (!supportedCodecs.contains(GST_OBJECT_NAME(encoder)))
@@ -598,7 +637,7 @@ QStringList MediaWriterGStreamer::suppor
 }
 
 QString MediaWriterGStreamer::defaultCodec(const QString &format,
-                                           const QString &type)
+                                           AkCaps::CapsType type)
 {
     auto codecs = this->supportedCodecs(format, type);
 
@@ -636,18 +675,18 @@ QString MediaWriterGStreamer::codecDescr
     return description;
 }
 
-QString MediaWriterGStreamer::codecType(const QString &codec)
+AkCaps::CapsType MediaWriterGStreamer::codecType(const QString &codec)
 {
     if (codec.startsWith("identity/audio"))
-        return {"audio/x-raw"};
+        return AkCaps::CapsAudio;
 
     if (codec.startsWith("identity/video"))
-        return {"video/x-raw"};
+        return AkCaps::CapsVideo;
 
     if (codec.startsWith("identity/text"))
-        return {"text/x-raw"};
+        return AkCaps::CapsSubtitle;
 
-    QString codecType;
+    AkCaps::CapsType codecType;
     auto factory = gst_element_factory_find(codec.toStdString().c_str());
 
     if (factory) {
@@ -658,10 +697,10 @@ QString MediaWriterGStreamer::codecType(
                                                           GST_ELEMENT_METADATA_KLASS);
             codecType =
                     !strcmp(klass, "Codec/Encoder/Audio")?
-                        "audio/x-raw":
+                        AkCaps::CapsAudio:
                     (!strcmp(klass, "Codec/Encoder/Video")
                      || !strcmp(klass, "Codec/Encoder/Image"))?
-                         "video/x-raw": "";
+                         AkCaps::CapsVideo: AkCaps::CapsUnknown;
             gst_object_unref(feature);
         }
 
@@ -674,7 +713,6 @@ QString MediaWriterGStreamer::codecType(
 QVariantMap MediaWriterGStreamer::defaultCodecParams(const QString &codec)
 {
     QVariantMap codecParams;
-    QString codecType = this->codecType(codec);
 
     static GstStaticCaps staticRawCaps = GST_STATIC_CAPS("video/x-raw;"
                                                          "audio/x-raw;"
@@ -683,430 +721,26 @@ QVariantMap MediaWriterGStreamer::defaul
                                                          "subpicture/x-pgs");
 
     auto rawCaps = gst_static_caps_get(&staticRawCaps);
+    bool result = true;
 
-    if (codecType == "audio/x-raw") {
-        if (codec.startsWith("identity/audio")) {
-            auto gstFormat = codec.split("/").at(2);
-            auto sampleFormat =
-                    MediaWriterGStreamerPrivate::gstToSampleFormat().key(gstFormat,
-                                                                         AkAudioCaps::SampleFormat_none);
-            auto sampleFormatStr = AkAudioCaps::sampleFormatToString(sampleFormat);
-            codecParams["defaultBitRate"] = 128000;
-            codecParams["supportedSampleFormats"] = QStringList {sampleFormatStr};
-            codecParams["supportedChannelLayouts"] = QStringList {"mono", "stereo"};
-            codecParams["supportedSampleRates"] = QVariantList();
-            codecParams["defaultSampleFormat"] = sampleFormatStr;
-            codecParams["defaultChannelLayout"] = "stereo";
-            codecParams["defaultChannels"] = 2;
-            codecParams["defaultSampleRate"] = 44100;
-        } else {
-            auto factory =
-                    gst_element_factory_find(codec.toStdString().c_str());
-
-            if (!factory) {
-                gst_caps_unref(rawCaps);
-
-                return {};
-            }
-
-            auto feature = gst_plugin_feature_load(GST_PLUGIN_FEATURE(factory));
-
-            if (!feature) {
-                gst_object_unref(factory);
-                gst_caps_unref(rawCaps);
-
-                return {};
-            }
-
-            QStringList supportedSampleFormats;
-            QVariantList supportedSamplerates;
-            QStringList supportedChannelLayouts;
-
-            auto pads = gst_element_factory_get_static_pad_templates(GST_ELEMENT_FACTORY(feature));
-
-            for (auto padItem = pads;
-                 padItem;
-                 padItem = g_list_next(padItem)) {
-                auto padtemplate =
-                        reinterpret_cast<GstStaticPadTemplate *>(padItem->data);
-
-                if (padtemplate->direction == GST_PAD_SINK
-                    && padtemplate->presence == GST_PAD_ALWAYS) {
-                    auto caps =
-                            gst_caps_from_string(padtemplate->static_caps.string);
-
-                    for (guint i = 0; i < gst_caps_get_size(caps); i++) {
-                        auto capsStructure = gst_caps_get_structure(caps, i);
-                        auto structureStr = gst_structure_to_string(capsStructure);
-                        auto compCaps = gst_caps_from_string(structureStr);
-
-                        if (gst_caps_can_intersect(compCaps, rawCaps)) {
-                            // Get supported formats
-                            if (gst_structure_has_field(capsStructure, "format")) {
-                                GType fieldType = gst_structure_get_field_type(capsStructure, "format");
-
-                                if (fieldType == G_TYPE_STRING) {
-                                    auto format = gst_structure_get_string(capsStructure, "format");
-                                    auto formatFF =
-                                            MediaWriterGStreamerPrivate::gstToSampleFormat().key(format,
-                                                                                                 AkAudioCaps::SampleFormat_none);
-                                    auto formatFFStr = AkAudioCaps::sampleFormatToString(formatFF);
-
-                                    if (!formatFFStr.isEmpty()
-                                        && formatFFStr != "none"
-                                        && !supportedSampleFormats.contains(formatFFStr))
-                                        supportedSampleFormats << formatFFStr;
-                                } else if (fieldType == GST_TYPE_LIST) {
-                                    const GValue *formats = gst_structure_get_value(capsStructure, "format");
-
-                                    for (guint i = 0; i < gst_value_list_get_size(formats); i++) {
-                                        auto format = gst_value_list_get_value(formats, i);
-                                        auto formatId = g_value_get_string(format);
-                                        auto formatFF =
-                                                MediaWriterGStreamerPrivate::gstToSampleFormat().key(formatId,
-                                                                                                     AkAudioCaps::SampleFormat_none);
-                                        auto formatFFStr = AkAudioCaps::sampleFormatToString(formatFF);
-
-                                        if (!formatFFStr.isEmpty()
-                                            && formatFFStr != "none"
-                                            && !supportedSampleFormats.contains(formatFFStr))
-                                            supportedSampleFormats << formatFFStr;
-                                    }
-                                }
-                            }
-
-                            // Get supported sample rates
-                            if (gst_structure_has_field(capsStructure, "rate")) {
-                                GType fieldType = gst_structure_get_field_type(capsStructure, "rate");
-
-                                if (fieldType == G_TYPE_INT) {
-                                    gint rate;
-                                    gst_structure_get_int(capsStructure, "rate", &rate);
-
-                                    if (!supportedSamplerates.contains(rate))
-                                        supportedSamplerates << rate;
-                                } else if (fieldType == GST_TYPE_INT_RANGE) {
-                                } else if (fieldType == GST_TYPE_LIST) {
-                                    auto rates = gst_structure_get_value(capsStructure, "rate");
-
-                                    for (guint i = 0;
-                                         i < gst_value_list_get_size(rates);
-                                         i++) {
-                                        auto rate = gst_value_list_get_value(rates, i);
-                                        gint rateId = g_value_get_int(rate);
-
-                                        if (!supportedSamplerates.contains(rateId))
-                                            supportedSamplerates << rateId;
-                                    }
-                                }
-                            }
-
-                            // Get supported channel layouts
-                            if (gst_structure_has_field(capsStructure, "channels")) {
-                                GType fieldType = gst_structure_get_field_type(capsStructure, "channels");
-
-                                if (fieldType == G_TYPE_INT) {
-                                    gint channels;
-                                    gst_structure_get_int(capsStructure, "channels", &channels);
-                                    auto layout = AkAudioCaps::defaultChannelLayoutString(channels);
-
-                                    if (!supportedChannelLayouts.contains(layout))
-                                        supportedChannelLayouts << layout;
-                                } else if (fieldType == GST_TYPE_INT_RANGE) {
-                                    auto channels = gst_structure_get_value(capsStructure, "channels");
-
-                                    int min = gst_value_get_int_range_min(channels);
-                                    int max = gst_value_get_int_range_max(channels) + 1;
-                                    int step = gst_value_get_int_range_step(channels);
-
-                                    for (int i = min; i < max; i += step) {
-                                        auto layout = AkAudioCaps::defaultChannelLayoutString(i);
-
-                                        if (!supportedChannelLayouts.contains(layout))
-                                            supportedChannelLayouts << layout;
-                                    }
-                                } else if (fieldType == GST_TYPE_LIST) {
-                                    auto channels = gst_structure_get_value(capsStructure, "channels");
-
-                                    for (guint i = 0; i < gst_value_list_get_size(channels); i++) {
-                                        auto nchannels = gst_value_list_get_value(channels, i);
-                                        gint nchannelsId = g_value_get_int(nchannels);
-                                        auto layout = AkAudioCaps::defaultChannelLayoutString(nchannelsId);
-
-                                        if (!supportedChannelLayouts.contains(layout))
-                                            supportedChannelLayouts << layout;
-                                    }
-                                }
-                            }
-                        }
-
-                        gst_caps_unref(compCaps);
-                        g_free(structureStr);
-                    }
-
-                    gst_caps_unref(caps);
-                }
-            }
-
-            auto element =
-                    gst_element_factory_create(GST_ELEMENT_FACTORY(feature),
-                                               nullptr);
-
-            if (!element) {
-                gst_object_unref(feature);
-                gst_object_unref(factory);
-                gst_caps_unref(rawCaps);
-
-                return {};
-            }
-
-            int bitrate = 0;
-
-            if (g_object_class_find_property(G_OBJECT_GET_CLASS(element), "bitrate"))
-                g_object_get(G_OBJECT(element), "bitrate", &bitrate, nullptr);
-
-            if (codec == "lamemp3enc")
-                bitrate *= 1000;
-
-            if (bitrate < 1)
-                bitrate = 128000;
-
-            codecParams["defaultBitRate"] = bitrate;
-            codecParams["supportedSampleFormats"] = supportedSampleFormats;
-            codecParams["supportedChannelLayouts"] = supportedChannelLayouts;
-            codecParams["supportedSampleRates"] = supportedSamplerates;
-            codecParams["defaultSampleFormat"] =
-                    supportedSampleFormats.isEmpty()?
-                        QString("s16"): supportedSampleFormats.at(0);
-            QString channelLayout =
-                    supportedChannelLayouts.isEmpty()?
-                        QString("stereo"): supportedChannelLayouts.at(0);
-            codecParams["defaultChannelLayout"] = channelLayout;
-            codecParams["defaultChannels"] = AkAudioCaps::channelCount(channelLayout);
-            codecParams["defaultSampleRate"] = supportedSamplerates.isEmpty()?
-                                                 44100: supportedSamplerates.at(0);
-
-            gst_object_unref(element);
-            gst_object_unref(feature);
-            gst_object_unref(factory);
-        }
-    } else if (codecType == "video/x-raw") {
-        if (codec.startsWith("identity/video")) {
-            auto gstFormat = codec.split("/").at(2);
-            auto pixelFormat =
-                    MediaWriterGStreamerPrivate::gstToPixelFormat().key(gstFormat,
-                                                                        AkVideoCaps::Format_none);
-            auto pixelFormatStr = AkVideoCaps::pixelFormatToString(pixelFormat);
-            codecParams["defaultBitRate"] = 1500000;
-            codecParams["defaultGOP"] = 12;
-            codecParams["supportedFrameRates"] = QVariantList();
-            codecParams["supportedPixelFormats"] = QStringList {pixelFormatStr};
-            codecParams["supportedFrameSizes"] = QVariantList();
-            codecParams["defaultPixelFormat"] = pixelFormatStr;
-        } else {
-            auto factory = gst_element_factory_find(codec.toStdString().c_str());
-
-            if (!factory) {
-                gst_caps_unref(rawCaps);
-
-                return {};
-            }
-
-            auto feature = gst_plugin_feature_load(GST_PLUGIN_FEATURE(factory));
-
-            if (!feature) {
-                gst_object_unref(factory);
-                gst_caps_unref(rawCaps);
-
-                return {};
-            }
-
-            QStringList supportedPixelFormats;
-            QVariantList supportedFramerates;
-            SizeList supportedFrameSizes;
-
-            auto pads = gst_element_factory_get_static_pad_templates(GST_ELEMENT_FACTORY(feature));
-
-            for (auto padItem = pads; padItem; padItem = g_list_next(padItem)) {
-                auto padtemplate =
-                        reinterpret_cast<GstStaticPadTemplate *>(padItem->data);
-
-                if (padtemplate->direction == GST_PAD_SINK
-                    && padtemplate->presence == GST_PAD_ALWAYS) {
-                    auto caps = gst_caps_from_string(padtemplate->static_caps.string);
-
-                    for (guint i = 0; i < gst_caps_get_size(caps); i++) {
-                        auto capsStructure = gst_caps_get_structure(caps, i);
-                        auto structureStr = gst_structure_to_string(capsStructure);
-                        auto compCaps = gst_caps_from_string(structureStr);
-
-                        if (gst_caps_can_intersect(compCaps, rawCaps)) {
-                            // Get supported formats
-                            if (gst_structure_has_field(capsStructure, "format")) {
-                                GType fieldType = gst_structure_get_field_type(capsStructure, "format");
-
-                                if (fieldType == G_TYPE_STRING) {
-                                    auto format = gst_structure_get_string(capsStructure, "format");
-                                    auto formatFF =
-                                            MediaWriterGStreamerPrivate::gstToPixelFormat()
-                                            .key(format, AkVideoCaps::Format_none);
-                                    auto formatFFStr =
-                                            AkVideoCaps::pixelFormatToString(formatFF);
-
-                                    if (!formatFFStr.isEmpty()
-                                        && formatFFStr != "none"
-                                        && !supportedPixelFormats.contains(formatFFStr))
-                                        supportedPixelFormats << formatFFStr;
-                                } else if (fieldType == GST_TYPE_LIST) {
-                                    auto formats = gst_structure_get_value(capsStructure, "format");
-
-                                    for (guint i = 0; i < gst_value_list_get_size(formats); i++) {
-                                        auto format = gst_value_list_get_value(formats, i);
-                                        auto formatId = g_value_get_string(format);
-                                        auto formatFF =
-                                                MediaWriterGStreamerPrivate::gstToPixelFormat()
-                                                .key(formatId, AkVideoCaps::Format_none);
-                                        auto formatFFStr =
-                                                AkVideoCaps::pixelFormatToString(formatFF);
-
-                                        if (!formatFFStr.isEmpty()
-                                            && formatFFStr != "none"
-                                            && !supportedPixelFormats.contains(formatFFStr))
-                                            supportedPixelFormats << formatFFStr;
-                                    }
-                                }
-                            }
-
-                            // Get supported frame sizes
-                            if (gst_structure_has_field(capsStructure, "width")
-                                && gst_structure_has_field(capsStructure, "height")) {
-                                gint width = 0;
-                                gint height = 0;
-
-                                GType fieldType = gst_structure_get_field_type(capsStructure, "width");
-
-                                if (fieldType == G_TYPE_INT)
-                                    gst_structure_get_int(capsStructure, "width", &width);
-
-                                fieldType = gst_structure_get_field_type(capsStructure, "height");
-
-                                if (fieldType == G_TYPE_INT)
-                                    gst_structure_get_int(capsStructure, "height", &height);
-
-                                QSize size(width, height);
+    switch (this->codecType(codec)) {
+    case AkCaps::CapsAudio:
+        result = this->d->setDefaultAudioCodecParams(codec, rawCaps, codecParams);
 
-                                if (!size.isEmpty() && !supportedFrameSizes.contains(size))
-                                    supportedFrameSizes << size;
-                            }
-
-                            // Get supported frame rates
-                            if (gst_structure_has_field(capsStructure, "framerate")) {
-                                GType fieldType = gst_structure_get_field_type(capsStructure, "framerate");
-
-                                if (fieldType == GST_TYPE_FRACTION_RANGE) {
-                                } else if (fieldType == GST_TYPE_LIST) {
-                                    auto framerates = gst_structure_get_value(capsStructure, "framerate");
-
-                                    for (guint i = 0; i < gst_value_list_get_size(framerates); i++) {
-                                        auto frate = gst_value_list_get_value(framerates, i);
-                                        auto num = gst_value_get_fraction_numerator(frate);
-                                        auto den = gst_value_get_fraction_denominator(frate);
-                                        AkFrac framerate(num, den);
-                                        auto fps = QVariant::fromValue(framerate);
-
-                                         if (!supportedFramerates.contains(fps))
-                                             supportedFramerates << fps;
-                                    }
-                                } else if (fieldType == GST_TYPE_FRACTION) {
-                                    gint num = 0;
-                                    gint den = 0;
-                                    gst_structure_get_fraction(capsStructure,
-                                                               "framerate",
-                                                               &num,
-                                                               &den);
-                                   AkFrac framerate(num, den);
-                                   auto fps = QVariant::fromValue(framerate);
-
-                                    if (!supportedFramerates.contains(fps))
-                                        supportedFramerates << fps;
-                                }
-                            }
-                        }
-
-                        gst_caps_unref(compCaps);
-                        g_free(structureStr);
-                    }
-
-                    gst_caps_unref(caps);
-                }
-            }
-
-            auto element =
-                    gst_element_factory_create(GST_ELEMENT_FACTORY(feature),
-                                               nullptr);
-
-            if (!element) {
-                gst_object_unref(feature);
-                gst_object_unref(factory);
-                gst_caps_unref(rawCaps);
-
-                return {};
-            }
-
-            // Read default bitrate
-            int bitrate = 0;
-
-            const char *propBitrate =
-                    QRegExp("vp\\d+enc").exactMatch(codec)?
-                        "target-bitrate": "bitrate";
-
-            if (g_object_class_find_property(G_OBJECT_GET_CLASS(element), propBitrate))
-                g_object_get(G_OBJECT(element), propBitrate, &bitrate, nullptr);
-
-            if (codec == "x264enc"
-                || codec == "x265enc"
-                || codec == "mpeg2enc"
-                || codec == "theoraenc")
-                bitrate *= 1000;
-
-            if (bitrate < 1500000)
-                bitrate = 1500000;
-
-            // Read default GOP
-            int gop = 0;
-            QStringList gops {"keyframe-max-dist", "gop-size"};
-
-            for (auto &g: gops)
-                if (g_object_class_find_property(G_OBJECT_GET_CLASS(element),
-                                                 g.toStdString().c_str())) {
-                    g_object_get(G_OBJECT(element),
-                                 g.toStdString().c_str(),
-                                 &gop,
-                                 nullptr);
-
-                    break;
-                }
-
-            if (gop < 1)
-                gop = 12;
-
-            codecParams["defaultBitRate"] = bitrate;
-            codecParams["defaultGOP"] = gop;
-            codecParams["supportedFrameRates"] = supportedFramerates;
-            codecParams["supportedPixelFormats"] = supportedPixelFormats;
-            codecParams["supportedFrameSizes"] = QVariant::fromValue(supportedFrameSizes);
-            codecParams["defaultPixelFormat"] = supportedPixelFormats.isEmpty()?
-                                                  "yuv420p": supportedPixelFormats.at(0);
+        break;
+    case AkCaps::CapsVideo:
+        result = this->d->setDefaultVideoCodecParams(codec, rawCaps, codecParams);
 
-            gst_object_unref(element);
-            gst_object_unref(feature);
-            gst_object_unref(factory);
-        }
-    } else if (codecType == "text/x-raw") {
+        break;
+    default:
+        break;
     }
 
     gst_caps_unref(rawCaps);
 
+    if (!result)
+        codecParams.clear();
+
     return codecParams;
 }
 
@@ -1130,15 +764,15 @@ QVariantMap MediaWriterGStreamer::addStr
     QVariantMap outputParams;
     outputParams["index"] = streamIndex;
     auto codec = codecParams.value("codec").toString();
-    auto supportedCodecs = this->supportedCodecs(outputFormat, streamCaps.mimeType());
+    auto supportedCodecs = this->supportedCodecs(outputFormat, streamCaps.type());
 
     if (codec.isEmpty() || !supportedCodecs.contains(codec))
-        codec = this->defaultCodec(outputFormat, streamCaps.mimeType());
+        codec = this->defaultCodec(outputFormat, streamCaps.type());
 
     outputParams["codec"] = codec;
     auto codecDefaults = this->defaultCodecParams(codec);
 
-    if (streamCaps.mimeType() == "audio/x-raw") {
+    if (streamCaps.type() == AkCaps::CapsAudio) {
         int bitRate = codecParams.value("bitrate").toInt();
         outputParams["bitrate"] = bitRate > 0?
                                       bitRate:
@@ -1146,7 +780,7 @@ QVariantMap MediaWriterGStreamer::addStr
         outputParams["caps"] = QVariant::fromValue(streamCaps);
         AkAudioCaps audioCaps(streamCaps);
         outputParams["timeBase"] = QVariant::fromValue(AkFrac(1, audioCaps.rate()));
-    } else if (streamCaps.mimeType() == "video/x-raw") {
+    } else if (streamCaps.type() == AkCaps::CapsVideo) {
         int bitRate = codecParams.value("bitrate").toInt();
         outputParams["bitrate"] = bitRate > 0?
                                       bitRate:
@@ -1160,7 +794,7 @@ QVariantMap MediaWriterGStreamer::addStr
         outputParams["caps"] = QVariant::fromValue(streamCaps);
         AkVideoCaps videoCaps(streamCaps);
         outputParams["timeBase"] = QVariant::fromValue(videoCaps.fps().invert());
-    } else if (streamCaps.mimeType() == "text/x-raw") {
+    } else if (streamCaps.type() == AkCaps::CapsSubtitle) {
         outputParams["caps"] = QVariant::fromValue(streamCaps);
     }
 
@@ -1193,22 +827,22 @@ QVariantMap MediaWriterGStreamer::update
     bool streamChanged = false;
 
     if (codecParams.contains("codec")) {
-        if (this->supportedCodecs(outputFormat, streamCaps.mimeType())
+        if (this->supportedCodecs(outputFormat, streamCaps.type())
             .contains(codecParams["codec"].toString())) {
             codec = codecParams["codec"].toString();
         } else
-            codec = this->defaultCodec(outputFormat, streamCaps.mimeType());
+            codec = this->defaultCodec(outputFormat, streamCaps.type());
 
         this->d->m_streamConfigs[index]["codec"] = codec;
         streamChanged = true;
 
         // Update sample format.
 
-        if (streamCaps.mimeType() == "audio/x-raw") {
+        if (streamCaps.type() == AkCaps::CapsAudio) {
             AkAudioCaps audioCaps(streamCaps);
             this->d->m_streamConfigs[index]["timeBase"] =
                     QVariant::fromValue(AkFrac(1, audioCaps.rate()));
-        } else if (streamCaps.mimeType() == "video/x-raw") {
+        } else if (streamCaps.type() == AkCaps::CapsVideo) {
             AkVideoCaps videoCaps(streamCaps);
             this->d->m_streamConfigs[index]["timeBase"] =
                     QVariant::fromValue(videoCaps.fps().invert());
@@ -1222,8 +856,8 @@ QVariantMap MediaWriterGStreamer::update
 
     auto codecDefaults = this->defaultCodecParams(codec);
 
-    if ((streamCaps.mimeType() == "audio/x-raw"
-         || streamCaps.mimeType() == "video/x-raw")
+    if ((streamCaps.type() == AkCaps::CapsAudio
+         || streamCaps.type() == AkCaps::CapsVideo)
         && codecParams.contains("bitrate")) {
         int bitRate = codecParams["bitrate"].toInt();
         this->d->m_streamConfigs[index]["bitrate"] =
@@ -1231,7 +865,7 @@ QVariantMap MediaWriterGStreamer::update
         streamChanged = true;
     }
 
-    if (streamCaps.mimeType() == "video/x-raw"
+    if (streamCaps.type() == AkCaps::CapsVideo
         && codecParams.contains("gop")) {
         int gop = codecParams["gop"].toInt();
         this->d->m_streamConfigs[index]["gop"] =
@@ -1391,12 +1025,18 @@ void MediaWriterGStreamer::enqueuePacket
     if (!this->d->m_isRecording)
         return;
 
-    if (packet.caps().mimeType() == "audio/x-raw") {
-        this->writeAudioPacket(AkAudioPacket(packet));
-    } else if (packet.caps().mimeType() == "video/x-raw") {
-        this->writeVideoPacket(AkVideoPacket(packet));
-    } else if (packet.caps().mimeType() == "text/x-raw") {
-        this->writeSubtitlePacket(packet);
+    switch (packet.type()) {
+    case AkPacket::PacketAudio:
+        this->d->writeAudioPacket(packet);
+        break;
+    case AkPacket::PacketVideo:
+        this->d->writeVideoPacket(packet);
+        break;
+    case AkPacket::PacketSubtitle:
+        this->d->writeSubtitlePacket(packet);
+        break;
+    default:
+        break;
     }
 }
 
@@ -1443,233 +1083,29 @@ bool MediaWriterGStreamer::init()
         auto optKey = QString("%1/%2/%3").arg(outputFormat).arg(i).arg(codec);
         auto codecDefaults = this->defaultCodecParams(codec);
 
-        if (streamCaps.mimeType() == "audio/x-raw") {
-            auto sourceName = QString("audio_%1").arg(i);
-            auto source = gst_element_factory_make("appsrc", sourceName.toStdString().c_str());
-            gst_app_src_set_stream_type(GST_APP_SRC(source), GST_APP_STREAM_TYPE_STREAM);
-            g_object_set(G_OBJECT(source), "format", GST_FORMAT_TIME, nullptr);
-            g_object_set(G_OBJECT(source), "block", true, nullptr);
-
-            AkAudioCaps audioCaps(streamCaps);
-
-            auto sampleFormat = AkAudioCaps::sampleFormatToString(audioCaps.format());
-            auto supportedSampleFormats = codecDefaults["supportedSampleFormats"].toStringList();
-
-            if (!supportedSampleFormats.isEmpty() && !supportedSampleFormats.contains(sampleFormat)) {
-                auto defaultSampleFormat = codecDefaults["defaultSampleFormat"].toString();
-                auto format = AkAudioCaps::sampleFormatFromString(defaultSampleFormat);
-                audioCaps.setFormat(format);
-            }
-
-            auto supportedSampleRates = codecDefaults["supportedSampleRates"].toList();
-            audioCaps = this->d->nearestSampleRate(audioCaps,
-                                                   supportedSampleRates);
-            auto channelLayout = AkAudioCaps::channelLayoutToString(audioCaps.layout());
-            auto supportedChannelLayouts = codecDefaults["supportedChannelLayouts"].toStringList();
-
-            if (!supportedChannelLayouts.isEmpty() && !supportedChannelLayouts.contains(channelLayout)) {
-                auto defaultChannelLayout = codecDefaults["defaultChannelLayout"].toString();
-                auto layout = AkAudioCaps::channelLayoutFromString(defaultChannelLayout);
-                audioCaps.setLayout(layout);
-            }
-
-            if (outputFormat == "flvmux") {
-                audioCaps = this->d->nearestFLVAudioCaps(audioCaps, codec);
-                QStringList codecs {"speexenc", "avenc_nellymoser"};
-
-                if (codecs.contains(codec))
-                    audioCaps.setLayout(AkAudioCaps::Layout_mono);
-            } else if (outputFormat == "avmux_dv") {
-                audioCaps.rate() = 48000;
-            } else if (outputFormat == "avmux_gxf"
-                     || outputFormat == "avmux_mxf"
-                     || outputFormat == "avmux_mxf_d10") {
-                        audioCaps.rate() = qBound(4000, audioCaps.rate(), 96000);
-            } else if (codec == "avenc_tta") {
-                audioCaps.rate() = qBound(8000, audioCaps.rate(), 96000);
-            }
-
-            auto gstFormat =
-                    MediaWriterGStreamerPrivate::gstToSampleFormat()
-                    .value(audioCaps.format(), "S16");
-            auto gstAudioCaps =
-                    gst_caps_new_simple("audio/x-raw",
-                                        "format", G_TYPE_STRING, gstFormat.toStdString().c_str(),
-                                        "layout", G_TYPE_STRING, "interleaved",
-                                        "rate", G_TYPE_INT, audioCaps.rate(),
-                                        "channels", G_TYPE_INT, audioCaps.channels(),
-                                        nullptr);
-
-            gstAudioCaps = gst_caps_fixate(gstAudioCaps);
-            gst_app_src_set_caps(GST_APP_SRC(source), gstAudioCaps);
-
-            auto audioConvert = gst_element_factory_make("audioconvert", nullptr);
-            auto audioResample = gst_element_factory_make("audioresample", nullptr);
-            auto audioRate = gst_element_factory_make("audiorate", nullptr);
-            auto audioCodec = gst_element_factory_make(codec.toStdString().c_str(), nullptr);
-
-            if (codec.startsWith("avenc_"))
-                g_object_set(G_OBJECT(audioCodec), "compliance", -2, nullptr);
-
-            // Set codec options.
-            if (g_object_class_find_property(G_OBJECT_GET_CLASS(audioCodec),
-                                             "bitrate")) {
-                int bitrate = configs["bitrate"].toInt();
-
-                if (codec == "lamemp3enc")
-                    bitrate /= 1000;
-
-                if (bitrate > 0)
-                    g_object_set(G_OBJECT(audioCodec), "bitrate", bitrate, NULL);
-            }
-
-            auto codecOptions = this->d->m_codecOptions.value(optKey);
-            this->d->setElementOptions(audioCodec, codecOptions);
-
-            auto queue = gst_element_factory_make("queue", nullptr);
-
-            gst_bin_add_many(GST_BIN(this->d->m_pipeline),
-                             source,
-                             audioResample,
-                             audioRate,
-                             audioConvert,
-                             audioCodec,
-                             queue,
-                             nullptr);
-
-            gst_element_link_many(source,
-                                  audioResample,
-                                  audioRate,
-                                  audioConvert,
-                                  nullptr);
-            gst_element_link_filtered(audioConvert, audioCodec, gstAudioCaps);
-            gst_caps_unref(gstAudioCaps);
-            gst_element_link_many(audioCodec, queue, muxer, nullptr);
-        } else if (streamCaps.mimeType() == "video/x-raw") {
-            auto sourceName = QString("video_%1").arg(i);
-            auto source = gst_element_factory_make("appsrc", sourceName.toStdString().c_str());
-            gst_app_src_set_stream_type(GST_APP_SRC(source), GST_APP_STREAM_TYPE_STREAM);
-            g_object_set(G_OBJECT(source), "format", GST_FORMAT_TIME, nullptr);
-            g_object_set(G_OBJECT(source), "block", true, nullptr);
-
-            AkVideoCaps videoCaps(streamCaps);
-
-            auto pixelFormat = AkVideoCaps::pixelFormatToString(videoCaps.format());
-            auto supportedPixelFormats = codecDefaults["supportedPixelFormats"].toStringList();
-
-            if (!supportedPixelFormats.isEmpty() && !supportedPixelFormats.contains(pixelFormat)) {
-                auto defaultPixelFormat = codecDefaults["defaultPixelFormat"].toString();
-                videoCaps.setFormat(AkVideoCaps::pixelFormatFromString(defaultPixelFormat));
-            }
-
-            auto supportedFrameSizes = codecDefaults["supportedFrameSizes"].value<SizeList>();
-            videoCaps = this->d->nearestFrameSize(videoCaps,
-                                                  supportedFrameSizes);
-            auto supportedFrameRates = codecDefaults["supportedFrameRates"].toList();
-            videoCaps = this->d->nearestFrameRate(videoCaps,
-                                                  supportedFrameRates);
-
-            if (codec == "avenc_dvvideo")
-                videoCaps = this->d->nearestDVCaps(videoCaps);
-
-            auto gstFormat =
-                    MediaWriterGStreamerPrivate::gstToPixelFormat()
-                    .value(videoCaps.format(), "I420");
-            videoCaps.setWidth(MediaWriterGStreamerPrivate::align(videoCaps.width(), 4));
-
-            auto gstVideoCaps =
-                    gst_caps_new_simple("video/x-raw",
-                                        "format", G_TYPE_STRING, gstFormat.toStdString().c_str(),
-                                        "width", G_TYPE_INT, videoCaps.width(),
-                                        "height", G_TYPE_INT, videoCaps.height(),
-                                        "framerate", GST_TYPE_FRACTION,
-                                                     int(videoCaps.fps().num()),
-                                                     int(videoCaps.fps().den()),
-                                        nullptr);
-
-            gstVideoCaps = gst_caps_fixate(gstVideoCaps);
-            gst_app_src_set_caps(GST_APP_SRC(source), gstVideoCaps);
-
-            auto videoScale = gst_element_factory_make("videoscale", nullptr);
-            auto videoRate = gst_element_factory_make("videorate", nullptr);
-            auto videoConvert = gst_element_factory_make("videoconvert", nullptr);
-            auto videoCodec = gst_element_factory_make(codec.toStdString().c_str(), nullptr);
-
-            if (codec.startsWith("avenc_"))
-                g_object_set(G_OBJECT(videoCodec), "compliance", -2, nullptr);
-
-            // Set codec options.
-
-            // Set bitrate
-            const char *propBitrate =
-                    QRegExp("vp\\d+enc").exactMatch(codec)?
-                        "target-bitrate": "bitrate";
-
-            if (g_object_class_find_property(G_OBJECT_GET_CLASS(videoCodec),
-                                             propBitrate)) {
-                int bitrate = configs["bitrate"].toInt();
-
-                if (codec == "x264enc"
-                    || codec == "x265enc"
-                    || codec == "mpeg2enc"
-                    || codec == "theoraenc")
-                    bitrate /= 1000;
-
-                if (bitrate > 0)
-                    g_object_set(G_OBJECT(videoCodec),
-                                 propBitrate,
-                                 bitrate,
-                                 NULL);
-            }
-
-            // Set GOP
-            int gop = configs["gop"].toInt();
-
-            if (gop > 0) {
-                QStringList gops {"keyframe-max-dist", "gop-size"};
-
-                for (auto &g: gops)
-                    if (g_object_class_find_property(G_OBJECT_GET_CLASS(videoCodec),
-                                                     g.toStdString().c_str())) {
-                        g_object_set(G_OBJECT(videoCodec),
-                                     g.toStdString().c_str(),
-                                     gop,
-                                     nullptr);
-
-                        break;
-                    }
-            }
-
-            auto codecOptions = this->d->m_codecOptions.value(optKey);
-
-            if ((codec == "vp8enc" || codec == "vp9enc")
-                && !codecOptions.contains("deadline"))
-                codecOptions["deadline"] = 1;
-            else if ((codec == "x264enc" || codec == "x265enc")
-                     && !codecOptions.contains("speed-preset"))
-                codecOptions["speed-preset"] = "ultrafast";
-
-            this->d->setElementOptions(videoCodec, codecOptions);
-
-            auto queue = gst_element_factory_make("queue", nullptr);
-
-            gst_bin_add_many(GST_BIN(this->d->m_pipeline),
-                             source,
-                             videoScale,
-                             videoRate,
-                             videoConvert,
-                             videoCodec,
-                             queue,
-                             nullptr);
-
-            gst_element_link_many(source,
-                                  videoScale,
-                                  videoRate,
-                                  videoConvert,
-                                  nullptr);
-            gst_element_link_filtered(videoConvert, videoCodec, gstVideoCaps);
-            gst_caps_unref(gstVideoCaps);
-            gst_element_link_many(videoCodec, queue, muxer, nullptr);
+        switch (streamCaps.type()) {
+        case AkCaps::CapsAudio:
+            this->d->initAudio(i,
+                               optKey,
+                               streamCaps,
+                               codecDefaults,
+                               configs,
+                               codec,
+                               outputFormat,
+                               muxer);
+            break;
+        case AkCaps::CapsVideo:
+            this->d->initVideo(i,
+                               optKey,
+                               streamCaps,
+                               codecDefaults,
+                               configs,
+                               codec,
+                               outputFormat,
+                               muxer);
+            break;
+        default:
+            break;
         }
 
         this->d->m_streamParams << OutputParams(configs["index"].toInt());
@@ -1682,7 +1118,10 @@ bool MediaWriterGStreamer::init()
 
     // Run the main GStreamer loop.
     this->d->m_mainLoop = g_main_loop_new(nullptr, FALSE);
-    QtConcurrent::run(&this->d->m_threadPool, g_main_loop_run, this->d->m_mainLoop);
+    this->d->m_mainLoopResult =
+            QtConcurrent::run(&this->d->m_threadPool,
+                              g_main_loop_run,
+                              this->d->m_mainLoop);
     gst_element_set_state(this->d->m_pipeline, GST_STATE_PLAYING);
     this->d->m_isRecording = true;
 
@@ -1748,156 +1187,6 @@ void MediaWriterGStreamer::uninit()
     this->d->m_streamParams.clear();
 }
 
-void MediaWriterGStreamer::writeAudioPacket(const AkAudioPacket &packet)
-{
-    if (!this->d->m_pipeline)
-        return;
-
-    int streamIndex = -1;
-
-    for (int i = 0; i < this->d->m_streamParams.size(); i++)
-        if (this->d->m_streamParams[i].inputIndex() == packet.index()) {
-            streamIndex = i;
-
-            break;
-        }
-
-    if (streamIndex < 0)
-        return;
-
-    auto souceName = QString("audio_%1").arg(streamIndex);
-    auto source = gst_bin_get_by_name(GST_BIN(this->d->m_pipeline),
-                                      souceName.toStdString().c_str());
-
-    if (!source)
-        return;
-
-    auto sourceCaps = gst_app_src_get_caps(GST_APP_SRC(source));
-    auto iFormat =
-            MediaWriterGStreamerPrivate::gstToSampleFormat()
-            .value(packet.caps().format(), "S16LE");
-
-    auto inputCaps =
-            gst_caps_new_simple("audio/x-raw",
-                                "format", G_TYPE_STRING, iFormat.toStdString().c_str(),
-                                "layout", G_TYPE_STRING, "interleaved",
-                                "rate", G_TYPE_INT, packet.caps().rate(),
-                                "channels", G_TYPE_INT, packet.caps().channels(),
-                                nullptr);
-    inputCaps = gst_caps_fixate(inputCaps);
-
-    if (!gst_caps_is_equal(sourceCaps, inputCaps))
-        gst_app_src_set_caps(GST_APP_SRC(source), inputCaps);
-
-    gst_caps_unref(inputCaps);
-    gst_caps_unref(sourceCaps);
-
-    auto size = size_t(packet.buffer().size());
-
-    auto buffer = gst_buffer_new_allocate(nullptr, size, nullptr);
-    GstMapInfo info;
-    gst_buffer_map(buffer, &info, GST_MAP_WRITE);
-    memcpy(info.data, packet.buffer().constData(), size);
-    gst_buffer_unmap(buffer, &info);
-
-    auto pts = qint64(packet.pts() * packet.timeBase().value() * GST_SECOND);
-
-#if 0
-    GST_BUFFER_PTS(buffer) = GST_BUFFER_DTS(buffer) = this->m_streamParams[streamIndex].nextPts(pts, packet.id());
-    GST_BUFFER_DURATION(buffer) = packet.caps().samples() * packet.timeBase().value() * GST_SECOND;
-    GST_BUFFER_OFFSET(buffer) = this->m_streamParams[streamIndex].nFrame();
-#else
-    GST_BUFFER_PTS(buffer) = this->d->m_streamParams[streamIndex].nextPts(pts, packet.id());
-    GST_BUFFER_DTS(buffer) = GST_CLOCK_TIME_NONE;
-    GST_BUFFER_DURATION(buffer) = GST_CLOCK_TIME_NONE;
-    GST_BUFFER_OFFSET(buffer) = GST_BUFFER_OFFSET_NONE;
-#endif
-
-    this->d->m_streamParams[streamIndex].nFrame() += quint64(packet.caps().samples());
-
-    if (gst_app_src_push_buffer(GST_APP_SRC(source), buffer) != GST_FLOW_OK)
-        qWarning() << "Error pushing buffer to GStreamer pipeline";
-}
-
-void MediaWriterGStreamer::writeVideoPacket(const AkVideoPacket &packet)
-{
-    if (!this->d->m_pipeline)
-        return;
-
-    int streamIndex = -1;
-
-    for (int i = 0; i < this->d->m_streamParams.size(); i++)
-        if (this->d->m_streamParams[i].inputIndex() == packet.index()) {
-            streamIndex = i;
-
-            break;
-        }
-
-    if (streamIndex < 0)
-        return;
-
-    auto videoPacket = packet.convert(AkVideoCaps::Format_rgb24, 32);
-
-    auto souceName = QString("video_%1").arg(streamIndex);
-    auto source = gst_bin_get_by_name(GST_BIN(this->d->m_pipeline),
-                                      souceName.toStdString().c_str());
-
-    if (!source)
-        return;
-
-    auto sourceCaps = gst_app_src_get_caps(GST_APP_SRC(source));
-    auto iFormat = MediaWriterGStreamerPrivate::gstToPixelFormat()
-                   .value(videoPacket.caps().format(), "BGR");
-    auto inputCaps =
-            gst_caps_new_simple("video/x-raw",
-                                "format", G_TYPE_STRING, iFormat.toStdString().c_str(),
-                                "width", G_TYPE_INT, videoPacket.caps().width(),
-                                "height", G_TYPE_INT, videoPacket.caps().height(),
-                                "framerate", GST_TYPE_FRACTION,
-                                             int(videoPacket.caps().fps().num()),
-                                             int(videoPacket.caps().fps().den()),
-                                nullptr);
-    inputCaps = gst_caps_fixate(inputCaps);
-
-    if (!gst_caps_is_equal(sourceCaps, inputCaps))
-        gst_app_src_set_caps(GST_APP_SRC(source), inputCaps);
-
-    gst_caps_unref(inputCaps);
-    gst_caps_unref(sourceCaps);
-
-    auto size = size_t(videoPacket.buffer().size());
-    auto buffer = gst_buffer_new_allocate(nullptr, size, nullptr);
-    GstMapInfo info;
-    gst_buffer_map(buffer, &info, GST_MAP_WRITE);
-    memcpy(info.data, videoPacket.buffer().constData(), size);
-    gst_buffer_unmap(buffer, &info);
-
-    auto pts = qint64(videoPacket.pts()
-                      * videoPacket.timeBase().value()
-                      * GST_SECOND);
-
-#if 0
-    GST_BUFFER_PTS(buffer) = GST_BUFFER_DTS(buffer) = this->m_streamParams[streamIndex].nextPts(pts, packet.id());
-    GST_BUFFER_DURATION(buffer) = GST_SECOND / packet.caps().fps().value();
-    GST_BUFFER_OFFSET(buffer) = this->m_streamParams[streamIndex].nFrame();
-#else
-    GST_BUFFER_PTS(buffer) = this->d->m_streamParams[streamIndex].nextPts(pts, videoPacket.id());
-    GST_BUFFER_DTS(buffer) = GST_CLOCK_TIME_NONE;
-    GST_BUFFER_DURATION(buffer) = GST_CLOCK_TIME_NONE;
-    GST_BUFFER_OFFSET(buffer) = GST_BUFFER_OFFSET_NONE;
-#endif
-
-    this->d->m_streamParams[streamIndex].nFrame()++;
-
-    if (gst_app_src_push_buffer(GST_APP_SRC(source), buffer) != GST_FLOW_OK)
-        qWarning() << "Error pushing buffer to GStreamer pipeline";
-}
-
-void MediaWriterGStreamer::writeSubtitlePacket(const AkPacket &packet)
-{
-    Q_UNUSED(packet)
-}
-
 MediaWriterGStreamerPrivate::MediaWriterGStreamerPrivate(MediaWriterGStreamer *self):
     self(self)
 {
@@ -2456,7 +1745,7 @@ AkAudioCaps MediaWriterGStreamerPrivate:
     }
 
     AkAudioCaps nearestCaps(caps);
-    nearestCaps.rate() = nearestSampleRate;
+    nearestCaps.setRate(nearestSampleRate);
 
     return nearestCaps;
 }
@@ -2495,7 +1784,7 @@ AkAudioCaps MediaWriterGStreamerPrivate:
         }
     }
 
-    audioCaps.rate() = sampleRate;
+    audioCaps.setRate(sampleRate);
 
     return audioCaps;
 }
@@ -2569,4 +1858,849 @@ AkVideoCaps MediaWriterGStreamerPrivate:
     return nearestCaps;
 }
 
+bool MediaWriterGStreamerPrivate::setDefaultAudioCodecParams(const QString &codec,
+                                                             GstCaps *rawCaps,
+                                                             QVariantMap &codecParams)
+{
+    if (codec.startsWith("identity/audio")) {
+        auto gstFormat = codec.split("/").at(2);
+        auto sampleFormat =
+                MediaWriterGStreamerPrivate::gstToSampleFormat().key(gstFormat,
+                                                                     AkAudioCaps::SampleFormat_none);
+        codecParams["defaultBitRate"] = 128000;
+        codecParams["supportedSampleFormats"] = QVariantList {sampleFormat};
+        codecParams["supportedChannelLayouts"] =
+                QVariantList {AkAudioCaps::Layout_mono,
+                              AkAudioCaps::Layout_stereo};
+        codecParams["supportedSampleRates"] = QVariantList();
+        codecParams["defaultSampleFormat"] = sampleFormat;
+        codecParams["defaultChannelLayout"] = AkAudioCaps::Layout_stereo;
+        codecParams["defaultChannels"] = 2;
+        codecParams["defaultSampleRate"] = 44100;
+    } else {
+        auto factory =
+                gst_element_factory_find(codec.toStdString().c_str());
+
+        if (!factory)
+            return false;
+
+        auto feature = gst_plugin_feature_load(GST_PLUGIN_FEATURE(factory));
+
+        if (!feature) {
+            gst_object_unref(factory);
+
+            return false;
+        }
+
+        QVariantList supportedSampleFormats;
+        QVariantList supportedSamplerates;
+        QVariantList supportedChannelLayouts;
+
+        auto pads = gst_element_factory_get_static_pad_templates(GST_ELEMENT_FACTORY(feature));
+
+        for (auto padItem = pads;
+             padItem;
+             padItem = g_list_next(padItem)) {
+            auto padtemplate =
+                    reinterpret_cast<GstStaticPadTemplate *>(padItem->data);
+
+            if (padtemplate->direction == GST_PAD_SINK
+                && padtemplate->presence == GST_PAD_ALWAYS) {
+                auto caps =
+                        gst_caps_from_string(padtemplate->static_caps.string);
+
+                for (guint i = 0; i < gst_caps_get_size(caps); i++) {
+                    auto capsStructure = gst_caps_get_structure(caps, i);
+                    auto structureStr = gst_structure_to_string(capsStructure);
+                    auto compCaps = gst_caps_from_string(structureStr);
+
+                    if (gst_caps_can_intersect(compCaps, rawCaps)) {
+                        // Get supported formats
+                        if (gst_structure_has_field(capsStructure, "format")) {
+                            GType fieldType = gst_structure_get_field_type(capsStructure, "format");
+
+                            if (fieldType == G_TYPE_STRING) {
+                                auto format = gst_structure_get_string(capsStructure, "format");
+                                auto formatFF =
+                                        MediaWriterGStreamerPrivate::gstToSampleFormat().key(format,
+                                                                                             AkAudioCaps::SampleFormat_none);
+
+                                if (formatFF != AkAudioCaps::SampleFormat_none
+                                    && !supportedSampleFormats.contains(formatFF))
+                                    supportedSampleFormats << formatFF;
+                            } else if (fieldType == GST_TYPE_LIST) {
+                                const GValue *formats = gst_structure_get_value(capsStructure, "format");
+
+                                for (guint i = 0; i < gst_value_list_get_size(formats); i++) {
+                                    auto format = gst_value_list_get_value(formats, i);
+                                    auto formatId = g_value_get_string(format);
+                                    auto formatFF =
+                                            MediaWriterGStreamerPrivate::gstToSampleFormat().key(formatId,
+                                                                                                 AkAudioCaps::SampleFormat_none);
+
+                                    if (formatFF != AkAudioCaps::SampleFormat_none
+                                        && !supportedSampleFormats.contains(formatFF))
+                                        supportedSampleFormats << formatFF;
+                                }
+                            }
+                        }
+
+                        // Get supported sample rates
+                        if (gst_structure_has_field(capsStructure, "rate")) {
+                            GType fieldType = gst_structure_get_field_type(capsStructure, "rate");
+
+                            if (fieldType == G_TYPE_INT) {
+                                gint rate;
+                                gst_structure_get_int(capsStructure, "rate", &rate);
+
+                                if (!supportedSamplerates.contains(rate))
+                                    supportedSamplerates << rate;
+                            } else if (fieldType == GST_TYPE_INT_RANGE) {
+                            } else if (fieldType == GST_TYPE_LIST) {
+                                auto rates = gst_structure_get_value(capsStructure, "rate");
+
+                                for (guint i = 0;
+                                     i < gst_value_list_get_size(rates);
+                                     i++) {
+                                    auto rate = gst_value_list_get_value(rates, i);
+                                    gint rateId = g_value_get_int(rate);
+
+                                    if (!supportedSamplerates.contains(rateId))
+                                        supportedSamplerates << rateId;
+                                }
+                            }
+                        }
+
+                        // Get supported channel layouts
+                        if (gst_structure_has_field(capsStructure, "channels")) {
+                            GType fieldType = gst_structure_get_field_type(capsStructure, "channels");
+
+                            if (fieldType == G_TYPE_INT) {
+                                gint channels;
+                                gst_structure_get_int(capsStructure, "channels", &channels);
+                                auto layout = AkAudioCaps::defaultChannelLayout(channels);
+
+                                if (!supportedChannelLayouts.contains(layout))
+                                    supportedChannelLayouts << layout;
+                            } else if (fieldType == GST_TYPE_INT_RANGE) {
+                                auto channels = gst_structure_get_value(capsStructure, "channels");
+
+                                int min = gst_value_get_int_range_min(channels);
+                                int max = gst_value_get_int_range_max(channels) + 1;
+                                int step = gst_value_get_int_range_step(channels);
+
+                                for (int i = min; i < max; i += step) {
+                                    auto layout = AkAudioCaps::defaultChannelLayout(i);
+
+                                    if (!supportedChannelLayouts.contains(layout))
+                                        supportedChannelLayouts << layout;
+                                }
+                            } else if (fieldType == GST_TYPE_LIST) {
+                                auto channels = gst_structure_get_value(capsStructure, "channels");
+
+                                for (guint i = 0; i < gst_value_list_get_size(channels); i++) {
+                                    auto nchannels = gst_value_list_get_value(channels, i);
+                                    gint nchannelsId = g_value_get_int(nchannels);
+                                    auto layout = AkAudioCaps::defaultChannelLayout(nchannelsId);
+
+                                    if (!supportedChannelLayouts.contains(layout))
+                                        supportedChannelLayouts << layout;
+                                }
+                            }
+                        }
+                    }
+
+                    gst_caps_unref(compCaps);
+                    g_free(structureStr);
+                }
+
+                gst_caps_unref(caps);
+            }
+        }
+
+        auto element =
+                gst_element_factory_create(GST_ELEMENT_FACTORY(feature),
+                                           nullptr);
+
+        if (!element) {
+            gst_object_unref(feature);
+            gst_object_unref(factory);
+
+            return false;
+        }
+
+        int bitrate = 0;
+
+        if (g_object_class_find_property(G_OBJECT_GET_CLASS(element), "bitrate"))
+            g_object_get(G_OBJECT(element), "bitrate", &bitrate, nullptr);
+
+        if (codec == "lamemp3enc")
+            bitrate *= 1000;
+
+        if (bitrate < 1)
+            bitrate = 128000;
+
+        codecParams["defaultBitRate"] = bitrate;
+        codecParams["supportedSampleFormats"] = supportedSampleFormats;
+        codecParams["supportedChannelLayouts"] = supportedChannelLayouts;
+        codecParams["supportedSampleRates"] = supportedSamplerates;
+        codecParams["defaultSampleFormat"] =
+                supportedSampleFormats.isEmpty()?
+                    AkAudioCaps::SampleFormat_s16:
+                    supportedSampleFormats.at(0);
+        AkAudioCaps::ChannelLayout channelLayout =
+                supportedChannelLayouts.isEmpty()?
+                    AkAudioCaps::Layout_stereo:
+                    AkAudioCaps::ChannelLayout(supportedChannelLayouts.at(0).toInt());
+        codecParams["defaultChannelLayout"] = channelLayout;
+        codecParams["defaultChannels"] = AkAudioCaps::channelCount(channelLayout);
+        codecParams["defaultSampleRate"] = supportedSamplerates.isEmpty()?
+                                             44100: supportedSamplerates.at(0);
+
+        gst_object_unref(element);
+        gst_object_unref(feature);
+        gst_object_unref(factory);
+    }
+
+    return true;
+}
+
+bool MediaWriterGStreamerPrivate::setDefaultVideoCodecParams(const QString &codec,
+                                                             GstCaps *rawCaps,
+                                                             QVariantMap &codecParams)
+{
+    if (codec.startsWith("identity/video")) {
+        auto gstFormat = codec.split("/").at(2);
+        auto pixelFormat =
+                MediaWriterGStreamerPrivate::gstToPixelFormat().key(gstFormat,
+                                                                    AkVideoCaps::Format_none);
+        codecParams["defaultBitRate"] = 1500000;
+        codecParams["defaultGOP"] = 12;
+        codecParams["supportedFrameRates"] = QVariantList();
+        codecParams["supportedPixelFormats"] = QVariantList {int(pixelFormat)};
+        codecParams["supportedFrameSizes"] = QVariantList();
+        codecParams["defaultPixelFormat"] = int(pixelFormat);
+    } else {
+        auto factory = gst_element_factory_find(codec.toStdString().c_str());
+
+        if (!factory) {
+            gst_caps_unref(rawCaps);
+
+            return false;
+        }
+
+        auto feature = gst_plugin_feature_load(GST_PLUGIN_FEATURE(factory));
+
+        if (!feature) {
+            gst_object_unref(factory);
+            gst_caps_unref(rawCaps);
+
+            return false;
+        }
+
+        QVariantList supportedPixelFormats;
+        QVariantList supportedFramerates;
+        SizeList supportedFrameSizes;
+
+        auto pads = gst_element_factory_get_static_pad_templates(GST_ELEMENT_FACTORY(feature));
+
+        for (auto padItem = pads; padItem; padItem = g_list_next(padItem)) {
+            auto padtemplate =
+                    reinterpret_cast<GstStaticPadTemplate *>(padItem->data);
+
+            if (padtemplate->direction == GST_PAD_SINK
+                && padtemplate->presence == GST_PAD_ALWAYS) {
+                auto caps = gst_caps_from_string(padtemplate->static_caps.string);
+
+                for (guint i = 0; i < gst_caps_get_size(caps); i++) {
+                    auto capsStructure = gst_caps_get_structure(caps, i);
+                    auto structureStr = gst_structure_to_string(capsStructure);
+                    auto compCaps = gst_caps_from_string(structureStr);
+
+                    if (gst_caps_can_intersect(compCaps, rawCaps)) {
+                        // Get supported formats
+                        if (gst_structure_has_field(capsStructure, "format")) {
+                            GType fieldType = gst_structure_get_field_type(capsStructure, "format");
+
+                            if (fieldType == G_TYPE_STRING) {
+                                auto format = gst_structure_get_string(capsStructure, "format");
+                                auto formatFF =
+                                        MediaWriterGStreamerPrivate::gstToPixelFormat()
+                                        .key(format, AkVideoCaps::Format_none);
+
+                                if (formatFF != AkVideoCaps::Format_none
+                                    && !supportedPixelFormats.contains(int(formatFF)))
+                                    supportedPixelFormats << int(formatFF);
+                            } else if (fieldType == GST_TYPE_LIST) {
+                                auto formats = gst_structure_get_value(capsStructure, "format");
+
+                                for (guint i = 0; i < gst_value_list_get_size(formats); i++) {
+                                    auto format = gst_value_list_get_value(formats, i);
+                                    auto formatId = g_value_get_string(format);
+                                    auto formatFF =
+                                            MediaWriterGStreamerPrivate::gstToPixelFormat()
+                                            .key(formatId, AkVideoCaps::Format_none);
+
+                                    if (formatFF != AkVideoCaps::Format_none
+                                        && !supportedPixelFormats.contains(int(formatFF)))
+                                        supportedPixelFormats << int(formatFF);
+                                }
+                            }
+                        }
+
+                        // Get supported frame sizes
+                        if (gst_structure_has_field(capsStructure, "width")
+                            && gst_structure_has_field(capsStructure, "height")) {
+                            gint width = 0;
+                            gint height = 0;
+
+                            GType fieldType = gst_structure_get_field_type(capsStructure, "width");
+
+                            if (fieldType == G_TYPE_INT)
+                                gst_structure_get_int(capsStructure, "width", &width);
+
+                            fieldType = gst_structure_get_field_type(capsStructure, "height");
+
+                            if (fieldType == G_TYPE_INT)
+                                gst_structure_get_int(capsStructure, "height", &height);
+
+                            QSize size(width, height);
+
+                            if (!size.isEmpty() && !supportedFrameSizes.contains(size))
+                                supportedFrameSizes << size;
+                        }
+
+                        // Get supported frame rates
+                        if (gst_structure_has_field(capsStructure, "framerate")) {
+                            GType fieldType = gst_structure_get_field_type(capsStructure, "framerate");
+
+                            if (fieldType == GST_TYPE_FRACTION_RANGE) {
+                            } else if (fieldType == GST_TYPE_LIST) {
+                                auto framerates = gst_structure_get_value(capsStructure, "framerate");
+
+                                for (guint i = 0; i < gst_value_list_get_size(framerates); i++) {
+                                    auto frate = gst_value_list_get_value(framerates, i);
+                                    auto num = gst_value_get_fraction_numerator(frate);
+                                    auto den = gst_value_get_fraction_denominator(frate);
+                                    AkFrac framerate(num, den);
+                                    auto fps = QVariant::fromValue(framerate);
+
+                                     if (!supportedFramerates.contains(fps))
+                                         supportedFramerates << fps;
+                                }
+                            } else if (fieldType == GST_TYPE_FRACTION) {
+                                gint num = 0;
+                                gint den = 0;
+                                gst_structure_get_fraction(capsStructure,
+                                                           "framerate",
+                                                           &num,
+                                                           &den);
+                               AkFrac framerate(num, den);
+                               auto fps = QVariant::fromValue(framerate);
+
+                                if (!supportedFramerates.contains(fps))
+                                    supportedFramerates << fps;
+                            }
+                        }
+                    }
+
+                    gst_caps_unref(compCaps);
+                    g_free(structureStr);
+                }
+
+                gst_caps_unref(caps);
+            }
+        }
+
+        auto element =
+                gst_element_factory_create(GST_ELEMENT_FACTORY(feature),
+                                           nullptr);
+
+        if (!element) {
+            gst_object_unref(feature);
+            gst_object_unref(factory);
+            gst_caps_unref(rawCaps);
+
+            return false;
+        }
+
+        // Read default bitrate
+        int bitrate = 0;
+
+        const char *propBitrate =
+                QRegExp("vp\\d+enc").exactMatch(codec)?
+                    "target-bitrate": "bitrate";
+
+        if (g_object_class_find_property(G_OBJECT_GET_CLASS(element), propBitrate))
+            g_object_get(G_OBJECT(element), propBitrate, &bitrate, nullptr);
+
+        if (codec == "x264enc"
+            || codec == "x265enc"
+            || codec == "mpeg2enc"
+            || codec == "theoraenc")
+            bitrate *= 1000;
+
+        if (bitrate < 1500000)
+            bitrate = 1500000;
+
+        // Read default GOP
+        int gop = 0;
+        QStringList gops {"keyframe-max-dist", "gop-size"};
+
+        for (auto &g: gops)
+            if (g_object_class_find_property(G_OBJECT_GET_CLASS(element),
+                                             g.toStdString().c_str())) {
+                g_object_get(G_OBJECT(element),
+                             g.toStdString().c_str(),
+                             &gop,
+                             nullptr);
+
+                break;
+            }
+
+        if (gop < 1)
+            gop = 12;
+
+        codecParams["defaultBitRate"] = bitrate;
+        codecParams["defaultGOP"] = gop;
+        codecParams["supportedFrameRates"] = supportedFramerates;
+        codecParams["supportedPixelFormats"] = supportedPixelFormats;
+        codecParams["supportedFrameSizes"] = QVariant::fromValue(supportedFrameSizes);
+        codecParams["defaultPixelFormat"] = supportedPixelFormats.value(0,
+                                                                        int(AkVideoCaps::Format_yuv420p));
+
+        gst_object_unref(element);
+        gst_object_unref(feature);
+        gst_object_unref(factory);
+    }
+
+    return true;
+}
+
+void MediaWriterGStreamerPrivate::initAudio(int index,
+                                            const QString &optKey,
+                                            const AkCaps &streamCaps,
+                                            const QVariantMap &codecDefaults,
+                                            const QVariantMap &configs,
+                                            const QString &codec,
+                                            const QString &outputFormat,
+                                            GstElement *muxer)
+{
+    auto sourceName = QString("audio_%1").arg(index);
+    auto source = gst_element_factory_make("appsrc", sourceName.toStdString().c_str());
+    gst_app_src_set_stream_type(GST_APP_SRC(source), GST_APP_STREAM_TYPE_STREAM);
+    g_object_set(G_OBJECT(source), "format", GST_FORMAT_TIME, nullptr);
+    g_object_set(G_OBJECT(source), "block", true, nullptr);
+
+    AkAudioCaps audioCaps(streamCaps);
+
+    auto sampleFormat = audioCaps.format();
+    auto supportedSampleFormats =
+            codecDefaults["supportedSampleFormats"].toList();
+
+    if (!supportedSampleFormats.isEmpty()
+        && !supportedSampleFormats.contains(sampleFormat)) {
+        auto defaultSampleFormat =
+                AkAudioCaps::SampleFormat(codecDefaults["defaultSampleFormat"].toInt());
+        audioCaps.setFormat(defaultSampleFormat);
+    }
+
+    auto supportedSampleRates = codecDefaults["supportedSampleRates"].toList();
+    audioCaps = this->nearestSampleRate(audioCaps, supportedSampleRates);
+    auto channelLayout = audioCaps.layout();
+    auto supportedChannelLayouts =
+            codecDefaults["supportedChannelLayouts"].toList();
+
+    if (!supportedChannelLayouts.isEmpty()
+        && !supportedChannelLayouts.contains(channelLayout)) {
+        auto defaultChannelLayout =
+                AkAudioCaps::ChannelLayout(codecDefaults["defaultChannelLayout"].toInt());
+        audioCaps.setLayout(defaultChannelLayout);
+    }
+
+    if (outputFormat == "flvmux") {
+        audioCaps = this->nearestFLVAudioCaps(audioCaps, codec);
+        QStringList codecs {"speexenc", "avenc_nellymoser"};
+
+        if (codecs.contains(codec))
+            audioCaps.setLayout(AkAudioCaps::Layout_mono);
+    } else if (outputFormat == "avmux_dv") {
+        audioCaps.setRate(48000);
+    } else if (outputFormat == "avmux_gxf"
+             || outputFormat == "avmux_mxf"
+             || outputFormat == "avmux_mxf_d10") {
+                audioCaps.setRate(qBound(4000, audioCaps.rate(), 96000));
+    } else if (codec == "avenc_tta") {
+        audioCaps.setRate(qBound(8000, audioCaps.rate(), 96000));
+    }
+
+    auto gstFormat =
+            MediaWriterGStreamerPrivate::gstToSampleFormat()
+            .value(audioCaps.format(), "S16");
+    auto gstAudioCaps =
+            gst_caps_new_simple("audio/x-raw",
+                                "format", G_TYPE_STRING, gstFormat.toStdString().c_str(),
+                                "layout", G_TYPE_STRING, "interleaved",
+                                "rate", G_TYPE_INT, audioCaps.rate(),
+                                "channels", G_TYPE_INT, audioCaps.channels(),
+                                nullptr);
+
+    gstAudioCaps = gst_caps_fixate(gstAudioCaps);
+    gst_app_src_set_caps(GST_APP_SRC(source), gstAudioCaps);
+
+    auto audioConvert = gst_element_factory_make("audioconvert", nullptr);
+    auto audioResample = gst_element_factory_make("audioresample", nullptr);
+    auto audioRate = gst_element_factory_make("audiorate", nullptr);
+    auto audioCodec = gst_element_factory_make(codec.toStdString().c_str(),
+                                               nullptr);
+
+    if (codec.startsWith("avenc_"))
+        g_object_set(G_OBJECT(audioCodec), "compliance", -2, nullptr);
+
+    // Set codec options.
+    if (g_object_class_find_property(G_OBJECT_GET_CLASS(audioCodec),
+                                     "bitrate")) {
+        int bitrate = configs["bitrate"].toInt();
+
+        if (codec == "lamemp3enc")
+            bitrate /= 1000;
+
+        if (bitrate > 0)
+            g_object_set(G_OBJECT(audioCodec), "bitrate", bitrate, NULL);
+    }
+
+    auto codecOptions = this->m_codecOptions.value(optKey);
+    this->setElementOptions(audioCodec, codecOptions);
+
+    auto queue = gst_element_factory_make("queue", nullptr);
+
+    gst_bin_add_many(GST_BIN(this->m_pipeline),
+                     source,
+                     audioResample,
+                     audioRate,
+                     audioConvert,
+                     audioCodec,
+                     queue,
+                     nullptr);
+
+    gst_element_link_many(source,
+                          audioResample,
+                          audioRate,
+                          audioConvert,
+                          nullptr);
+    gst_element_link_filtered(audioConvert, audioCodec, gstAudioCaps);
+    gst_caps_unref(gstAudioCaps);
+    gst_element_link_many(audioCodec, queue, muxer, nullptr);
+}
+
+void MediaWriterGStreamerPrivate::initVideo(int index,
+                                            const QString &optKey,
+                                            const AkCaps &streamCaps,
+                                            const QVariantMap &codecDefaults,
+                                            const QVariantMap &configs,
+                                            const QString &codec,
+                                            const QString &outputFormat,
+                                            GstElement *muxer)
+{
+    Q_UNUSED(outputFormat)
+
+    auto sourceName = QString("video_%1").arg(index);
+    auto source = gst_element_factory_make("appsrc", sourceName.toStdString().c_str());
+    gst_app_src_set_stream_type(GST_APP_SRC(source), GST_APP_STREAM_TYPE_STREAM);
+    g_object_set(G_OBJECT(source), "format", GST_FORMAT_TIME, nullptr);
+    g_object_set(G_OBJECT(source), "block", true, nullptr);
+
+    AkVideoCaps videoCaps(streamCaps);
+
+    auto pixelFormat = videoCaps.format();
+    auto supportedPixelFormats = codecDefaults["supportedPixelFormats"].toList();
+
+    if (!supportedPixelFormats.contains(int(pixelFormat))) {
+        auto defaultPixelFormat =
+                AkVideoCaps::PixelFormat(codecDefaults["defaultPixelFormat"].toInt());
+        videoCaps.setFormat(defaultPixelFormat);
+    }
+
+    auto supportedFrameSizes = codecDefaults["supportedFrameSizes"].value<SizeList>();
+    videoCaps = this->nearestFrameSize(videoCaps, supportedFrameSizes);
+    auto supportedFrameRates = codecDefaults["supportedFrameRates"].toList();
+    videoCaps = this->nearestFrameRate(videoCaps, supportedFrameRates);
+
+    if (codec == "avenc_dvvideo")
+        videoCaps = this->nearestDVCaps(videoCaps);
+
+    auto gstFormat =
+            MediaWriterGStreamerPrivate::gstToPixelFormat()
+            .value(videoCaps.format(), "I420");
+    videoCaps.setWidth(MediaWriterGStreamerPrivate::align(videoCaps.width(), 4));
+
+    auto gstVideoCaps =
+            gst_caps_new_simple("video/x-raw",
+                                "format", G_TYPE_STRING, gstFormat.toStdString().c_str(),
+                                "width", G_TYPE_INT, videoCaps.width(),
+                                "height", G_TYPE_INT, videoCaps.height(),
+                                "framerate", GST_TYPE_FRACTION,
+                                             int(videoCaps.fps().num()),
+                                             int(videoCaps.fps().den()),
+                                nullptr);
+
+    gstVideoCaps = gst_caps_fixate(gstVideoCaps);
+    gst_app_src_set_caps(GST_APP_SRC(source), gstVideoCaps);
+
+    auto videoScale = gst_element_factory_make("videoscale", nullptr);
+    auto videoRate = gst_element_factory_make("videorate", nullptr);
+    auto videoConvert = gst_element_factory_make("videoconvert", nullptr);
+    auto videoCodec = gst_element_factory_make(codec.toStdString().c_str(), nullptr);
+
+    if (codec.startsWith("avenc_"))
+        g_object_set(G_OBJECT(videoCodec), "compliance", -2, nullptr);
+
+    // Set codec options.
+
+    // Set bitrate
+    const char *propBitrate =
+            QRegExp("vp\\d+enc").exactMatch(codec)?
+                "target-bitrate": "bitrate";
+
+    if (g_object_class_find_property(G_OBJECT_GET_CLASS(videoCodec),
+                                     propBitrate)) {
+        int bitrate = configs["bitrate"].toInt();
+
+        if (codec == "x264enc"
+            || codec == "x265enc"
+            || codec == "mpeg2enc"
+            || codec == "theoraenc")
+            bitrate /= 1000;
+
+        if (bitrate > 0)
+            g_object_set(G_OBJECT(videoCodec),
+                         propBitrate,
+                         bitrate,
+                         NULL);
+    }
+
+    // Set GOP
+    int gop = configs["gop"].toInt();
+
+    if (gop > 0) {
+        QStringList gops {"keyframe-max-dist", "gop-size"};
+
+        for (auto &g: gops)
+            if (g_object_class_find_property(G_OBJECT_GET_CLASS(videoCodec),
+                                             g.toStdString().c_str())) {
+                g_object_set(G_OBJECT(videoCodec),
+                             g.toStdString().c_str(),
+                             gop,
+                             nullptr);
+
+                break;
+            }
+    }
+
+    auto codecOptions = this->m_codecOptions.value(optKey);
+
+    if ((codec == "vp8enc" || codec == "vp9enc")
+        && !codecOptions.contains("deadline"))
+        codecOptions["deadline"] = 1;
+    else if ((codec == "x264enc" || codec == "x265enc")
+             && !codecOptions.contains("speed-preset"))
+        codecOptions["speed-preset"] = "ultrafast";
+
+    this->setElementOptions(videoCodec, codecOptions);
+
+    auto queue = gst_element_factory_make("queue", nullptr);
+
+    gst_bin_add_many(GST_BIN(this->m_pipeline),
+                     source,
+                     videoScale,
+                     videoRate,
+                     videoConvert,
+                     videoCodec,
+                     queue,
+                     nullptr);
+
+    gst_element_link_many(source,
+                          videoScale,
+                          videoRate,
+                          videoConvert,
+                          nullptr);
+    gst_element_link_filtered(videoConvert, videoCodec, gstVideoCaps);
+    gst_caps_unref(gstVideoCaps);
+    gst_element_link_many(videoCodec, queue, muxer, nullptr);
+}
+
+void MediaWriterGStreamerPrivate::writeAudioPacket(const AkAudioPacket &packet)
+{
+    if (!this->m_pipeline)
+        return;
+
+    int streamIndex = -1;
+
+    for (int i = 0; i < this->m_streamParams.size(); i++)
+        if (this->m_streamParams[i].inputIndex() == packet.index()) {
+            streamIndex = i;
+
+            break;
+        }
+
+    if (streamIndex < 0)
+        return;
+
+    auto souceName = QString("audio_%1").arg(streamIndex);
+    auto source = gst_bin_get_by_name(GST_BIN(this->m_pipeline),
+                                      souceName.toStdString().c_str());
+
+    if (!source)
+        return;
+
+    auto iFormat =
+            MediaWriterGStreamerPrivate::gstToSampleFormat()
+            .value(packet.caps().format(), "");
+
+    if (iFormat.isEmpty())
+        return;
+
+    auto sourceCaps = gst_app_src_get_caps(GST_APP_SRC(source));
+    const char *layoutType = packet.caps().planar()?
+                                 "non-interleaved":
+                                 "interleaved";
+
+    auto inputCaps =
+            gst_caps_new_simple("audio/x-raw",
+                                "format", G_TYPE_STRING, iFormat.toStdString().c_str(),
+                                "layout", G_TYPE_STRING, layoutType,
+                                "rate", G_TYPE_INT, packet.caps().rate(),
+                                "channels", G_TYPE_INT, packet.caps().channels(),
+                                nullptr);
+    inputCaps = gst_caps_fixate(inputCaps);
+
+    if (!gst_caps_is_equal(sourceCaps, inputCaps))
+        gst_app_src_set_caps(GST_APP_SRC(source), inputCaps);
+
+    gst_caps_unref(inputCaps);
+    gst_caps_unref(sourceCaps);
+
+    auto buffer = gst_buffer_new_allocate(nullptr, packet.size(), nullptr);
+    GstMapInfo info;
+    gst_buffer_map(buffer, &info, GST_MAP_WRITE);
+    memcpy(info.data, packet.constData(), packet.size());
+    gst_buffer_unmap(buffer, &info);
+
+    auto pts = qint64(packet.pts() * packet.timeBase().value() * GST_SECOND);
+
+#if 0
+    GST_BUFFER_PTS(buffer) = GST_BUFFER_DTS(buffer) = this->m_streamParams[streamIndex].nextPts(pts, packet.id());
+    GST_BUFFER_DURATION(buffer) = packet.caps().samples() * packet.timeBase().value() * GST_SECOND;
+    GST_BUFFER_OFFSET(buffer) = this->m_streamParams[streamIndex].nFrame();
+#else
+    GST_BUFFER_PTS(buffer) = this->m_streamParams[streamIndex].nextPts(pts, packet.id());
+    GST_BUFFER_DTS(buffer) = GST_CLOCK_TIME_NONE;
+    GST_BUFFER_DURATION(buffer) = GST_CLOCK_TIME_NONE;
+    GST_BUFFER_OFFSET(buffer) = GST_BUFFER_OFFSET_NONE;
+#endif
+
+    this->m_streamParams[streamIndex].nFrame() += quint64(packet.samples());
+
+    if (gst_app_src_push_buffer(GST_APP_SRC(source), buffer) != GST_FLOW_OK)
+        qWarning() << "Error pushing buffer to GStreamer pipeline";
+}
+
+void MediaWriterGStreamerPrivate::writeVideoPacket(const AkVideoPacket &packet)
+{
+    if (!this->m_pipeline)
+        return;
+
+    int streamIndex = -1;
+
+    for (int i = 0; i < this->m_streamParams.size(); i++)
+        if (this->m_streamParams[i].inputIndex() == packet.index()) {
+            streamIndex = i;
+
+            break;
+        }
+
+    if (streamIndex < 0)
+        return;
+
+    this->m_videoConverter.begin();
+    auto videoPacket = this->m_videoConverter.convert(packet);
+    this->m_videoConverter.end();
+
+    auto souceName = QString("video_%1").arg(streamIndex);
+    auto source = gst_bin_get_by_name(GST_BIN(this->m_pipeline),
+                                      souceName.toStdString().c_str());
+
+    if (!source)
+        return;
+
+    auto sourceCaps = gst_app_src_get_caps(GST_APP_SRC(source));
+    auto iFormat = MediaWriterGStreamerPrivate::gstToPixelFormat()
+                   .value(videoPacket.caps().format(), "BGR");
+    auto inputCaps =
+            gst_caps_new_simple("video/x-raw",
+                                "format", G_TYPE_STRING, iFormat.toStdString().c_str(),
+                                "width", G_TYPE_INT, videoPacket.caps().width(),
+                                "height", G_TYPE_INT, videoPacket.caps().height(),
+                                "framerate", GST_TYPE_FRACTION,
+                                             int(videoPacket.caps().fps().num()),
+                                             int(videoPacket.caps().fps().den()),
+                                nullptr);
+    inputCaps = gst_caps_fixate(inputCaps);
+
+    if (!gst_caps_is_equal(sourceCaps, inputCaps))
+        gst_app_src_set_caps(GST_APP_SRC(source), inputCaps);
+
+    auto videoInfo = gst_video_info_new();
+    gst_video_info_from_caps(videoInfo, inputCaps);
+
+    auto size = size_t(videoPacket.size());
+    auto buffer = gst_buffer_new_allocate(nullptr, size, nullptr);
+    GstMapInfo info;
+    gst_buffer_map(buffer, &info, GST_MAP_WRITE);
+
+    for (int plane = 0; plane < GST_VIDEO_INFO_N_PLANES(videoInfo); ++plane) {
+        auto planeData = info.data + GST_VIDEO_INFO_PLANE_OFFSET(videoInfo, plane);
+        auto oLineSize = GST_VIDEO_INFO_PLANE_STRIDE(videoInfo, plane);
+        auto lineSize = qMin<size_t>(packet.lineSize(plane), oLineSize);
+        auto heightDiv = packet.heightDiv(plane);
+
+        for (int y = 0; y < videoInfo->height; ++y) {
+            auto ys = y >> heightDiv;
+            memcpy(planeData + ys * oLineSize,
+                   videoPacket.constLine(plane, y),
+                   lineSize);
+        }
+    }
+
+    gst_video_info_free(videoInfo);
+    gst_buffer_unmap(buffer, &info);
+    gst_caps_unref(inputCaps);
+    gst_caps_unref(sourceCaps);
+
+    auto pts = qint64(videoPacket.pts()
+                      * videoPacket.timeBase().value()
+                      * GST_SECOND);
+
+#if 0
+    GST_BUFFER_PTS(buffer) = GST_BUFFER_DTS(buffer) = this->m_streamParams[streamIndex].nextPts(pts, packet.id());
+    GST_BUFFER_DURATION(buffer) = GST_SECOND / packet.caps().fps().value();
+    GST_BUFFER_OFFSET(buffer) = this->m_streamParams[streamIndex].nFrame();
+#else
+    GST_BUFFER_PTS(buffer) = this->m_streamParams[streamIndex].nextPts(pts, videoPacket.id());
+    GST_BUFFER_DTS(buffer) = GST_CLOCK_TIME_NONE;
+    GST_BUFFER_DURATION(buffer) = GST_CLOCK_TIME_NONE;
+    GST_BUFFER_OFFSET(buffer) = GST_BUFFER_OFFSET_NONE;
+#endif
+
+    this->m_streamParams[streamIndex].nFrame()++;
+
+    if (gst_app_src_push_buffer(GST_APP_SRC(source), buffer) != GST_FLOW_OK)
+        qWarning() << "Error pushing buffer to GStreamer pipeline";
+}
+
+void MediaWriterGStreamerPrivate::writeSubtitlePacket(const AkSubtitlePacket &packet)
+{
+    Q_UNUSED(packet)
+}
+
 #include "moc_mediawritergstreamer.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/gstreamer/src/mediawritergstreamer.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/gstreamer/src/mediawritergstreamer.h
@@ -25,6 +25,7 @@
 class MediaWriterGStreamerPrivate;
 class AkAudioPacket;
 class AkVideoPacket;
+class AkSubtitlePacket;
 
 class MediaWriterGStreamer: public MediaWriter
 {
@@ -34,50 +35,45 @@ class MediaWriterGStreamer: public Media
         MediaWriterGStreamer(QObject *parent=nullptr);
         ~MediaWriterGStreamer();
 
-        Q_INVOKABLE QString defaultFormat();
-        Q_INVOKABLE QString outputFormat() const;
-        Q_INVOKABLE QVariantList streams() const;
-        Q_INVOKABLE QStringList supportedFormats();
-        Q_INVOKABLE QStringList fileExtensions(const QString &format);
-        Q_INVOKABLE QString formatDescription(const QString &format);
-        Q_INVOKABLE QVariantList formatOptions();
-        Q_INVOKABLE QStringList supportedCodecs(const QString &format);
+        Q_INVOKABLE QString defaultFormat() override;
+        Q_INVOKABLE QString outputFormat() const override;
+        Q_INVOKABLE QVariantList streams() const override;
+        Q_INVOKABLE QStringList supportedFormats() override;
+        Q_INVOKABLE QStringList fileExtensions(const QString &format) override;
+        Q_INVOKABLE QString formatDescription(const QString &format) override;
+        Q_INVOKABLE QVariantList formatOptions() override;
+        Q_INVOKABLE QStringList supportedCodecs(const QString &format) override;
         Q_INVOKABLE QStringList supportedCodecs(const QString &format,
-                                                const QString &type);
+                                                AkCaps::CapsType type) override;
         Q_INVOKABLE QString defaultCodec(const QString &format,
-                                         const QString &type);
-        Q_INVOKABLE QString codecDescription(const QString &codec);
-        Q_INVOKABLE QString codecType(const QString &codec);
-        Q_INVOKABLE QVariantMap defaultCodecParams(const QString &codec);
+                                         AkCaps::CapsType type) override;
+        Q_INVOKABLE QString codecDescription(const QString &codec) override;
+        Q_INVOKABLE AkCaps::CapsType codecType(const QString &codec) override;
+        Q_INVOKABLE QVariantMap defaultCodecParams(const QString &codec) override;
         Q_INVOKABLE QVariantMap addStream(int streamIndex,
-                                          const AkCaps &streamCaps);
+                                          const AkCaps &streamCaps) override;
         Q_INVOKABLE QVariantMap addStream(int streamIndex,
                                           const AkCaps &streamCaps,
-                                          const QVariantMap &codecParams);
-        Q_INVOKABLE QVariantMap updateStream(int index);
+                                          const QVariantMap &codecParams) override;
+        Q_INVOKABLE QVariantMap updateStream(int index) override;
         Q_INVOKABLE QVariantMap updateStream(int index,
-                                             const QVariantMap &codecParams);
-        Q_INVOKABLE QVariantList codecOptions(int index);
+                                             const QVariantMap &codecParams) override;
+        Q_INVOKABLE QVariantList codecOptions(int index) override;
 
     private:
         MediaWriterGStreamerPrivate *d;
 
     public slots:
-        void setOutputFormat(const QString &outputFormat);
-        void setFormatOptions(const QVariantMap &formatOptions);
-        void setCodecOptions(int index, const QVariantMap &codecOptions);
-        void resetOutputFormat();
-        void resetFormatOptions();
-        void resetCodecOptions(int index);
-        void enqueuePacket(const AkPacket &packet);
-        void clearStreams();
-        bool init();
-        void uninit();
-
-    private slots:
-        void writeAudioPacket(const AkAudioPacket &packet);
-        void writeVideoPacket(const AkVideoPacket &packet);
-        void writeSubtitlePacket(const AkPacket &packet);
+        void setOutputFormat(const QString &outputFormat) override;
+        void setFormatOptions(const QVariantMap &formatOptions) override;
+        void setCodecOptions(int index, const QVariantMap &codecOptions) override;
+        void resetOutputFormat() override;
+        void resetFormatOptions() override;
+        void resetCodecOptions(int index) override;
+        void enqueuePacket(const AkPacket &packet) override;
+        void clearStreams() override;
+        bool init() override;
+        void uninit() override;
 
         friend class MediaWriterGStreamerPrivate;
 };
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/mediawriter.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/mediawriter.cpp
@@ -95,7 +95,7 @@ QStringList MediaWriter::supportedCodecs
 }
 
 QStringList MediaWriter::supportedCodecs(const QString &format,
-                                       const QString &type)
+                                         AkCaps::CapsType type)
 {
     Q_UNUSED(format)
     Q_UNUSED(type)
@@ -103,7 +103,7 @@ QStringList MediaWriter::supportedCodecs
     return {};
 }
 
-QString MediaWriter::defaultCodec(const QString &format, const QString &type)
+QString MediaWriter::defaultCodec(const QString &format, AkCaps::CapsType type)
 {
     Q_UNUSED(format)
     Q_UNUSED(type)
@@ -118,11 +118,11 @@ QString MediaWriter::codecDescription(co
     return {};
 }
 
-QString MediaWriter::codecType(const QString &codec)
+AkCaps::CapsType MediaWriter::codecType(const QString &codec)
 {
     Q_UNUSED(codec)
 
-    return {};
+    return AkCaps::CapsUnknown;
 }
 
 QVariantMap MediaWriter::defaultCodecParams(const QString &codec)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/mediawriter.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/mediawriter.h
@@ -20,7 +20,7 @@
 #ifndef MEDIAWRITER_H
 #define MEDIAWRITER_H
 
-#include <QObject>
+#include <akcaps.h>
 
 class AkCaps;
 class AkPacket;
@@ -78,11 +78,11 @@ class MediaWriter: public QObject
         Q_INVOKABLE virtual QVariantList formatOptions();
         Q_INVOKABLE virtual QStringList supportedCodecs(const QString &format);
         Q_INVOKABLE virtual QStringList supportedCodecs(const QString &format,
-                                                        const QString &type);
+                                                        AkCaps::CapsType type);
         Q_INVOKABLE virtual QString defaultCodec(const QString &format,
-                                                 const QString &type);
+                                                 AkCaps::CapsType type);
         Q_INVOKABLE virtual QString codecDescription(const QString &codec);
-        Q_INVOKABLE virtual QString codecType(const QString &codec);
+        Q_INVOKABLE virtual AkCaps::CapsType codecType(const QString &codec);
         Q_INVOKABLE virtual QVariantMap defaultCodecParams(const QString &codec);
         Q_INVOKABLE virtual QVariantMap addStream(int streamIndex,
                                                   const AkCaps &streamCaps);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/multisink.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/multisink.h
@@ -29,8 +29,8 @@ class MultiSink: public QObject, public
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "../pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // MULTISINK_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/multisinkelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/multisinkelement.cpp
@@ -26,7 +26,6 @@
 
 #include "multisinkelement.h"
 #include "mediawriter.h"
-#include "multisinkutils.h"
 
 using MediaWriterPtr = QSharedPointer<MediaWriter>;
 
@@ -37,7 +36,6 @@ class MultiSinkElementPrivate
         QString m_location;
         MediaWriterPtr m_mediaWriter;
         QString m_mediaWriterImpl;
-        MultiSinkUtils m_utils;
         QList<int> m_inputStreams;
         QReadWriteLock m_mutex;
 
@@ -47,7 +45,7 @@ class MultiSinkElementPrivate
         QMap<QString, QString> m_formatDescription;
         QStringList m_supportedCodecs;
         QMap<QString, QString> m_codecDescription;
-        QMap<QString, QString> m_codecType;
+        QMap<QString, AkCaps::CapsType> m_codecType;
         QMap<QString, QVariantMap> m_defaultCodecParams;
 
         explicit MultiSinkElementPrivate(MultiSinkElement *self);
@@ -233,7 +231,7 @@ QVariantList MultiSinkElement::formatOpt
 }
 
 QStringList MultiSinkElement::supportedCodecs(const QString &format,
-                                              const QString &type)
+                                              AkCaps::CapsType type)
 {
     this->d->m_mutex.lockForRead();
     QStringList supportedCodecs;
@@ -247,7 +245,7 @@ QStringList MultiSinkElement::supportedC
 }
 
 QString MultiSinkElement::defaultCodec(const QString &format,
-                                       const QString &type)
+                                       AkCaps::CapsType type)
 {
     this->d->m_mutex.lockForRead();
     QString defaultCodec;
@@ -265,7 +263,7 @@ QString MultiSinkElement::codecDescripti
     return this->d->m_codecDescription.value(codec);
 }
 
-QString MultiSinkElement::codecType(const QString &codec) const
+AkCaps::CapsType MultiSinkElement::codecType(const QString &codec) const
 {
     return this->d->m_codecType.value(codec);
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/multisinkelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/multisinkelement.h
@@ -21,6 +21,7 @@
 #define MULTISINKELEMENT_H
 
 #include <QVariantMap>
+#include <akcaps.h>
 #include <akelement.h>
 
 class MultiSinkElementPrivate;
@@ -74,11 +75,11 @@ class MultiSinkElement: public AkElement
         Q_INVOKABLE QString formatDescription(const QString &format) const;
         Q_INVOKABLE QVariantList formatOptions() const;
         Q_INVOKABLE QStringList supportedCodecs(const QString &format,
-                                                const QString &type="");
+                                                AkCaps::CapsType type=AkCaps::CapsUnknown);
         Q_INVOKABLE QString defaultCodec(const QString &format,
-                                         const QString &type);
+                                         AkCaps::CapsType type);
         Q_INVOKABLE QString codecDescription(const QString &codec) const;
-        Q_INVOKABLE QString codecType(const QString &codec) const;
+        Q_INVOKABLE AkCaps::CapsType codecType(const QString &codec) const;
         Q_INVOKABLE QVariantMap defaultCodecParams(const QString &codec) const;
         Q_INVOKABLE QVariantMap addStream(int streamIndex,
                                           const AkCaps &streamCaps,
@@ -117,8 +118,8 @@ class MultiSinkElement: public AkElement
         void resetCodecsBlackList();
         void clearStreams();
 
-        AkPacket iStream(const AkPacket &packet);
-        bool setState(AkElement::ElementState state);
+        AkPacket iStream(const AkPacket &packet) override;
+        bool setState(AkElement::ElementState state) override;
 };
 
 #endif // MULTISINKELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/multisinkutils.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2017  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include "multisinkutils.h"
-
-MultiSinkUtils::MultiSinkUtils(QObject *parent):
-    QObject(parent)
-{
-
-}
-
-bool MultiSinkUtils::matches(const QString &pattern,
-                             const QStringList &strings) const
-{
-    if (pattern.isEmpty())
-        return true;
-
-    for (const QString &str: strings)
-        if (str.contains(QRegExp(pattern,
-                                 Qt::CaseInsensitive,
-                                 QRegExp::Wildcard)))
-            return true;
-
-    return false;
-}
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/multisinkutils.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2017  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef MULTISINKUTILS_H
-#define MULTISINKUTILS_H
-
-#include <QObject>
-
-class MultiSinkUtils: public QObject
-{
-    Q_OBJECT
-
-    public:
-        MultiSinkUtils(QObject *parent=nullptr);
-
-        Q_INVOKABLE bool matches(const QString &pattern,
-                                 const QStringList &strings) const;
-};
-
-#endif // MULTISINKUTILS_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/ndkmedia/src/abstractstream.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/ndkmedia/src/abstractstream.cpp
@@ -114,9 +114,9 @@ AbstractStream::AbstractStream(AMediaMux
     AMediaFormat_setInt32(this->d->m_mediaFormat,
                           AMEDIAFORMAT_KEY_BIT_RATE,
                           bitrate);
-/*    AMediaFormat_setInt64(this->d->m_mediaFormat,
-                          AMEDIAFORMAT_KEY_DURATION,
-                          0);*/
+    //AMediaFormat_setInt64(this->d->m_mediaFormat,
+    //                    AMEDIAFORMAT_KEY_DURATION,
+    //                    0);
     AMediaFormat_setString(this->d->m_mediaFormat,
                            AMEDIAFORMAT_KEY_LANGUAGE,
                            "und");
@@ -205,6 +205,15 @@ void AbstractStream::convertPacket(const
     Q_UNUSED(packet)
 }
 
+void AbstractStream::encode(const AkPacket &packet,
+                            uint8_t *buffer,
+                            size_t bufferSize)
+{
+    Q_UNUSED(packet)
+    Q_UNUSED(buffer)
+    Q_UNUSED(bufferSize)
+}
+
 AkPacket AbstractStream::avPacketDequeue(size_t bufferSize)
 {
     Q_UNUSED(bufferSize)
@@ -266,13 +275,14 @@ void AbstractStreamPrivate::equeueLoop()
         } while (!packet && this->m_runEqueueLoop);
 
         if (this->m_runEqueueLoop) {
-            bufferSize = qMin(size_t(packet.buffer().size()), bufferSize);
-            memcpy(buffer, packet.buffer().constData(), bufferSize);
             auto presentationTimeUs =
                     qRound64(1e6 * packet.pts() * packet.timeBase().value());
             presentationTimeUs = this->nextPts(presentationTimeUs, packet.id());
+            self->encode(packet,
+                         buffer,
+                         bufferSize);
             AMediaCodec_queueInputBuffer(this->m_codec,
-                                         size_t(bufferIndex),
+                                         bufferIndex,
                                          0,
                                          bufferSize,
                                          size_t(presentationTimeUs),
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/ndkmedia/src/abstractstream.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/ndkmedia/src/abstractstream.h
@@ -60,6 +60,9 @@ class AbstractStream: public QObject
         int m_maxPacketQueueSize;
 
         virtual void convertPacket(const AkPacket &packet);
+        virtual void encode(const AkPacket &packet,
+                            uint8_t *buffer,
+                            size_t bufferSize);
         virtual AkPacket avPacketDequeue(size_t bufferSize);
 
     private:
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/ndkmedia/src/audiostream.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/ndkmedia/src/audiostream.cpp
@@ -166,6 +166,15 @@ void AudioStream::convertPacket(const Ak
     this->d->m_frameMutex.unlock();
 }
 
+void AudioStream::encode(const AkPacket &packet,
+                         uint8_t *buffer,
+                         size_t bufferSize)
+{
+    memcpy(buffer,
+           packet.constData(),
+           qMin(packet.size(), bufferSize));
+}
+
 AkPacket AudioStream::avPacketDequeue(size_t bufferSize)
 {
     if (bufferSize < 1)
@@ -176,13 +185,13 @@ AkPacket AudioStream::avPacketDequeue(si
                   / (this->d->m_caps.bps()
                      * this->d->m_caps.channels());
 
-    if (this->d->m_frame.caps().samples() < samples) {
+    if (this->d->m_frame.samples() < samples) {
         if (!this->d->m_frameReady.wait(&this->d->m_frameMutex,
                                         THREAD_WAIT_LIMIT)) {
             this->d->m_frameMutex.unlock();
 
             return {};
-        } else if (this->d->m_frame.caps().samples() < samples) {
+        } else if (this->d->m_frame.samples() < samples) {
             this->d->m_frameMutex.unlock();
 
             return {};
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/ndkmedia/src/audiostream.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/ndkmedia/src/audiostream.h
@@ -45,11 +45,14 @@ class AudioStream: public AbstractStream
         AudioStreamPrivate *d;
 
     protected:
-        void convertPacket(const AkPacket &packet);
-        AkPacket avPacketDequeue(size_t bufferSize);
+        void convertPacket(const AkPacket &packet) override;
+        void encode(const AkPacket &packet,
+                    uint8_t *buffer,
+                    size_t bufferSize) override;
+        AkPacket avPacketDequeue(size_t bufferSize) override;
 
     public slots:
-        bool init();
+        bool init() override;
 };
 
 #endif // AUDIOSTREAM_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/ndkmedia/src/mediawriterndkmedia.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/ndkmedia/src/mediawriterndkmedia.cpp
@@ -236,7 +236,7 @@ static const QVector<CodecOption> &codec
 
 class OutputFormatsInfo;
 using OutputFormatsInfoVector = QVector<OutputFormatsInfo>;
-using SupportedCodecsType = QMap<QString, QMap<QString, QStringList>>;
+using SupportedCodecsType = QMap<QString, QMap<AkCaps::CapsType, QStringList>>;
 
 class OutputFormatsInfo
 {
@@ -385,15 +385,15 @@ QVariantList MediaWriterNDKMedia::format
 
 QStringList MediaWriterNDKMedia::supportedCodecs(const QString &format)
 {
-    return this->supportedCodecs(format, "");
+    return this->supportedCodecs(format, AkCaps::CapsAny);
 }
 
 QStringList MediaWriterNDKMedia::supportedCodecs(const QString &format,
-                                                 const QString &type)
+                                                 AkCaps::CapsType type)
 {
     QStringList supportedCodecs;
 
-    if (type.isEmpty()) {
+    if (type == AkCaps::CapsAny) {
         for (auto &codecs: this->d->m_supportedCodecs.value(format)) {
             for (auto &codec: codecs)
                 if (!this->m_codecsBlackList.contains(codec))
@@ -413,7 +413,7 @@ QStringList MediaWriterNDKMedia::support
 }
 
 QString MediaWriterNDKMedia::defaultCodec(const QString &format,
-                                          const QString &type)
+                                          AkCaps::CapsType type)
 {
     auto codecs = this->d->m_supportedCodecs.value(format).value(type);
 
@@ -434,7 +434,7 @@ QString MediaWriterNDKMedia::codecDescri
     return info->description;
 }
 
-QString MediaWriterNDKMedia::codecType(const QString &codec)
+AkCaps::CapsType MediaWriterNDKMedia::codecType(const QString &codec)
 {
     auto info = CodecsInfo::byMimeType(codec);
 
@@ -442,8 +442,8 @@ QString MediaWriterNDKMedia::codecType(c
         return {};
 
     return info->mimeType.startsWith("audio/")?
-                QStringLiteral("audio/x-raw"):
-                QStringLiteral("video/x-raw");
+                AkCaps::CapsAudio:
+                AkCaps::CapsVideo;
 }
 
 QVariantMap MediaWriterNDKMedia::defaultCodecParams(const QString &codec)
@@ -467,7 +467,10 @@ QVariantMap MediaWriterNDKMedia::default
         codecParams["defaultChannelLayout"] = "stereo";
         codecParams["defaultChannels"] = 2;
     } else {
-        static const QStringList supportedPixelFormats {"yuv420p", "nv12"};
+        static const QVariantList supportedPixelFormats {
+            int(AkVideoCaps::Format_yuv420p),
+            int(AkVideoCaps::Format_nv12)
+        };
 
         codecParams["supportedPixelFormats"] = supportedPixelFormats;
         codecParams["supportedFrameRates"] = QVariantList();
@@ -501,18 +504,19 @@ QVariantMap MediaWriterNDKMedia::addStre
     if (codec.isEmpty())
         return {};
 
-    auto supportedCodecs = this->supportedCodecs(outputFormat, streamCaps.mimeType());
+    auto supportedCodecs = this->supportedCodecs(outputFormat,
+                                                 streamCaps.type());
 
     if (codec.isEmpty() || !supportedCodecs.contains(codec))
-        codec = this->defaultCodec(outputFormat, streamCaps.mimeType());
+        codec = this->defaultCodec(outputFormat, streamCaps.type());
 
     outputParams["codec"] = codec;
     outputParams["caps"] = QVariant::fromValue(streamCaps);
 
     auto defaultCodecParams = this->defaultCodecParams(codec);
 
-    if (streamCaps.mimeType() == "audio/x-raw"
-        || streamCaps.mimeType() == "video/x-raw") {
+    if (streamCaps.type() == AkCaps::CapsAudio
+        || streamCaps.type() == AkCaps::CapsVideo) {
         int bitrate = codecParams.value("bitrate").toInt();
 
         if (bitrate < 1)
@@ -521,7 +525,7 @@ QVariantMap MediaWriterNDKMedia::addStre
         outputParams["bitrate"] = bitrate;
     }
 
-    if (streamCaps.mimeType() == "video/x-raw") {
+    if (streamCaps.type() == AkCaps::CapsVideo) {
         int gop = codecParams.value("gop").toInt();
 
         if (gop < 1)
@@ -561,29 +565,28 @@ QVariantMap MediaWriterNDKMedia::updateS
     QString codec;
 
     if (codecParams.contains("codec")) {
-        if (this->supportedCodecs(outputFormat, streamCaps.mimeType())
+        if (this->supportedCodecs(outputFormat, streamCaps.type())
             .contains(codecParams["codec"].toString())) {
             codec = codecParams["codec"].toString();
         } else
-            codec = this->defaultCodec(outputFormat, streamCaps.mimeType());
+            codec = this->defaultCodec(outputFormat, streamCaps.type());
 
         this->d->m_streamConfigs[index]["codec"] = codec;
         streamChanged = true;
-    } else
+    } else {
         codec = this->d->m_streamConfigs[index]["codec"].toString();
+    }
 
     auto codecDefaults = this->defaultCodecParams(codec);
 
-    if ((streamCaps.mimeType() == "audio/x-raw"
-         || streamCaps.mimeType() == "video/x-raw")
+    if ((streamCaps.type() == AkCaps::CapsAudio
+         || streamCaps.type() == AkCaps::CapsVideo)
         && codecParams.contains("bitrate")) {
         int bitRate = codecParams["bitrate"].toInt();
         this->d->m_streamConfigs[index]["bitrate"] =
                 bitRate > 0? bitRate: codecDefaults["defaultBitRate"].toInt();
         streamChanged = true;
-    }
-
-    if (streamCaps.mimeType() == "video/x-raw"
+    } else if (streamCaps.type() == AkCaps::CapsVideo
         && codecParams.contains("gop")) {
         int gop = codecParams["gop"].toInt();
         this->d->m_streamConfigs[index]["gop"] =
@@ -723,24 +726,27 @@ const SupportedCodecsType &MediaWriterND
             if (tempFile.open()) {
                 if (auto muxer = AMediaMuxer_new(tempFile.handle(), format.format)) {
                     AMediaFormat *mediaFormat = nullptr;
-                    QString mimeType;
+                    AkCaps::CapsType mimeType = AkCaps::CapsUnknown;
 
                     if (codec.startsWith("audio/")) {
                         mediaFormat = audioMediaFormat;
-                        mimeType = "audio/x-raw";
+                        mimeType = AkCaps::CapsAudio;
                     } else {
                         mediaFormat = videoMediaFormat;
-                        mimeType = "video/x-raw";
+                        mimeType = AkCaps::CapsVideo;
                     }
 
-                    AMediaFormat_setString(mediaFormat,
-                                           AMEDIAFORMAT_KEY_MIME,
-                                           codec.toStdString().c_str());
+                    if (mimeType != AkCaps::CapsUnknown) {
+                        AMediaFormat_setString(mediaFormat,
+                                               AMEDIAFORMAT_KEY_MIME,
+                                               codec.toStdString().c_str());
+
+                        if (AMediaMuxer_addTrack(muxer, mediaFormat) >= 0)
+                            supportedCodecs[format.mimeType][mimeType] << codec;
 
-                    if (AMediaMuxer_addTrack(muxer, mediaFormat) >= 0)
-                        supportedCodecs[format.mimeType][mimeType] << codec;
+                        AMediaMuxer_start(muxer);
+                    }
 
-                    AMediaMuxer_start(muxer);
                     AMediaMuxer_delete(muxer);
                 }
             }
@@ -1227,14 +1233,14 @@ bool MediaWriterNDKMedia::init()
         AbstractStreamPtr mediaStream;
         int inputId = configs["index"].toInt();
 
-        if (streamCaps.mimeType() == "audio/x-raw") {
+        if (streamCaps.type() == AkCaps::CapsAudio) {
             mediaStream =
                     AbstractStreamPtr(new AudioStream(this->d->m_mediaMuxer,
                                                       uint(i), inputId,
                                                       configs,
                                                       this->d->m_codecOptions,
                                                       this));
-        } else if (streamCaps.mimeType() == "video/x-raw") {
+        } else if (streamCaps.type() == AkCaps::CapsVideo) {
             mediaStream =
                     AbstractStreamPtr(new VideoStream(this->d->m_mediaMuxer,
                                                       uint(i), inputId,
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/ndkmedia/src/mediawriterndkmedia.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/ndkmedia/src/mediawriterndkmedia.h
@@ -36,48 +36,48 @@ class MediaWriterNDKMedia: public MediaW
         MediaWriterNDKMedia(QObject *parent=nullptr);
         ~MediaWriterNDKMedia();
 
-        Q_INVOKABLE QString defaultFormat();
-        Q_INVOKABLE QString outputFormat() const;
-        Q_INVOKABLE QVariantList streams() const;
-        Q_INVOKABLE qint64 maxPacketQueueSize() const;
-        Q_INVOKABLE QStringList supportedFormats();
-        Q_INVOKABLE QStringList fileExtensions(const QString &format);
-        Q_INVOKABLE QString formatDescription(const QString &format);
-        Q_INVOKABLE QVariantList formatOptions();
-        Q_INVOKABLE QStringList supportedCodecs(const QString &format);
+        Q_INVOKABLE QString defaultFormat() override;
+        Q_INVOKABLE QString outputFormat() const override;
+        Q_INVOKABLE QVariantList streams() const override;
+        Q_INVOKABLE qint64 maxPacketQueueSize() const override;
+        Q_INVOKABLE QStringList supportedFormats() override;
+        Q_INVOKABLE QStringList fileExtensions(const QString &format) override;
+        Q_INVOKABLE QString formatDescription(const QString &format) override;
+        Q_INVOKABLE QVariantList formatOptions() override;
+        Q_INVOKABLE QStringList supportedCodecs(const QString &format) override;
         Q_INVOKABLE QStringList supportedCodecs(const QString &format,
-                                                const QString &type);
+                                                AkCaps::CapsType type) override;
         Q_INVOKABLE QString defaultCodec(const QString &format,
-                                         const QString &type);
-        Q_INVOKABLE QString codecDescription(const QString &codec);
-        Q_INVOKABLE QString codecType(const QString &codec);
-        Q_INVOKABLE QVariantMap defaultCodecParams(const QString &codec);
+                                         AkCaps::CapsType type) override;
+        Q_INVOKABLE QString codecDescription(const QString &codec) override;
+        Q_INVOKABLE AkCaps::CapsType codecType(const QString &codec) override;
+        Q_INVOKABLE QVariantMap defaultCodecParams(const QString &codec) override;
         Q_INVOKABLE QVariantMap addStream(int streamIndex,
-                                          const AkCaps &streamCaps);
+                                          const AkCaps &streamCaps) override;
         Q_INVOKABLE QVariantMap addStream(int streamIndex,
                                           const AkCaps &streamCaps,
-                                          const QVariantMap &codecParams);
-        Q_INVOKABLE QVariantMap updateStream(int index);
+                                          const QVariantMap &codecParams) override;
+        Q_INVOKABLE QVariantMap updateStream(int index) override;
         Q_INVOKABLE QVariantMap updateStream(int index,
-                                             const QVariantMap &codecParams);
-        Q_INVOKABLE QVariantList codecOptions(int index);
+                                             const QVariantMap &codecParams) override;
+        Q_INVOKABLE QVariantList codecOptions(int index) override;
 
     private:
         MediaWriterNDKMediaPrivate *d;
 
     public slots:
-        void setOutputFormat(const QString &outputFormat);
-        void setFormatOptions(const QVariantMap &formatOptions);
-        void setCodecOptions(int index, const QVariantMap &codecOptions);
-        void setMaxPacketQueueSize(qint64 maxPacketQueueSize);
-        void resetOutputFormat();
-        void resetFormatOptions();
-        void resetCodecOptions(int index);
-        void resetMaxPacketQueueSize();
-        void enqueuePacket(const AkPacket &packet);
-        void clearStreams();
-        bool init();
-        void uninit();
+        void setOutputFormat(const QString &outputFormat) override;
+        void setFormatOptions(const QVariantMap &formatOptions) override;
+        void setCodecOptions(int index, const QVariantMap &codecOptions) override;
+        void setMaxPacketQueueSize(qint64 maxPacketQueueSize) override;
+        void resetOutputFormat() override;
+        void resetFormatOptions() override;
+        void resetCodecOptions(int index) override;
+        void resetMaxPacketQueueSize() override;
+        void enqueuePacket(const AkPacket &packet) override;
+        void clearStreams() override;
+        bool init() override;
+        void uninit() override;
         bool startMuxing();
 
     private slots:
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/ndkmedia/src/videostream.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/ndkmedia/src/videostream.cpp
@@ -25,6 +25,8 @@
 #include <akcaps.h>
 #include <akfrac.h>
 #include <akpacket.h>
+#include <akvideoconverter.h>
+#include <akvideoformatspec.h>
 #include <akvideopacket.h>
 #include <media/NdkMediaCodec.h>
 
@@ -89,58 +91,40 @@ using ImageFormatToPixelFormatMap = QMap
 inline const ImageFormatToPixelFormatMap &imageFormatToPixelFormat()
 {
     static const ImageFormatToPixelFormatMap imgFmtToPixFmt {
-        {COLOR_FormatMonochrome               , AkVideoCaps::Format_monob      },
-        {COLOR_Format8bitRGB332               , AkVideoCaps::Format_rgb8       },
-        {COLOR_Format12bitRGB444              , AkVideoCaps::Format_rgb444le   },
-        {COLOR_Format16bitARGB4444            , AkVideoCaps::Format_argb444le  },
-        {COLOR_Format16bitARGB1555            , AkVideoCaps::Format_argb555le  },
-        {COLOR_Format16bitRGB565              , AkVideoCaps::Format_rgb565le   },
-        {COLOR_Format16bitBGR565              , AkVideoCaps::Format_bgr565le   },
-        {COLOR_Format18bitRGB666              , AkVideoCaps::Format_rgb666     },
-        {COLOR_Format18bitARGB1665            , AkVideoCaps::Format_argb1665   },
-        {COLOR_Format19bitARGB1666            , AkVideoCaps::Format_argb1666   },
-        {COLOR_Format24bitRGB888              , AkVideoCaps::Format_rgb24      },
-        {COLOR_Format24bitBGR888              , AkVideoCaps::Format_bgr24      },
-        {COLOR_Format24bitARGB1887            , AkVideoCaps::Format_argb1887   },
-        {COLOR_Format25bitARGB1888            , AkVideoCaps::Format_bgra1888   },
-        {COLOR_Format32bitBGRA8888            , AkVideoCaps::Format_bgra       },
-        {COLOR_Format32bitARGB8888            , AkVideoCaps::Format_argb       },
-        {COLOR_FormatYUV411Planar             , AkVideoCaps::Format_yuv411p    },
-        {COLOR_FormatYUV411PackedPlanar       , AkVideoCaps::Format_yuv411p    },
-        {COLOR_FormatYUV420Planar             , AkVideoCaps::Format_yuv420p    },
-        {COLOR_FormatYUV420PackedPlanar       , AkVideoCaps::Format_yuv420p    },
-        {COLOR_FormatYUV420SemiPlanar         , AkVideoCaps::Format_nv12       },
-        {COLOR_FormatYUV422Planar             , AkVideoCaps::Format_yuv422p    },
-        {COLOR_FormatYUV422PackedPlanar       , AkVideoCaps::Format_yuv422p    },
-        {COLOR_FormatYUV422SemiPlanar         , AkVideoCaps::Format_yuv422p    },
-        {COLOR_FormatYCbYCr                   , AkVideoCaps::Format_yuyv422    },
-        {COLOR_FormatYCrYCb                   , AkVideoCaps::Format_yvyu422    },
-        {COLOR_FormatCbYCrY                   , AkVideoCaps::Format_uyvy422    },
-        {COLOR_FormatCrYCbY                   , AkVideoCaps::Format_vyuy422    },
-        {COLOR_FormatYUV444Interleaved        , AkVideoCaps::Format_yuv444     },
-        {COLOR_FormatRawBayer8bit             , AkVideoCaps::Format_bayer_rggb8},
-//        {COLOR_FormatRawBayer10bit            , AkVideoCaps::Format_           },
-//        {COLOR_FormatRawBayer8bitcompressed   , AkVideoCaps::Format_           },
-        {COLOR_FormatL2                       , AkVideoCaps::Format_gray2      },
-        {COLOR_FormatL4                       , AkVideoCaps::Format_gray4      },
-        {COLOR_FormatL8                       , AkVideoCaps::Format_gray       },
-        {COLOR_FormatL16                      , AkVideoCaps::Format_gray16le   },
-        {COLOR_FormatL24                      , AkVideoCaps::Format_gray24     },
-        {COLOR_FormatL32                      , AkVideoCaps::Format_gray32     },
-        {COLOR_FormatYUV420PackedSemiPlanar   , AkVideoCaps::Format_yuv420p    },
-        {COLOR_FormatYUV422PackedSemiPlanar   , AkVideoCaps::Format_yuv422p    },
-        {COLOR_Format18BitBGR666              , AkVideoCaps::Format_bgr666     },
-        {COLOR_Format24BitARGB6666            , AkVideoCaps::Format_argb6666   },
-        {COLOR_Format24BitABGR6666            , AkVideoCaps::Format_abgr6666   },
-//        {COLOR_TI_FormatYUV420PackedSemiPlanar, AkVideoCaps::Format_           },
-//        {COLOR_FormatSurface                  , AkVideoCaps::Format_           },
-        {COLOR_Format32bitABGR8888            , AkVideoCaps::Format_abgr       },
-        {COLOR_FormatYUV420Flexible           , AkVideoCaps::Format_yuv420p    },
-        {COLOR_FormatYUV422Flexible           , AkVideoCaps::Format_yuv422p    },
-        {COLOR_FormatYUV444Flexible           , AkVideoCaps::Format_yuv444p    },
-        {COLOR_FormatRGBFlexible              , AkVideoCaps::Format_rgbp       },
-        {COLOR_FormatRGBAFlexible             , AkVideoCaps::Format_rgbap      },
-//        {COLOR_QCOM_FormatYUV420SemiPlanar    , AkVideoCaps::Format_           },
+        {COLOR_Format8bitRGB332            , AkVideoCaps::Format_rgb332    },
+        {COLOR_Format12bitRGB444           , AkVideoCaps::Format_rgb444le  },
+        {COLOR_Format16bitARGB4444         , AkVideoCaps::Format_argb4444le},
+        {COLOR_Format16bitARGB1555         , AkVideoCaps::Format_argb1555le},
+        {COLOR_Format16bitRGB565           , AkVideoCaps::Format_rgb565le  },
+        {COLOR_Format16bitBGR565           , AkVideoCaps::Format_bgr565le  },
+        {COLOR_Format24bitRGB888           , AkVideoCaps::Format_rgb24     },
+        {COLOR_Format24bitBGR888           , AkVideoCaps::Format_bgr24     },
+        {COLOR_Format32bitBGRA8888         , AkVideoCaps::Format_bgra      },
+        {COLOR_Format32bitARGB8888         , AkVideoCaps::Format_argb      },
+        {COLOR_FormatYUV411Planar          , AkVideoCaps::Format_yuv411p   },
+        {COLOR_FormatYUV411PackedPlanar    , AkVideoCaps::Format_yuv411p   },
+        {COLOR_FormatYUV420Planar          , AkVideoCaps::Format_yuv420p   },
+        {COLOR_FormatYUV420PackedPlanar    , AkVideoCaps::Format_yuv420p   },
+        {COLOR_FormatYUV420SemiPlanar      , AkVideoCaps::Format_nv12      },
+        {COLOR_FormatYUV422Planar          , AkVideoCaps::Format_yuv422p   },
+        {COLOR_FormatYUV422PackedPlanar    , AkVideoCaps::Format_yuv422p   },
+        {COLOR_FormatYUV422SemiPlanar      , AkVideoCaps::Format_yuv422p   },
+        {COLOR_FormatYCbYCr                , AkVideoCaps::Format_yuyv422   },
+        {COLOR_FormatYCrYCb                , AkVideoCaps::Format_yvyu422   },
+        {COLOR_FormatCbYCrY                , AkVideoCaps::Format_uyvy422   },
+        {COLOR_FormatCrYCbY                , AkVideoCaps::Format_vyuy422   },
+        {COLOR_FormatYUV444Interleaved     , AkVideoCaps::Format_yuv444    },
+        {COLOR_FormatL8                    , AkVideoCaps::Format_gray8     },
+        {COLOR_FormatL16                   , AkVideoCaps::Format_gray16le  },
+        {COLOR_FormatL32                   , AkVideoCaps::Format_gray32le  },
+        {COLOR_FormatYUV420PackedSemiPlanar, AkVideoCaps::Format_yuv420p   },
+        {COLOR_FormatYUV422PackedSemiPlanar, AkVideoCaps::Format_yuv422p   },
+        {COLOR_Format32bitABGR8888         , AkVideoCaps::Format_abgr      },
+        {COLOR_FormatYUV420Flexible        , AkVideoCaps::Format_yuv420p   },
+        {COLOR_FormatYUV422Flexible        , AkVideoCaps::Format_yuv422p   },
+        {COLOR_FormatYUV444Flexible        , AkVideoCaps::Format_yuv444p   },
+        {COLOR_FormatRGBFlexible           , AkVideoCaps::Format_rgb24p    },
+        {COLOR_FormatRGBAFlexible          , AkVideoCaps::Format_rgbap     },
     };
 
     return imgFmtToPixFmt;
@@ -159,6 +143,10 @@ const QVector<QSize> &h263SupportedSize(
     return supportedSize;
 }
 
+#if __ANDROID_API__ < 28
+const char *AMEDIAFORMAT_KEY_SLICE_HEIGHT = "slice-height";
+#endif
+
 class VideoStreamPrivate
 {
     public:
@@ -167,6 +155,7 @@ class VideoStreamPrivate
         QMutex m_frameMutex;
         QWaitCondition m_frameReady;
         AkVideoCaps m_caps;
+        AkVideoConverter m_videoConverter;
 
         explicit VideoStreamPrivate(VideoStream *self);
         static AkVideoCaps nearestH263Caps(const AkVideoCaps &caps);
@@ -190,14 +179,14 @@ VideoStream::VideoStream(AMediaMuxer *me
     this->d->m_caps = configs["caps"].value<AkCaps>();
     auto codecName = configs["codec"].toString();
     auto defaultCodecParams = mediaWriter->defaultCodecParams(codecName);
-    auto pixelFormat = AkVideoCaps::pixelFormatToString(this->d->m_caps.format());
+    auto pixelFormat = this->d->m_caps.format();
     auto supportedPixelFormats =
-            defaultCodecParams["supportedPixelFormats"].toStringList();
+            defaultCodecParams["supportedPixelFormats"].toList();
 
-    if (!supportedPixelFormats.isEmpty()
-        && !supportedPixelFormats.contains(pixelFormat)) {
-        auto defaultPixelFormat = defaultCodecParams["defaultPixelFormat"].toString();
-        this->d->m_caps.setFormat(AkVideoCaps::pixelFormatFromString(defaultPixelFormat));
+    if (!supportedPixelFormats.contains(int(pixelFormat))) {
+        auto defaultPixelFormat =
+                AkVideoCaps::PixelFormat(defaultCodecParams["defaultPixelFormat"].toInt());
+        this->d->m_caps.setFormat(defaultPixelFormat);
     }
 
     if (codecName == "video/3gpp")
@@ -221,9 +210,23 @@ VideoStream::VideoStream(AMediaMuxer *me
     AMediaFormat_setInt32(this->mediaFormat(),
                           AMEDIAFORMAT_KEY_FRAME_RATE,
                           qRound(this->d->m_caps.fps().value()));
+    auto specs = AkVideoCaps::formatSpecs(this->d->m_caps.format());
+    auto &plane = specs.plane(0);
+    size_t stride = this->d->m_caps.width() & 0x1?
+                        plane.bitsSize() * (this->d->m_caps.width() + 1) / 8:
+                        plane.bitsSize() * this->d->m_caps.width() / 8;
+    AMediaFormat_setInt32(this->mediaFormat(),
+                          AMEDIAFORMAT_KEY_STRIDE,
+                          stride);
+#if __ANDROID_API__ >= 28
+    AMediaFormat_setInt32(this->mediaFormat(),
+                          AMEDIAFORMAT_KEY_SLICE_HEIGHT,
+                          this->d->m_caps.height());
+#endif
     AMediaFormat_setInt32(this->mediaFormat(),
                           AMEDIAFORMAT_KEY_I_FRAME_INTERVAL,
                           interval);
+    this->d->m_videoConverter.setOutputCaps(this->d->m_caps);
 }
 
 VideoStream::~VideoStream()
@@ -242,17 +245,56 @@ void VideoStream::convertPacket(const Ak
     if (!packet)
         return;
 
-    AkVideoPacket videoPacket(packet);
-    videoPacket = videoPacket.scaled(this->d->m_caps.width(),
-                                     this->d->m_caps.height());
-    videoPacket = videoPacket.convert(this->d->m_caps.format());
-
     this->d->m_frameMutex.lock();
-    this->d->m_frame = videoPacket;
+
+    this->d->m_videoConverter.begin();
+    this->d->m_frame = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
     this->d->m_frameReady.wakeAll();
     this->d->m_frameMutex.unlock();
 }
 
+void VideoStream::encode(const AkPacket &packet,
+                         uint8_t *buffer,
+                         size_t bufferSize)
+{
+    Q_UNUSED(bufferSize)
+    AkVideoPacket videoPacket(packet);
+
+    int32_t stride = 0;
+    AMediaFormat_getInt32(this->mediaFormat(),
+                          AMEDIAFORMAT_KEY_STRIDE,
+                          &stride);
+    int32_t sliceHeight = 0;
+    AMediaFormat_getInt32(this->mediaFormat(),
+                          AMEDIAFORMAT_KEY_SLICE_HEIGHT,
+                          &sliceHeight);
+
+    if (sliceHeight < videoPacket.caps().height())
+        sliceHeight = videoPacket.caps().height();
+
+    auto oData = buffer;
+
+    for (int plane = 0; plane < videoPacket.planes(); ++plane) {
+        auto iLineSize = videoPacket.lineSize(plane);
+        auto oLineSize = videoPacket.planes() > 1?
+                             stride >> videoPacket.widthDiv(plane):
+                             stride;
+        auto lineSize = qMin<size_t>(iLineSize, oLineSize);
+        auto heightDiv = videoPacket.heightDiv(plane);
+
+        for (int y = 0; y < videoPacket.caps().height(); ++y) {
+            int ys = y >> heightDiv;
+            memcpy(oData + ys * oLineSize,
+                   videoPacket.constLine(plane, y),
+                   lineSize);
+        }
+
+        oData += oLineSize * (sliceHeight >> heightDiv);
+    }
+}
+
 AkPacket VideoStream::avPacketDequeue(size_t bufferSize)
 {
     Q_UNUSED(bufferSize)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSink/src/ndkmedia/src/videostream.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSink/src/ndkmedia/src/videostream.h
@@ -45,8 +45,11 @@ class VideoStream: public AbstractStream
         VideoStreamPrivate *d;
 
     protected:
-        void convertPacket(const AkPacket &packet);
-        AkPacket avPacketDequeue(size_t bufferSize);
+        void convertPacket(const AkPacket &packet) override;
+        void encode(const AkPacket &packet,
+                    uint8_t *buffer,
+                    size_t bufferSize) override;
+        AkPacket avPacketDequeue(size_t bufferSize) override;
 };
 
 #endif // VIDEOSTREAM_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/share/qml/main.qml
@@ -20,6 +20,7 @@
 import QtQuick 2.12
 import QtQuick.Controls 2.5
 import QtQuick.Layouts 1.3
+import Ak 1.0
 
 GridLayout {
     columns: 2
@@ -45,7 +46,7 @@ GridLayout {
         var stream
         var lang
         var description
-        var streams = MultiSrc.listTracks("audio/x-raw")
+        var streams = MultiSrc.listTracks(AkCaps.CapsAudio)
         lstAudioTracks.append({stream: -1, language: "None"})
 
         for (stream in streams) {
@@ -58,7 +59,7 @@ GridLayout {
             lstAudioTracks.append({stream: streams[stream], language: description})
         }
 
-        streams = MultiSrc.listTracks("video/x-raw")
+        streams = MultiSrc.listTracks(AkCaps.CapsVideo)
         lstVideoTracks.append({stream: -1, language: "None"})
 
         for (stream in streams) {
@@ -71,7 +72,7 @@ GridLayout {
             lstVideoTracks.append({stream: streams[stream], language: description})
         }
 
-        streams = MultiSrc.listTracks("text/x-raw")
+        streams = MultiSrc.listTracks(AkCaps.CapsSubtitle)
         lstSubtitlesTracks.append({stream: -1, language: "None"})
 
         for (stream in streams) {
@@ -87,8 +88,8 @@ GridLayout {
         cbxAudioTracks.currentIndex = lstAudioTracks.count > 1? 1: 0
         cbxVideoTracks.currentIndex = lstVideoTracks.count > 1? 1: 0
         cbxSubtitlesTracks.currentIndex = lstSubtitlesTracks.count > 1? 1: 0
-        MultiSrc.streams = [MultiSrc.defaultStream("audio/x-raw"),
-                            MultiSrc.defaultStream("video/x-raw")]
+        MultiSrc.streams = [MultiSrc.defaultStream(AkCaps.CapsAudio),
+                            MultiSrc.defaultStream(AkCaps.CapsVideo)]
 
         updating = false
     }
@@ -118,6 +119,7 @@ GridLayout {
     }
 
     Label {
+        id: txtVideoTrack
         text: qsTr("Video track")
     }
     ComboBox {
@@ -127,10 +129,13 @@ GridLayout {
             id: lstVideoTracks
         }
         Layout.fillWidth: true
+        Accessible.description: txtVideoTrack.text
+
         onCurrentIndexChanged: updateStreams()
     }
 
     Label {
+        id: txtAudioTrack
         text: qsTr("Audio track")
     }
     ComboBox {
@@ -140,10 +145,13 @@ GridLayout {
             id: lstAudioTracks
         }
         Layout.fillWidth: true
+        Accessible.description: txtAudioTrack.text
+
         onCurrentIndexChanged: updateStreams()
     }
 
     Label {
+        id: txtSubtitlesTrack
         text: qsTr("Subtitles track")
     }
     ComboBox {
@@ -153,6 +161,16 @@ GridLayout {
             id: lstSubtitlesTracks
         }
         Layout.fillWidth: true
+        Accessible.description: txtSubtitlesTrack.text
+
         onCurrentIndexChanged: updateStreams()
     }
+
+    CheckBox {
+     id: cbSynchronise
+     text: qsTr("Synchronise")
+     Layout.fillWidth: true
+     checked: MultiSrc.sync
+     onToggled:MultiSrc.setSync(checked)
+    }
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/abstractstream.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/abstractstream.cpp
@@ -28,11 +28,6 @@
 #include <akfrac.h>
 #include <akcaps.h>
 
-extern "C"
-{
-    #include <libavcodec/avcodec.h>
-}
-
 #include "abstractstream.h"
 #include "clock.h"
 
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/abstractstream.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/abstractstream.h
@@ -24,6 +24,7 @@
 
 extern "C"
 {
+    #include <libavcodec/avcodec.h>
     #include <libavformat/avformat.h>
 }
 
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/audiostream.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/audiostream.cpp
@@ -103,7 +103,12 @@ AkCaps AudioStream::caps() const
 
     AkAudioCaps caps(AudioStreamPrivate::sampleFormats().value(oFormat),
                      AudioStreamPrivate::channelLayouts()
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 24, 100)
+                     .value(this->codecContext()->ch_layout.u.mask,
+#else
                      .value(this->codecContext()->channel_layout,
+#endif
+
                           AkAudioCaps::Layout_stereo),
                      this->codecContext()->sample_rate,
                      AudioStreamPrivate::planarFormats().contains(oFormat));
@@ -165,55 +170,30 @@ AudioStreamPrivate::AudioStreamPrivate(A
 
 AkAudioPacket AudioStreamPrivate::frameToPacket(AVFrame *iFrame)
 {
-    int iChannels = av_get_channel_layout_nb_channels(iFrame->channel_layout);
-
-    AVFrame frame;
-    memset(&frame, 0, sizeof(AVFrame));
-
-    int frameSize = av_samples_get_buffer_size(nullptr,
-                                               iChannels,
-                                               iFrame->nb_samples,
-                                               AVSampleFormat(iFrame->format),
-                                               1);
-
-    QByteArray iBuffer(frameSize, 0);
-
-    if (av_samples_fill_arrays(frame.data,
-                               frame.linesize,
-                               reinterpret_cast<const uint8_t *>(iBuffer.constData()),
-                               iChannels,
-                               iFrame->nb_samples,
-                               AVSampleFormat(iFrame->format),
-                               1) < 0) {
-        return AkPacket();
-    }
-
-    if (av_samples_copy(frame.data,
-                        iFrame->data,
-                        0,
-                        0,
-                        iFrame->nb_samples,
-                        iChannels,
-                        AVSampleFormat(iFrame->format)) < 0) {
-        return AkPacket();
+    AkAudioCaps caps(AudioStreamPrivate::sampleFormats()
+                     .value(AVSampleFormat(iFrame->format)),
+                     AudioStreamPrivate::channelLayouts()
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 24, 100)
+                     .value(iFrame->ch_layout.u.mask),
+#else
+                     .value(iFrame->channel_layout),
+#endif
+                     AudioStreamPrivate::planarFormats()
+                     .contains(AVSampleFormat(iFrame->format)),
+                     iFrame->sample_rate);
+    AkAudioPacket packet(caps, iFrame->nb_samples);
+    size_t lineSize = iFrame->linesize[0];
+
+    for (int plane = 0; plane < packet.planes(); ++plane) {
+        memcpy(packet.plane(plane),
+               iFrame->data[plane],
+               qMin<size_t>(packet.planeSize(plane), lineSize));
     }
 
-    AkAudioPacket packet;
-    packet.caps() =
-            AkAudioCaps(AudioStreamPrivate::sampleFormats()
-                        .value(AVSampleFormat(iFrame->format)),
-                        AudioStreamPrivate::channelLayouts()
-                        .value(iFrame->channel_layout),
-                        iFrame->sample_rate,
-                        iFrame->nb_samples,
-                        AudioStreamPrivate::planarFormats()
-                        .contains(AVSampleFormat(iFrame->format)));
-
-    packet.buffer() = iBuffer;
-    packet.pts() = iFrame->pts;
-    packet.timeBase() = self->timeBase();
-    packet.index() = int(self->index());
-    packet.id() = self->id();
+    packet.setPts(iFrame->pts);
+    packet.setTimeBase(self->timeBase());
+    packet.setIndex(int(self->index()));
+    packet.setId(self->id());
 
     return packet;
 }
@@ -278,11 +258,19 @@ AVFrame *AudioStreamPrivate::copyFrame(A
 {
     auto oFrame = av_frame_alloc();
     oFrame->format = frame->format;
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 24, 100)
+    av_channel_layout_copy(&oFrame->ch_layout, &frame->ch_layout);
+#else
     oFrame->channel_layout = frame->channel_layout;
+#endif
     oFrame->sample_rate = frame->sample_rate;
     oFrame->nb_samples = frame->nb_samples;
     oFrame->pts = frame->pts;
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 24, 100)
+    int channels = oFrame->ch_layout.nb_channels;
+#else
     int channels = av_get_channel_layout_nb_channels(oFrame->channel_layout);
+#endif
 
     av_samples_alloc(oFrame->data,
                      oFrame->linesize,
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/audiostream.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/audiostream.h
@@ -38,12 +38,12 @@ class AudioStream: public AbstractStream
                     QObject *parent=nullptr);
         ~AudioStream();
 
-        Q_INVOKABLE AkCaps caps() const;
-        Q_INVOKABLE bool decodeData();
+        Q_INVOKABLE AkCaps caps() const override;
+        Q_INVOKABLE bool decodeData() override;
 
     protected:
-        void processPacket(AVPacket *packet);
-        void processData(AVFrame *frame);
+        void processPacket(AVPacket *packet) override;
+        void processData(AVFrame *frame) override;
 
     private:
         AudioStreamPrivate *d;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/mediasourceffmpeg.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/mediasourceffmpeg.cpp
@@ -18,17 +18,22 @@
  */
 
 #include <QApplication>
-#include <QDesktopWidget>
 #include <QFileInfo>
-#include <QtConcurrent>
-#include <QThreadPool>
-#include <QMutex>
 #include <QFuture>
+#include <QMutex>
+#include <QScreen>
+#include <QThreadPool>
 #include <QWaitCondition>
 #include <QWaitCondition>
+#include <QtConcurrent>
 #include <ak.h>
 #include <akcaps.h>
 
+extern "C"
+{
+    #include <libavcodec/avcodec.h>
+}
+
 #ifdef HAVE_LIBAVDEVICE
 extern "C"
 {
@@ -44,24 +49,21 @@ extern "C"
 
 using FormatContextPtr = QSharedPointer<AVFormatContext>;
 using AbstractStreamPtr = QSharedPointer<AbstractStream>;
-using AvMediaTypeStrMap = QMap<AVMediaType, QString>;
+using AvMediaTypeAkMap = QMap<AVMediaType, AkCaps::CapsType>;
 
-inline AvMediaTypeStrMap initAvMediaTypeStrMap()
+inline AvMediaTypeAkMap initAvMediaTypeAkMap()
 {
-    AvMediaTypeStrMap mediaTypeToStr = {
-        {AVMEDIA_TYPE_UNKNOWN   , "unknown/x-raw"   },
-        {AVMEDIA_TYPE_VIDEO     , "video/x-raw"     },
-        {AVMEDIA_TYPE_AUDIO     , "audio/x-raw"     },
-        {AVMEDIA_TYPE_DATA      , "data/x-raw"      },
-        {AVMEDIA_TYPE_SUBTITLE  , "text/x-raw"      },
-        {AVMEDIA_TYPE_ATTACHMENT, "attachment/x-raw"},
-        {AVMEDIA_TYPE_NB        , "nb/x-raw"        }
+    AvMediaTypeAkMap mediaTypeToAk = {
+        {AVMEDIA_TYPE_UNKNOWN , AkCaps::CapsUnknown },
+        {AVMEDIA_TYPE_VIDEO   , AkCaps::CapsVideo   },
+        {AVMEDIA_TYPE_AUDIO   , AkCaps::CapsAudio   },
+        {AVMEDIA_TYPE_SUBTITLE, AkCaps::CapsSubtitle},
     };
 
-    return mediaTypeToStr;
+    return mediaTypeToAk;
 }
 
-Q_GLOBAL_STATIC_WITH_ARGS(AvMediaTypeStrMap, mediaTypeToStr, (initAvMediaTypeStrMap()))
+Q_GLOBAL_STATIC_WITH_ARGS(AvMediaTypeAkMap, mediaTypeToAk, (initAvMediaTypeAkMap()))
 
 class MediaSourceFFmpegPrivate
 {
@@ -142,7 +144,7 @@ QList<int> MediaSourceFFmpeg::streams()
     return this->d->m_streams;
 }
 
-QList<int> MediaSourceFFmpeg::listTracks(const QString &mimeType)
+QList<int> MediaSourceFFmpeg::listTracks(AkCaps::CapsType type)
 {
     QList<int> tracks;
     bool clearContext = false;
@@ -155,10 +157,10 @@ QList<int> MediaSourceFFmpeg::listTracks
     }
 
     for (uint stream = 0; stream < this->d->m_inputContext->nb_streams; stream++) {
-        auto type = this->d->m_inputContext->streams[stream]->codecpar->codec_type;
+        auto ffType = this->d->m_inputContext->streams[stream]->codecpar->codec_type;
 
-        if (mimeType.isEmpty()
-            || mediaTypeToStr->value(type) == mimeType)
+        if (type == AkCaps::CapsUnknown
+            || mediaTypeToAk->value(ffType) == type)
             tracks << int(stream);
     }
 
@@ -210,7 +212,7 @@ bool MediaSourceFFmpeg::sync() const
     return this->d->m_sync;
 }
 
-int MediaSourceFFmpeg::defaultStream(const QString &mimeType)
+int MediaSourceFFmpeg::defaultStream(AkCaps::CapsType type)
 {
     int stream = -1;
     bool clearContext = false;
@@ -223,9 +225,9 @@ int MediaSourceFFmpeg::defaultStream(con
     }
 
     for (uint i = 0; i < this->d->m_inputContext->nb_streams; i++) {
-        auto type = this->d->m_inputContext->streams[i]->codecpar->codec_type;
+        auto ffType = this->d->m_inputContext->streams[i]->codecpar->codec_type;
 
-        if (mediaTypeToStr->value(type) == mimeType) {
+        if (mediaTypeToAk->value(ffType) == type) {
             stream = int(i);
 
             break;
@@ -317,7 +319,7 @@ AkElement::ElementState MediaSourceFFmpe
 }
 
 void MediaSourceFFmpeg::seek(qint64 mSecs,
-                             MultiSrcElement::SeekPosition position)
+                             SeekPosition position)
 {
     if (this->d->m_state == AkElement::ElementStateNull)
         return;
@@ -325,12 +327,12 @@ void MediaSourceFFmpeg::seek(qint64 mSec
     int64_t pts = mSecs;
 
     switch (position) {
-    case MultiSrcElement::SeekCur:
+    case SeekCur:
         pts += this->currentTimeMSecs();
 
         break;
 
-    case MultiSrcElement::SeekEnd:
+    case SeekEnd:
         pts += this->durationMSecs();
 
         break;
@@ -473,8 +475,8 @@ bool MediaSourceFFmpeg::setState(AkEleme
             QList<int> filterStreams;
 
             if (this->d->m_streams.isEmpty())
-                filterStreams << this->defaultStream("audio/x-raw")
-                              << this->defaultStream("video/x-raw");
+                filterStreams << this->defaultStream(AkCaps::CapsAudio)
+                              << this->defaultStream(AkCaps::CapsVideo);
             else
                 filterStreams = this->d->m_streams;
 
@@ -512,9 +514,10 @@ bool MediaSourceFFmpeg::setState(AkEleme
             this->d->m_run = true;
             this->d->m_paused = state == AkElement::ElementStatePaused;
             this->d->m_eos = false;
-            QtConcurrent::run(&this->d->m_threadPool,
-                              this->d,
-                              &MediaSourceFFmpegPrivate::readPackets);
+            auto result = QtConcurrent::run(&this->d->m_threadPool,
+                                            this->d,
+                                            &MediaSourceFFmpegPrivate::readPackets);
+            Q_UNUSED(result)
             this->d->m_state = state;
             emit this->stateChanged(state);
 
@@ -616,9 +619,10 @@ void MediaSourceFFmpeg::doLoop()
 
 void MediaSourceFFmpeg::packetConsumed()
 {
-    QtConcurrent::run(&this->d->m_threadPool,
-                      this->d,
-                      &MediaSourceFFmpegPrivate::unlockQueue);
+    auto result = QtConcurrent::run(&this->d->m_threadPool,
+                                    this->d,
+                                    &MediaSourceFFmpegPrivate::unlockQueue);
+    Q_UNUSED(result)
 }
 
 void MediaSourceFFmpeg::log()
@@ -686,9 +690,9 @@ bool MediaSourceFFmpeg::initContext()
         inputFormat = av_find_input_format("v4l2");
     } else if (QRegExp(R"(:\d+\.\d+(?:\+\d+,\d+)?)").exactMatch(uri)) {
         inputFormat = av_find_input_format("x11grab");
-
-        int width = this->d->roundDown(QApplication::desktop()->width(), 4);
-        int height = this->d->roundDown(QApplication::desktop()->height(), 4);
+        auto screen = QGuiApplication::primaryScreen();
+        int width = this->d->roundDown(screen->geometry().width(), 4);
+        int height = this->d->roundDown(screen->geometry().height(), 4);
 
         av_dict_set(&inputOptions,
                     "video_size",
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/mediasourceffmpeg.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/mediasourceffmpeg.h
@@ -32,40 +32,40 @@ class MediaSourceFFmpeg: public MediaSou
         MediaSourceFFmpeg(QObject *parent=nullptr);
         ~MediaSourceFFmpeg();
 
-        Q_INVOKABLE QStringList medias() const;
-        Q_INVOKABLE QString media() const;
-        Q_INVOKABLE QList<int> streams() const;
-        Q_INVOKABLE QList<int> listTracks(const QString &mimeType);
-        Q_INVOKABLE QString streamLanguage(int stream);
-        Q_INVOKABLE bool loop() const;
-        Q_INVOKABLE bool sync() const;
-        Q_INVOKABLE int defaultStream(const QString &mimeType);
-        Q_INVOKABLE QString description(const QString &media) const;
-        Q_INVOKABLE AkCaps caps(int stream);
-        Q_INVOKABLE qint64 durationMSecs();
-        Q_INVOKABLE qint64 currentTimeMSecs();
-        Q_INVOKABLE qint64 maxPacketQueueSize() const;
-        Q_INVOKABLE bool showLog() const;
-        Q_INVOKABLE AkElement::ElementState state() const;
+        Q_INVOKABLE QStringList medias() const override;
+        Q_INVOKABLE QString media() const override;
+        Q_INVOKABLE QList<int> streams() const override;
+        Q_INVOKABLE QList<int> listTracks(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString streamLanguage(int stream) override;
+        Q_INVOKABLE bool loop() const override;
+        Q_INVOKABLE bool sync() const override;
+        Q_INVOKABLE int defaultStream(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString description(const QString &media) const override;
+        Q_INVOKABLE AkCaps caps(int stream) override;
+        Q_INVOKABLE qint64 durationMSecs() override;
+        Q_INVOKABLE qint64 currentTimeMSecs() override;
+        Q_INVOKABLE qint64 maxPacketQueueSize() const override;
+        Q_INVOKABLE bool showLog() const override;
+        Q_INVOKABLE AkElement::ElementState state() const override;
 
     private:
         MediaSourceFFmpegPrivate *d;
 
     public slots:
-        void seek(qint64 mSecs, MultiSrcElement::SeekPosition position);
-        void setMedia(const QString &media);
-        void setStreams(const QList<int> &streams);
-        void setMaxPacketQueueSize(qint64 maxPacketQueueSize);
-        void setShowLog(bool showLog);
-        void setLoop(bool loop);
-        void setSync(bool sync);
-        void resetMedia();
-        void resetStreams();
-        void resetMaxPacketQueueSize();
-        void resetShowLog();
-        void resetLoop();
-        void resetSync();
-        bool setState(AkElement::ElementState state);
+        void seek(qint64 mSecs, MediaSource::SeekPosition position) override;
+        void setMedia(const QString &media) override;
+        void setStreams(const QList<int> &streams) override;
+        void setMaxPacketQueueSize(qint64 maxPacketQueueSize) override;
+        void setShowLog(bool showLog) override;
+        void setLoop(bool loop) override;
+        void setSync(bool sync) override;
+        void resetMedia() override;
+        void resetStreams() override;
+        void resetMaxPacketQueueSize() override;
+        void resetShowLog() override;
+        void resetLoop() override;
+        void resetSync() override;
+        bool setState(AkElement::ElementState state) override;
 
     private slots:
         void doLoop();
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/subtitlestream.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/subtitlestream.cpp
@@ -17,16 +17,13 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QVariant>
+#include <QColor>
+#include <QRect>
 #include <akcaps.h>
 #include <akfrac.h>
 #include <akpacket.h>
-
-extern "C"
-{
-    #include <libavcodec/avcodec.h>
-    #include <libavutil/imgutils.h>
-}
+#include <aksubtitlecaps.h>
+#include <aksubtitlepacket.h>
 
 #include "subtitlestream.h"
 
@@ -50,7 +47,7 @@ SubtitleStream::SubtitleStream(const AVF
 
 AkCaps SubtitleStream::caps() const
 {
-    return {"text/x-raw"};
+    return AkSubtitleCaps();
 }
 
 bool SubtitleStream::decodeData()
@@ -87,102 +84,54 @@ void SubtitleStream::processPacket(AVPac
     }
 
     // Some subtitles seams to have a problem when decoding.
-    AkCaps caps(this->caps());
-    caps.setProperty("type", "ass");
-
-    QByteArray oBuffer(packet->size, 0);
-    memcpy(oBuffer.data(), packet->data, size_t(packet->size));
-
-    AkPacket oPacket(caps);
-    oPacket.setBuffer(oBuffer);
-    oPacket.setPts(packet->pts);
-    oPacket.setTimeBase(this->timeBase());
-    oPacket.setIndex(int(this->index()));
-    oPacket.setId(this->id());
-
-    emit this->oStream(oPacket);
+    this->processData(subtitle);
     delete subtitle;
 }
 
 void SubtitleStream::processData(AVSubtitle *subtitle)
 {
     for (uint i = 0; i < subtitle->num_rects; i++) {
-        AkCaps caps(this->caps());
+        AkSubtitleCaps caps;
         QByteArray oBuffer;
 
         if (subtitle->rects[i]->type == SUBTITLE_BITMAP) {
-            AVPixelFormat pixFmt;
-            const char *format;
+            caps.setFormat(AkSubtitleCaps::SubtitleFormat_bitmap);
+            caps.setRect({subtitle->rects[i]->x,
+                          subtitle->rects[i]->y,
+                          subtitle->rects[i]->w,
+                          subtitle->rects[i]->h});
+            oBuffer.resize(subtitle->rects[i]->w
+                           * subtitle->rects[i]->h
+                           * sizeof(QRgb));
+            auto bitmapData = subtitle->rects[i]->data[0];
+            auto paletteData = subtitle->rects[i]->data[1];
+            size_t iLineSize = subtitle->rects[i]->linesize[0];
+            size_t oLineSize = sizeof(QRgb)
+                               * subtitle->rects[i]->w;
+
+            for (int y = 0; y < subtitle->rects[i]->h; y++) {
+                auto src_line = reinterpret_cast<const quint8 *>(bitmapData
+                                                                 + y * iLineSize);
+                auto dst_line = reinterpret_cast<QRgb *>(oBuffer.data()
+                                                         + y * oLineSize);
 
-            if (subtitle->rects[i]->nb_colors == 4) {
-                pixFmt = AV_PIX_FMT_ARGB;
-                format = av_get_pix_fmt_name(pixFmt);
-            } else
-                continue;
-
-            caps.setProperty("type", "bitmap");
-            caps.setProperty("x", subtitle->rects[i]->x);
-            caps.setProperty("y", subtitle->rects[i]->y);
-            caps.setProperty("width", subtitle->rects[i]->w);
-            caps.setProperty("height", subtitle->rects[i]->h);
-            caps.setProperty("format", format);
-
-            AVFrame frame;
-            memset(&frame, 0, sizeof(AVFrame));
-
-            if (av_image_check_size(uint(subtitle->rects[i]->w),
-                                    uint(subtitle->rects[i]->h),
-                                    0,
-                                    nullptr) < 0)
-                continue;
-
-            if (av_image_fill_linesizes(frame.linesize,
-                                        pixFmt,
-                                        subtitle->rects[i]->h) < 0)
-                continue;
-
-            uint8_t *data[4];
-            memset(data, 0, 4 * sizeof(uint8_t *));
-            int frameSize = av_image_fill_pointers(data,
-                                                   pixFmt,
-                                                   subtitle->rects[i]->h,
-                                                   nullptr,
-                                                   frame.linesize);
-
-
-            oBuffer.resize(frameSize);
-
-            if (av_image_fill_pointers(reinterpret_cast<uint8_t **>(frame.data),
-                                       pixFmt,
-                                       subtitle->rects[i]->h,
-                                       reinterpret_cast<uint8_t *>(oBuffer.data()),
-                                       frame.linesize) < 0) {
-                continue;
+                for (int x = 0; x < subtitle->rects[i]->w; x++)
+                    dst_line[x] = paletteData[src_line[x]];
             }
-
-            av_image_copy(frame.data,
-                          frame.linesize,
-                          const_cast<const uint8_t **>(subtitle->rects[i]->data),
-                          subtitle->rects[i]->linesize,
-                          pixFmt,
-                          subtitle->rects[i]->w,
-                          subtitle->rects[i]->h);
         } else if (subtitle->rects[i]->type == SUBTITLE_TEXT) {
-            caps.setProperty("type", "text");
+            caps.setFormat(AkSubtitleCaps::SubtitleFormat_text);
             int textLenght = sizeof(subtitle->rects[i]->text);
-
             oBuffer.resize(textLenght);
             memcpy(oBuffer.data(), subtitle->rects[i]->text, size_t(textLenght));
         } else if (subtitle->rects[i]->type == SUBTITLE_ASS) {
-            caps.setProperty("type", "ass");
+            caps.setFormat(AkSubtitleCaps::SubtitleFormat_ass);
             int assLenght = sizeof(subtitle->rects[i]->ass);
-
             oBuffer.resize(assLenght);
             memcpy(oBuffer.data(), subtitle->rects[i]->ass, size_t(assLenght));
         }
 
-        AkPacket oPacket(caps);
-        oPacket.setBuffer(oBuffer);
+        AkSubtitlePacket oPacket(caps, oBuffer.size());
+        memcpy(oPacket.data(), oBuffer.constData(), oBuffer.size());
         oPacket.setPts(subtitle->pts);
         oPacket.setTimeBase(this->timeBase());
         oPacket.setIndex(int(this->index()));
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/subtitlestream.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/subtitlestream.h
@@ -35,12 +35,12 @@ class SubtitleStream: public AbstractStr
                        bool noModify=false,
                        QObject *parent=nullptr);
 
-        Q_INVOKABLE AkCaps caps() const;
-        Q_INVOKABLE bool decodeData();
+        Q_INVOKABLE AkCaps caps() const override;
+        Q_INVOKABLE bool decodeData() override;
 
     protected:
-        void processPacket(AVPacket *packet);
-        void processData(AVSubtitle *subtitle);
+        void processPacket(AVPacket *packet) override;
+        void processData(AVSubtitle *subtitle) override;
 };
 
 #endif // SUBTITLESTREAM_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/videostream.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/videostream.cpp
@@ -211,15 +211,14 @@ AkFrac VideoStreamPrivate::fps() const
 
 AkPacket VideoStreamPrivate::convert(AVFrame *iFrame)
 {
-    AVPixelFormat outPixFormat = AV_PIX_FMT_RGB24;
-    auto width = VideoStreamPrivate::align(iFrame->width, 4);
+    static const AVPixelFormat outPixFormat = AV_PIX_FMT_RGB24;
 
     // Initialize rescaling context.
     this->m_scaleContext = sws_getCachedContext(this->m_scaleContext,
                                                   iFrame->width,
                                                   iFrame->height,
                                                   AVPixelFormat(iFrame->format),
-                                                  width,
+                                                  iFrame->width,
                                                   iFrame->height,
                                                   outPixFormat,
                                                   SWS_FAST_BILINEAR,
@@ -228,40 +227,19 @@ AkPacket VideoStreamPrivate::convert(AVF
                                                   nullptr);
 
     if (!this->m_scaleContext)
-        return AkPacket();
+        return {};
 
     // Create oPicture
     AVFrame oFrame;
     memset(&oFrame, 0, sizeof(AVFrame));
 
-    if (av_image_check_size(uint(width),
-                            uint(iFrame->height),
-                            0,
-                            nullptr) < 0)
-        return AkPacket();
-
-    if (av_image_fill_linesizes(oFrame.linesize,
-                                outPixFormat,
-                                width) < 0)
-        return AkPacket();
-
-    uint8_t *data[4];
-    memset(data, 0, 4 * sizeof(uint8_t *));
-    int frameSize = av_image_fill_pointers(data,
-                                           outPixFormat,
-                                           iFrame->height,
-                                           nullptr,
-                                           oFrame.linesize);
-
-    QByteArray oBuffer(frameSize, Qt::Uninitialized);
-
-    if (av_image_fill_pointers(reinterpret_cast<uint8_t **>(oFrame.data),
-                               outPixFormat,
-                               iFrame->height,
-                               reinterpret_cast<uint8_t *>(oBuffer.data()),
-                               oFrame.linesize) < 0) {
-        return AkPacket();
-    }
+    if (av_image_alloc(oFrame.data,
+                       oFrame.linesize,
+                       iFrame->width,
+                       iFrame->height,
+                       outPixFormat,
+                       1) < 1)
+        return {};
 
     // Convert picture format
     sws_scale(this->m_scaleContext,
@@ -273,17 +251,32 @@ AkPacket VideoStreamPrivate::convert(AVF
               oFrame.linesize);
 
     // Create packet
-
-    AkVideoPacket oPacket;
-    oPacket.caps() = {AkVideoCaps::Format_rgb24,
-                     width,
+    auto nPlanes = av_pix_fmt_count_planes(AVPixelFormat(iFrame->format));
+    AkVideoCaps caps(AkVideoCaps::Format_rgb24,
+                     iFrame->width,
                      iFrame->height,
-                     this->fps()};
-    oPacket.buffer() = oBuffer;
-    oPacket.pts() = iFrame->pts;
-    oPacket.timeBase() = self->timeBase();
-    oPacket.index() = int(self->index());
-    oPacket.id() = self->id();
+                     this->fps());
+    AkVideoPacket oPacket(caps);
+
+    for (int plane = 0; plane < nPlanes; ++plane) {
+        auto planeData = oFrame.data[plane];
+        auto oLineSize = oFrame.linesize[plane];
+        auto lineSize = qMin<size_t>(oPacket.lineSize(plane), oLineSize);
+        auto heightDiv = oPacket.heightDiv(plane);
+
+        for (int y = 0; y < iFrame->height; ++y) {
+            auto ys = y >> heightDiv;
+            memcpy(oPacket.line(plane, y),
+                   planeData + ys * oLineSize,
+                   lineSize);
+        }
+    }
+
+    oPacket.setId(self->id());
+    oPacket.setPts(iFrame->pts);
+    oPacket.setTimeBase(self->timeBase());
+    oPacket.setIndex(int(self->index()));
+    av_freep(&oFrame.data[0]);
 
     return oPacket;
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/videostream.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ffmpeg/src/videostream.h
@@ -38,12 +38,12 @@ class VideoStream: public AbstractStream
                     QObject *parent=nullptr);
         ~VideoStream();
 
-        Q_INVOKABLE AkCaps caps() const;
-        Q_INVOKABLE bool decodeData();
+        Q_INVOKABLE AkCaps caps() const override;
+        Q_INVOKABLE bool decodeData() override;
 
     protected:
-        void processPacket(AVPacket *packet);
-        void processData(AVFrame *frame);
+        void processPacket(AVPacket *packet) override;
+        void processData(AVFrame *frame) override;
 
     private:
         VideoStreamPrivate *d;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/gstreamer/src/mediasourcegstreamer.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/gstreamer/src/mediasourcegstreamer.cpp
@@ -26,12 +26,14 @@
 #include <gst/audio/audio.h>
 #include <gst/video/video.h>
 #include <ak.h>
+#include <akaudiocaps.h>
+#include <akaudiopacket.h>
 #include <akcaps.h>
 #include <akfrac.h>
 #include <akpacket.h>
-#include <akaudiocaps.h>
+#include <aksubtitlecaps.h>
+#include <aksubtitlepacket.h>
 #include <akvideocaps.h>
-#include <akaudiopacket.h>
 #include <akvideopacket.h>
 
 #include "mediasourcegstreamer.h"
@@ -39,6 +41,9 @@
 class Stream
 {
     public:
+        AkCaps caps;
+        QString language;
+
         Stream()
         {
         }
@@ -49,9 +54,6 @@ class Stream
             language(language)
         {
         }
-
-        AkCaps caps;
-        QString language;
 };
 
 class MediaSourceGStreamerPrivate
@@ -62,6 +64,7 @@ class MediaSourceGStreamerPrivate
         QThreadPool m_threadPool;
         GstElement *m_pipeline {nullptr};
         GMainLoop *m_mainLoop {nullptr};
+        QFuture<void> m_mainLoopResult;
         qint64 m_audioIndex {-1};
         qint64 m_videoIndex {-1};
         qint64 m_subtitlesIndex {-1};
@@ -88,7 +91,7 @@ class MediaSourceGStreamerPrivate
         static GstFlowReturn subtitlesBufferCallback(GstElement *subtitlesOutput,
                                                      gpointer userData);
         static void aboutToFinish(GstElement *object, gpointer userData);
-        QStringList languageCodes(const QString &type);
+        QStringList languageCodes(AkCaps::CapsType type);
         QStringList languageCodes();
 };
 
@@ -153,7 +156,7 @@ QList<int> MediaSourceGStreamer::streams
     return this->d->m_streams;
 }
 
-QList<int> MediaSourceGStreamer::listTracks(const QString &mimeType)
+QList<int> MediaSourceGStreamer::listTracks(AkCaps::CapsType type)
 {
     bool isRunning = this->d->m_run;
 
@@ -164,7 +167,7 @@ QList<int> MediaSourceGStreamer::listTra
     int i = 0;
 
     for (auto &streamInfo: this->d->m_streamInfo) {
-        if (mimeType.isEmpty() || streamInfo.caps.mimeType() == mimeType)
+        if (type == AkCaps::CapsUnknown || streamInfo.caps.type() == type)
             tracks << i;
 
         i++;
@@ -201,7 +204,7 @@ bool MediaSourceGStreamer::sync() const
     return this->d->m_sync;
 }
 
-int MediaSourceGStreamer::defaultStream(const QString &mimeType)
+int MediaSourceGStreamer::defaultStream(AkCaps::CapsType type)
 {
     bool isRunning = this->d->m_run;
 
@@ -212,7 +215,7 @@ int MediaSourceGStreamer::defaultStream(
     int i = 0;
 
     for (auto &streamInfo: this->d->m_streamInfo) {
-        if (streamInfo.caps.mimeType() == mimeType) {
+        if (streamInfo.caps.type() == type) {
             defaultStream = i;
 
             break;
@@ -293,7 +296,7 @@ AkElement::ElementState MediaSourceGStre
 }
 
 void MediaSourceGStreamer::seek(qint64 mSecs,
-                                MultiSrcElement::SeekPosition position)
+                                SeekPosition position)
 {
     if (this->d->m_state == AkElement::ElementStateNull)
         return;
@@ -301,12 +304,12 @@ void MediaSourceGStreamer::seek(qint64 m
     int64_t pts = mSecs;
 
     switch (position) {
-    case MultiSrcElement::SeekCur:
+    case SeekCur:
         pts += this->currentTimeMSecs();
 
         break;
 
-    case MultiSrcElement::SeekEnd:
+    case SeekEnd:
         pts += this->durationMSecs();
 
         break;
@@ -533,9 +536,10 @@ bool MediaSourceGStreamer::setState(AkEl
 
             // Run the main GStreamer loop.
             this->d->m_mainLoop = g_main_loop_new(nullptr, FALSE);
-            QtConcurrent::run(&this->d->m_threadPool,
-                              g_main_loop_run,
-                              this->d->m_mainLoop);
+            this->d->m_mainLoopResult =
+                    QtConcurrent::run(&this->d->m_threadPool,
+                                      g_main_loop_run,
+                                      this->d->m_mainLoop);
             GstState gstState = state == AkElement::ElementStatePaused?
                                  GST_STATE_PAUSED: GST_STATE_PLAYING;
             gst_element_set_state(this->d->m_pipeline, gstState);
@@ -596,9 +600,10 @@ bool MediaSourceGStreamer::setState(AkEl
 
                         AkAudioCaps audioCaps(AkAudioCaps::SampleFormat_s32,
                                               AkAudioCaps::Layout_stereo,
+                                              false,
                                               audioInfo->rate);
                         this->d->m_streamInfo << Stream(audioCaps,
-                                                        languages[stream]);
+                                                        languages.value(stream));
 
                         gst_audio_info_free(audioInfo);
                     }
@@ -636,7 +641,7 @@ bool MediaSourceGStreamer::setState(AkEl
                                                   AkFrac(videoInfo->fps_n,
                                                          videoInfo->fps_d));
                             this->d->m_streamInfo << Stream(videoCaps,
-                                                            languages[stream]);
+                                                            languages.value(stream));
 
                             gst_video_info_free(videoInfo);
                         }
@@ -665,14 +670,9 @@ bool MediaSourceGStreamer::setState(AkEl
                                           &pad);
 
                     if (pad) {
-                        GstCaps *caps = gst_pad_get_current_caps(pad);
-                        GstStructure *capsStructure = gst_caps_get_structure(caps, 0);
-                        const gchar *format = gst_structure_get_string(capsStructure, "format");
-
-                        AkCaps subtitlesCaps("text/x-raw");
-                        subtitlesCaps.setProperty("type", format);
+                        AkSubtitleCaps subtitlesCaps(AkSubtitleCaps::SubtitleFormat_text);
                         this->d->m_streamInfo << Stream(subtitlesCaps,
-                                                        languages[stream]);
+                                                        languages.value(stream));
                     }
 
                     g_object_set(G_OBJECT(this->d->m_pipeline),
@@ -1024,34 +1024,31 @@ GstFlowReturn MediaSourceGStreamerPrivat
     if (!sample)
         return GST_FLOW_OK;
 
-    GstCaps *caps = gst_sample_get_caps(sample);
-    GstAudioInfo *audioInfo = gst_audio_info_new();
+    auto caps = gst_sample_get_caps(sample);
+    auto audioInfo = gst_audio_info_new();
     gst_audio_info_from_caps(audioInfo, caps);
 
-    AkAudioCaps audioCaps(AkAudioCaps::SampleFormat_s32,
-                          AkAudioCaps::Layout_stereo,
-                          audioInfo->rate);
-    AkAudioPacket packet;
-    packet.caps() = audioCaps;
-
-    GstBuffer *buf = gst_sample_get_buffer(sample);
+    auto buf = gst_sample_get_buffer(sample);
     GstMapInfo map;
     gst_buffer_map(buf, &map, GST_MAP_READ);
+    gint samples = gint(map.size) / audioInfo->bpf;
 
-    QByteArray oBuffer(int(map.size), 0);
-    memcpy(oBuffer.data(), map.data, map.size);
-
-    packet.caps().setSamples(gint(map.size) / audioInfo->bpf);
-    gst_audio_info_free(audioInfo);
-
-    packet.buffer() = oBuffer;
-    packet.pts() = qint64(GST_BUFFER_PTS(buf));
-    packet.timeBase() = AkFrac(1, GST_SECOND);
-    packet.index() = int(self->d->m_audioIndex);
-    packet.id() = self->d->m_audioId;
+    AkAudioCaps audioCaps(AkAudioCaps::SampleFormat_s32,
+                          AkAudioCaps::Layout_stereo,
+                          false,
+                          audioInfo->rate);
+    AkAudioPacket packet(audioCaps, samples);
+    memcpy(packet.data(),
+           map.data,
+           qMin<size_t>(packet.size(), map.size));
+    packet.setPts(qint64(GST_BUFFER_PTS(buf)));
+    packet.setTimeBase({1, GST_SECOND});
+    packet.setIndex(int(self->d->m_audioIndex));
+    packet.setId(self->d->m_audioId);
 
     gst_buffer_unmap(buf, &map);
     gst_sample_unref(sample);
+    gst_audio_info_free(audioInfo);
 
     emit self->oStream(packet);
 
@@ -1072,31 +1069,42 @@ GstFlowReturn MediaSourceGStreamerPrivat
     if (!sample)
         return GST_FLOW_OK;
 
-    GstCaps *caps = gst_sample_get_caps(sample);
-    GstVideoInfo *videoInfo = gst_video_info_new();
+    auto caps = gst_sample_get_caps(sample);
+    auto videoInfo = gst_video_info_new();
     gst_video_info_from_caps(videoInfo, caps);
 
-    gst_video_info_free(videoInfo);
-
-    GstBuffer *buf = gst_sample_get_buffer(sample);
+    // Create a package and return it.
+    AkVideoCaps videoCaps(AkVideoCaps::Format_rgb24,
+                          videoInfo->width,
+                          videoInfo->height,
+                          AkFrac(videoInfo->fps_n, videoInfo->fps_d));
+    AkVideoPacket packet(videoCaps);
+    auto buf = gst_sample_get_buffer(sample);
     GstMapInfo map;
     gst_buffer_map(buf, &map, GST_MAP_READ);
-    QByteArray oBuffer(int(map.size), Qt::Uninitialized);
-    memcpy(oBuffer.data(), map.data, map.size);
 
-    AkVideoPacket packet;
-    packet.caps() = {AkVideoCaps::Format_rgb24,
-                     videoInfo->width,
-                     videoInfo->height,
-                     AkFrac(videoInfo->fps_n, videoInfo->fps_d)};
-    packet.buffer() = oBuffer;
-    packet.pts() = qint64(GST_BUFFER_PTS(buf));
-    packet.timeBase() = AkFrac(1, GST_SECOND);
-    packet.index() = int(self->d->m_videoIndex);
-    packet.id() = self->d->m_videoId;
+    for (int plane = 0; plane < GST_VIDEO_INFO_N_PLANES(videoInfo); ++plane) {
+        auto planeData = map.data + GST_VIDEO_INFO_PLANE_OFFSET(videoInfo, plane);
+        auto oLineSize = GST_VIDEO_INFO_PLANE_STRIDE(videoInfo, plane);
+        auto lineSize = qMin<size_t>(packet.lineSize(plane), oLineSize);
+        auto heightDiv = packet.heightDiv(plane);
+
+        for (int y = 0; y < videoInfo->height; ++y) {
+            auto ys = y >> heightDiv;
+            memcpy(packet.line(plane, y),
+                   planeData + ys * oLineSize,
+                   lineSize);
+        }
+    }
+
+    packet.setPts(qint64(GST_BUFFER_PTS(buf)));
+    packet.setTimeBase({1, GST_SECOND});
+    packet.setIndex(int(self->d->m_videoIndex));
+    packet.setId(self->d->m_videoId);
 
     gst_buffer_unmap(buf, &map);
     gst_sample_unref(sample);
+    gst_video_info_free(videoInfo);
 
     emit self->oStream(packet);
 
@@ -1117,26 +1125,17 @@ GstFlowReturn MediaSourceGStreamerPrivat
     if (!sample)
         return GST_FLOW_OK;
 
-    GstCaps *caps = gst_sample_get_caps(sample);
-    GstStructure *capsStructure = gst_caps_get_structure(caps, 0);
-    const gchar *format = gst_structure_get_string(capsStructure, "format");
-
-    AkPacket packet;
-    packet.caps().setMimeType("text/x-raw");
-    packet.caps().setProperty("type", format);
-
     GstBuffer *buf = gst_sample_get_buffer(sample);
     GstMapInfo map;
     gst_buffer_map(buf, &map, GST_MAP_READ);
 
-    QByteArray oBuffer(int(map.size), 0);
-    memcpy(oBuffer.data(), map.data, map.size);
-
-    packet.buffer() = oBuffer;
-    packet.pts() = qint64(GST_BUFFER_PTS(buf));
-    packet.timeBase() = AkFrac(1, GST_SECOND);
-    packet.index() = int(self->d->m_subtitlesIndex);
-    packet.id() = self->d->m_subtitlesId;
+    AkSubtitleCaps oCaps(AkSubtitleCaps::SubtitleFormat_text);
+    AkSubtitlePacket packet(oCaps, map.size);
+    memcpy(packet.data(), map.data, map.size);
+    packet.setPts(qint64(GST_BUFFER_PTS(buf)));
+    packet.setTimeBase({1, GST_SECOND});
+    packet.setIndex(int(self->d->m_subtitlesIndex));
+    packet.setId(self->d->m_subtitlesId);
 
     gst_buffer_unmap(buf, &map);
     gst_sample_unref(sample);
@@ -1169,7 +1168,7 @@ void MediaSourceGStreamerPrivate::aboutT
 
 }
 
-QStringList MediaSourceGStreamerPrivate::languageCodes(const QString &type)
+QStringList MediaSourceGStreamerPrivate::languageCodes(AkCaps::CapsType type)
 {
     QStringList languages;
 
@@ -1209,9 +1208,9 @@ QStringList MediaSourceGStreamerPrivate:
 QStringList MediaSourceGStreamerPrivate::languageCodes()
 {
     QStringList languages;
-    languages << languageCodes("audio");
-    languages << languageCodes("video");
-    languages << languageCodes("text");
+    languages << languageCodes(AkCaps::CapsAudio);
+    languages << languageCodes(AkCaps::CapsVideo);
+    languages << languageCodes(AkCaps::CapsSubtitle);
 
     return languages;
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/gstreamer/src/mediasourcegstreamer.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/gstreamer/src/mediasourcegstreamer.h
@@ -32,40 +32,40 @@ class MediaSourceGStreamer: public Media
         MediaSourceGStreamer(QObject *parent=nullptr);
         ~MediaSourceGStreamer();
 
-        Q_INVOKABLE QStringList medias() const;
-        Q_INVOKABLE QString media() const;
-        Q_INVOKABLE QList<int> streams() const;
-        Q_INVOKABLE QList<int> listTracks(const QString &mimeType);
-        Q_INVOKABLE QString streamLanguage(int stream);
-        Q_INVOKABLE bool loop() const;
-        Q_INVOKABLE bool sync() const;
-        Q_INVOKABLE int defaultStream(const QString &mimeType);
-        Q_INVOKABLE QString description(const QString &media) const;
-        Q_INVOKABLE AkCaps caps(int stream);
-        Q_INVOKABLE qint64 durationMSecs();
-        Q_INVOKABLE qint64 currentTimeMSecs();
-        Q_INVOKABLE qint64 maxPacketQueueSize() const;
-        Q_INVOKABLE bool showLog() const;
-        Q_INVOKABLE AkElement::ElementState state() const;
+        Q_INVOKABLE QStringList medias() const override;
+        Q_INVOKABLE QString media() const override;
+        Q_INVOKABLE QList<int> streams() const override;
+        Q_INVOKABLE QList<int> listTracks(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString streamLanguage(int stream) override;
+        Q_INVOKABLE bool loop() const override;
+        Q_INVOKABLE bool sync() const override;
+        Q_INVOKABLE int defaultStream(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString description(const QString &media) const override;
+        Q_INVOKABLE AkCaps caps(int stream) override;
+        Q_INVOKABLE qint64 durationMSecs() override;
+        Q_INVOKABLE qint64 currentTimeMSecs() override;
+        Q_INVOKABLE qint64 maxPacketQueueSize() const override;
+        Q_INVOKABLE bool showLog() const override;
+        Q_INVOKABLE AkElement::ElementState state() const override;
 
     private:
         MediaSourceGStreamerPrivate *d;
 
     public slots:
-        void seek(qint64 mSecs, MultiSrcElement::SeekPosition position);
-        void setMedia(const QString &media);
-        void setStreams(const QList<int> &streams);
-        void setMaxPacketQueueSize(qint64 maxPacketQueueSize);
-        void setShowLog(bool showLog);
-        void setLoop(bool loop);
-        void setSync(bool sync);
-        void resetMedia();
-        void resetStreams();
-        void resetMaxPacketQueueSize();
-        void resetShowLog();
-        void resetLoop();
-        void resetSync();
-        bool setState(AkElement::ElementState state);
+        void seek(qint64 mSecs, SeekPosition position) override;
+        void setMedia(const QString &media) override;
+        void setStreams(const QList<int> &streams) override;
+        void setMaxPacketQueueSize(qint64 maxPacketQueueSize) override;
+        void setShowLog(bool showLog) override;
+        void setLoop(bool loop) override;
+        void setSync(bool sync) override;
+        void resetMedia() override;
+        void resetStreams() override;
+        void resetMaxPacketQueueSize() override;
+        void resetShowLog() override;
+        void resetLoop() override;
+        void resetSync() override;
+        bool setState(AkElement::ElementState state) override;
 
     private slots:
         void updateStreams();
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/mediasource.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/mediasource.cpp
@@ -17,8 +17,6 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <akcaps.h>
-
 #include "mediasource.h"
 
 MediaSource::MediaSource(QObject *parent):
@@ -41,9 +39,9 @@ QList<int> MediaSource::streams() const
     return QList<int>();
 }
 
-QList<int> MediaSource::listTracks(const QString &mimeType)
+QList<int> MediaSource::listTracks(AkCaps::CapsType type)
 {
-    Q_UNUSED(mimeType)
+    Q_UNUSED(type)
 
     return QList<int>();
 }
@@ -65,9 +63,9 @@ bool MediaSource::sync() const
     return true;
 }
 
-int MediaSource::defaultStream(const QString &mimeType)
+int MediaSource::defaultStream(AkCaps::CapsType type)
 {
-    Q_UNUSED(mimeType)
+    Q_UNUSED(type)
 
     return -1;
 }
@@ -111,7 +109,7 @@ AkElement::ElementState MediaSource::sta
     return AkElement::ElementStateNull;
 }
 
-void MediaSource::seek(qint64 seekTo, MultiSrcElement::SeekPosition position)
+void MediaSource::seek(qint64 seekTo, SeekPosition position)
 {
     Q_UNUSED(seekTo)
     Q_UNUSED(position)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/mediasource.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/mediasource.h
@@ -21,71 +21,74 @@
 #define MEDIASOURCE_H
 
 #include <akelement.h>
-
-#include "multisrcelement.h"
-
-class AkCaps;
+#include <akcaps.h>
 
 class MediaSource: public QObject
 {
     Q_OBJECT
-        Q_PROPERTY(QStringList medias
-                   READ medias
-                   NOTIFY mediasChanged)
-        Q_PROPERTY(QString media
-                   READ media
-                   WRITE setMedia
-                   RESET resetMedia
-                   NOTIFY mediaChanged)
-        Q_PROPERTY(QList<int> streams
-                   READ streams
-                   WRITE setStreams
-                   RESET resetStreams
-                   NOTIFY streamsChanged)
-        Q_PROPERTY(bool loop
-                   READ loop
-                   WRITE setLoop
-                   RESET resetLoop
-                   NOTIFY loopChanged)
-        Q_PROPERTY(bool sync
-                   READ sync
-                   WRITE setSync
-                   RESET resetSync
-                   NOTIFY syncChanged)
-        Q_PROPERTY(qint64 durationMSecs
-                   READ durationMSecs
-                   NOTIFY durationMSecsChanged)
-        Q_PROPERTY(qint64 currentTimeMSecs
-                   READ currentTimeMSecs
-                   NOTIFY currentTimeMSecsChanged)
-        Q_PROPERTY(qint64 maxPacketQueueSize
-                   READ maxPacketQueueSize
-                   WRITE setMaxPacketQueueSize
-                   RESET resetMaxPacketQueueSize
-                   NOTIFY maxPacketQueueSizeChanged)
-        Q_PROPERTY(bool showLog
-                   READ showLog
-                   WRITE setShowLog
-                   RESET resetShowLog
-                   NOTIFY showLogChanged)
-        Q_PROPERTY(AkElement::ElementState state
-                   READ state
-                   WRITE setState
-                   RESET resetState
-                   NOTIFY stateChanged)
+    Q_PROPERTY(QStringList medias
+               READ medias
+               NOTIFY mediasChanged)
+    Q_PROPERTY(QString media
+               READ media
+               WRITE setMedia
+               RESET resetMedia
+               NOTIFY mediaChanged)
+    Q_PROPERTY(QList<int> streams
+               READ streams
+               WRITE setStreams
+               RESET resetStreams
+               NOTIFY streamsChanged)
+    Q_PROPERTY(bool loop
+               READ loop
+               WRITE setLoop
+               RESET resetLoop
+               NOTIFY loopChanged)
+    Q_PROPERTY(bool sync
+               READ sync
+               WRITE setSync
+               RESET resetSync
+               NOTIFY syncChanged)
+    Q_PROPERTY(qint64 durationMSecs
+               READ durationMSecs
+               NOTIFY durationMSecsChanged)
+    Q_PROPERTY(qint64 currentTimeMSecs
+               READ currentTimeMSecs
+               NOTIFY currentTimeMSecsChanged)
+    Q_PROPERTY(qint64 maxPacketQueueSize
+               READ maxPacketQueueSize
+               WRITE setMaxPacketQueueSize
+               RESET resetMaxPacketQueueSize
+               NOTIFY maxPacketQueueSizeChanged)
+    Q_PROPERTY(bool showLog
+               READ showLog
+               WRITE setShowLog
+               RESET resetShowLog
+               NOTIFY showLogChanged)
+    Q_PROPERTY(AkElement::ElementState state
+               READ state
+               WRITE setState
+               RESET resetState
+               NOTIFY stateChanged)
 
     public:
+        enum SeekPosition {
+            SeekSet,
+            SeekCur,
+            SeekEnd,
+        };
+
         MediaSource(QObject *parent=nullptr);
         virtual ~MediaSource() = default;
 
         Q_INVOKABLE virtual QStringList medias() const;
         Q_INVOKABLE virtual QString media() const;
         Q_INVOKABLE virtual QList<int> streams() const;
-        Q_INVOKABLE virtual QList<int> listTracks(const QString &mimeType);
+        Q_INVOKABLE virtual QList<int> listTracks(AkCaps::CapsType type);
         Q_INVOKABLE virtual QString streamLanguage(int stream);
         Q_INVOKABLE virtual bool loop() const;
         Q_INVOKABLE virtual bool sync() const;
-        Q_INVOKABLE virtual int defaultStream(const QString &mimeType);
+        Q_INVOKABLE virtual int defaultStream(AkCaps::CapsType type);
         Q_INVOKABLE virtual QString description(const QString &media) const;
         Q_INVOKABLE virtual AkCaps caps(int stream);
         Q_INVOKABLE virtual qint64 durationMSecs();
@@ -110,8 +113,7 @@ class MediaSource: public QObject
         void streamsChanged(const QList<int> &streams);
 
     public slots:
-        virtual void seek(qint64 seekTo,
-                          MultiSrcElement::SeekPosition position);
+        virtual void seek(qint64 seekTo, MediaSource::SeekPosition position);
         virtual void setMedia(const QString &media);
         virtual void setStreams(const QList<int> &streams);
         virtual void setMaxPacketQueueSize(qint64 maxPacketQueueSize);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/multisrc.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/multisrc.h
@@ -29,8 +29,8 @@ class MultiSrc: public QObject, public A
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "../pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // MULTISRC_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/multisrcelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/multisrcelement.cpp
@@ -21,7 +21,6 @@
 #include <QMutex>
 #include <QQmlContext>
 #include <QReadWriteLock>
-#include <akcaps.h>
 #include <akplugininfo.h>
 #include <akpluginmanager.h>
 
@@ -181,7 +180,7 @@ bool MultiSrcElement::sync() const
     return sync;
 }
 
-QList<int> MultiSrcElement::listTracks(const QString &type)
+QList<int> MultiSrcElement::listTracks(AkCaps::CapsType type)
 {
     this->d->m_mutex.lockForRead();
     QList<int> tracks;
@@ -207,13 +206,13 @@ QString MultiSrcElement::streamLanguage(
     return language;
 }
 
-int MultiSrcElement::defaultStream(const QString &mimeType)
+int MultiSrcElement::defaultStream(AkCaps::CapsType type)
 {
     this->d->m_mutex.lockForRead();
     int stream = 0;
 
     if (this->d->m_mediaSource)
-        stream = this->d->m_mediaSource->defaultStream(mimeType);
+        stream = this->d->m_mediaSource->defaultStream(type);
 
     this->d->m_mutex.unlock();
 
@@ -332,7 +331,7 @@ void MultiSrcElement::seek(qint64 seekTo
     this->d->m_mutex.lockForRead();
 
     if (this->d->m_mediaSource)
-        this->d->m_mediaSource->seek(seekTo, position);
+        this->d->m_mediaSource->seek(seekTo, MediaSource::SeekPosition(position));
 
     this->d->m_mutex.unlock();
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/multisrcelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/multisrcelement.h
@@ -20,6 +20,7 @@
 #ifndef MULTISRCELEMENT_H
 #define MULTISRCELEMENT_H
 
+#include "akcaps.h"
 #include <akmultimediasourceelement.h>
 
 class MultiSrcElementPrivate;
@@ -69,38 +70,38 @@ class MultiSrcElement: public AkMultimed
 
     public:
         enum SeekPosition {
-            SeekSet = 0x0,
-            SeekCur = 0x1,
-            SeekEnd = 0x2,
+            SeekSet,
+            SeekCur,
+            SeekEnd,
         };
-        Q_ENUMS(SeekPosition)
+        Q_ENUM(SeekPosition)
 
         MultiSrcElement();
         ~MultiSrcElement();
 
-        Q_INVOKABLE QStringList medias();
-        Q_INVOKABLE QString media() const;
-        Q_INVOKABLE QList<int> streams();
-        Q_INVOKABLE bool loop() const;
+        Q_INVOKABLE QStringList medias() override;
+        Q_INVOKABLE QString media() const override;
+        Q_INVOKABLE QList<int> streams() override;
+        Q_INVOKABLE bool loop() const override;
         Q_INVOKABLE bool sync() const;
-        Q_INVOKABLE QList<int> listTracks(const QString &type="");
+        Q_INVOKABLE QList<int> listTracks(AkCaps::CapsType type=AkCaps::CapsUnknown);
         Q_INVOKABLE QString streamLanguage(int stream);
-        Q_INVOKABLE int defaultStream(const QString &mimeType);
-        Q_INVOKABLE QString description(const QString &media);
-        Q_INVOKABLE AkCaps caps(int stream);
+        Q_INVOKABLE int defaultStream(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString description(const QString &media) override;
+        Q_INVOKABLE AkCaps caps(int stream) override;
         Q_INVOKABLE qint64 durationMSecs();
         Q_INVOKABLE qint64 currentTimeMSecs();
         Q_INVOKABLE qint64 maxPacketQueueSize() const;
         Q_INVOKABLE bool showLog() const;
-        Q_INVOKABLE ElementState state() const;
+        Q_INVOKABLE AkElement::ElementState state() const override;
 
     private:
         MultiSrcElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
+                                       const QString &controlId) const override;
 
     signals:
         void mediasChanged(const QStringList &medias);
@@ -116,20 +117,20 @@ class MultiSrcElement: public AkMultimed
         void showLogChanged(bool showLog);
 
     public slots:
-        void seek(qint64 seekTo, SeekPosition position=SeekSet);
-        void setMedia(const QString &media);
-        void setStreams(const QList<int> &streams);
-        void setLoop(bool loop);
+        void seek(qint64 seekTo, MultiSrcElement::SeekPosition position=SeekSet);
+        void setMedia(const QString &media) override;
+        void setStreams(const QList<int> &streams) override;
+        void setLoop(bool loop) override;
         void setSync(bool sync);
         void setMaxPacketQueueSize(qint64 maxPacketQueueSize);
         void setShowLog(bool showLog);
-        void resetMedia();
-        void resetStreams();
-        void resetLoop();
+        void resetMedia() override;
+        void resetStreams() override;
+        void resetLoop() override;
         void resetSync();
         void resetMaxPacketQueueSize();
         void resetShowLog();
-        bool setState(AkElement::ElementState state);
+        bool setState(AkElement::ElementState state) override;
 };
 
 Q_DECLARE_METATYPE(MultiSrcElement::SeekPosition)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ndkmedia/src/abstractstream.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ndkmedia/src/abstractstream.cpp
@@ -26,7 +26,6 @@
 #include <QThreadPool>
 #include <QWaitCondition>
 #include <akfrac.h>
-#include <akcaps.h>
 #include <akpacket.h>
 #include <media/NdkMediaExtractor.h>
 
@@ -59,7 +58,7 @@ class AbstractStreamPrivate
         QQueue<AkPacket> m_frames;
         Clock *m_globalClock {nullptr};
         QFuture<void> m_dataLoopResult;
-        QString m_mimeType;
+        AkCaps::CapsType m_type {AkCaps::CapsUnknown};
         qint64 m_id {-1};
         uint m_index {0};
         AkElement::ElementState m_state {AkElement::ElementStateNull};
@@ -102,14 +101,14 @@ AbstractStream::AbstractStream(AMediaExt
         return;
 
     if (QString(mime).startsWith("audio/")) {
-        this->d->m_mimeType = "audio/x-raw";
+        this->d->m_type = AkCaps::CapsAudio;
         int32_t rate = 0;
         AMediaFormat_getInt32(this->d->m_mediaFormat,
                               AMEDIAFORMAT_KEY_SAMPLE_RATE,
                               &rate);
         this->d->m_timeBase = AkFrac(1, rate);
     } else if (QString(mime).startsWith("video/")) {
-        this->d->m_mimeType = "video/x-raw";
+        this->d->m_type = AkCaps::CapsVideo;
         int32_t frameRate;
         AMediaFormat_getInt32(this->d->m_mediaFormat,
                               AMEDIAFORMAT_KEY_FRAME_RATE,
@@ -158,9 +157,9 @@ AkFrac AbstractStream::timeBase() const
     return this->d->m_timeBase;
 }
 
-QString AbstractStream::mimeType() const
+AkCaps::CapsType AbstractStream::type() const
 {
-    return this->d->m_mimeType;
+    return this->d->m_type;
 }
 
 AMediaCodec *AbstractStream::codec() const
@@ -265,8 +264,8 @@ bool AbstractStream::decodeData()
     return false;
 }
 
-QString AbstractStream::mimeType(AMediaExtractor *mediaExtractor,
-                                 uint index)
+AkCaps::CapsType AbstractStream::type(AMediaExtractor *mediaExtractor,
+                                      uint index)
 {
     auto format = AMediaExtractor_getTrackFormat(mediaExtractor, index);
 
@@ -275,14 +274,14 @@ QString AbstractStream::mimeType(AMediaE
 
     const char *mime = nullptr;
     AMediaFormat_getString(format, AMEDIAFORMAT_KEY_MIME, &mime);
-    auto mimeType = QString(mime).startsWith("audio/")?
-                        "audio/x-raw":
-                    QString(mime).startsWith("video/")?
-                        "video/x-raw":
-                        QString();
+    auto type = QString(mime).startsWith("audio/")?
+                    AkCaps::CapsAudio:
+                QString(mime).startsWith("video/")?
+                    AkCaps::CapsVideo:
+                    AkCaps::CapsUnknown;
     AMediaFormat_delete(format);
 
-    return mimeType;
+    return type;
 }
 
 AkElement::ElementState AbstractStream::state() const
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ndkmedia/src/abstractstream.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ndkmedia/src/abstractstream.h
@@ -20,12 +20,12 @@
 #ifndef ABSTRACTSTREAM_H
 #define ABSTRACTSTREAM_H
 
+#include <akcaps.h>
 #include <akelement.h>
 
 class AbstractStream;
 class AbstractStreamPrivate;
 class AkFrac;
-class AkCaps;
 class AkPacket;
 class Clock;
 struct AMediaExtractor;
@@ -50,7 +50,7 @@ class AbstractStream: public QObject
         Q_INVOKABLE uint index() const;
         Q_INVOKABLE qint64 id() const;
         Q_INVOKABLE AkFrac timeBase() const;
-        Q_INVOKABLE QString mimeType() const;
+        Q_INVOKABLE AkCaps::CapsType type() const;
         Q_INVOKABLE AMediaCodec *codec() const;
         Q_INVOKABLE AMediaFormat *mediaFormat() const;
         Q_INVOKABLE virtual AkCaps caps() const;
@@ -61,8 +61,8 @@ class AbstractStream: public QObject
         Q_INVOKABLE bool packetEnqueue(bool eos=false);
         Q_INVOKABLE void dataEnqueue(const AkPacket &packet);
         Q_INVOKABLE virtual bool decodeData();
-        Q_INVOKABLE static QString mimeType(AMediaExtractor *mediaExtractor,
-                                            uint index);
+        Q_INVOKABLE static AkCaps::CapsType type(AMediaExtractor *mediaExtractor,
+                                                 uint index);
         Q_INVOKABLE AkElement::ElementState state() const;
 
     protected:
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ndkmedia/src/audiostream.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ndkmedia/src/audiostream.cpp
@@ -151,7 +151,7 @@ AkCaps AudioStream::caps() const
                           AMEDIAFORMAT_KEY_SAMPLE_RATE,
                           &rate);
 
-    return AkAudioCaps(sampleFormat, layout, rate);
+    return AkAudioCaps(sampleFormat, layout, false, rate);
 }
 
 bool AudioStream::decodeData()
@@ -262,23 +262,20 @@ AkPacket AudioStreamPrivate::readPacket(
     auto buffer = AMediaCodec_getOutputBuffer(self->codec(),
                                              size_t(bufferIndex),
                                              &bufferSize);
-    bufferSize = qMin(bufferSize, size_t(info.size));
-    QByteArray oBuffer(int(bufferSize), Qt::Uninitialized);
-    memcpy(oBuffer.data(), buffer + info.offset, bufferSize);
-
-    AkAudioPacket packet;
-    packet.caps() = {sampleFormat,
-                     layout,
-                     rate,
-                     8
-                     * int(bufferSize)
-                     / (AkAudioCaps::channelCount(layout)
-                        * AkAudioCaps::bitsPerSample(sampleFormat))};
-    packet.buffer() = oBuffer;
-    packet.pts() = info.presentationTimeUs;
-    packet.timeBase() = AkFrac(1, 1e6);
-    packet.index() = int(self->index());
-    packet.id() = self->id();
+    int samples = 8
+                  * int(bufferSize)
+                  / (AkAudioCaps::channelCount(layout)
+                     * AkAudioCaps::bitsPerSample(sampleFormat));
+    AkAudioPacket packet({sampleFormat,
+                          layout,
+                          false,
+                          rate}, samples);
+    bufferSize = qMin<size_t>(qMin<size_t>(packet.size(), bufferSize), info.size);
+    memcpy(packet.data(), buffer + info.offset, bufferSize);
+    packet.setPts(info.presentationTimeUs);
+    packet.setTimeBase(AkFrac(1, 1e6));
+    packet.setIndex(self->index());
+    packet.setId(self->id());
 
     return packet;
 }
@@ -315,12 +312,12 @@ AkAudioPacket AudioStreamPrivate::conver
 
             // since we do not have a precise anough audio fifo fullness,
             // we correct audio sync only if larger than this threshold
-            qreal diffThreshold = 2.0 * audioPacket.caps().samples() / audioPacket.caps().rate();
+            qreal diffThreshold = 2.0 * audioPacket.samples() / audioPacket.caps().rate();
 
             if (qAbs(avgDiff) >= diffThreshold) {
-                int wantedSamples = audioPacket.caps().samples() + int(diff * audioPacket.caps().rate());
-                int minSamples = audioPacket.caps().samples() * (100 - SAMPLE_CORRECTION_PERCENT_MAX) / 100;
-                int maxSamples = audioPacket.caps().samples() * (100 + SAMPLE_CORRECTION_PERCENT_MAX) / 100;
+                int wantedSamples = audioPacket.samples() + int(diff * audioPacket.caps().rate());
+                int minSamples = audioPacket.samples() * (100 - SAMPLE_CORRECTION_PERCENT_MAX) / 100;
+                int maxSamples = audioPacket.samples() * (100 + SAMPLE_CORRECTION_PERCENT_MAX) / 100;
                 wantedSamples = qBound(minSamples, wantedSamples, maxSamples);
                 audioPacket = this->m_audioConvert.scale(audioPacket, wantedSamples);
             }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ndkmedia/src/audiostream.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ndkmedia/src/audiostream.h
@@ -39,13 +39,13 @@ class AudioStream: public AbstractStream
                     QObject *parent=nullptr);
         ~AudioStream();
 
-        Q_INVOKABLE AkCaps caps() const;
-        Q_INVOKABLE bool decodeData();
+        Q_INVOKABLE AkCaps caps() const override;
+        Q_INVOKABLE bool decodeData() override;
         Q_INVOKABLE static AkAudioCaps::SampleFormat sampleFormatFromEncoding(int32_t encoding);
         Q_INVOKABLE static AkAudioCaps::ChannelLayout layoutFromChannelMask(int32_t channelMask);
 
     protected:
-        void processData(const AkPacket &packet);
+        void processData(const AkPacket &packet) override;
 
     private:
         AudioStreamPrivate *d;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ndkmedia/src/mediasourcendkmedia.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ndkmedia/src/mediasourcendkmedia.cpp
@@ -124,13 +124,13 @@ QList<int> MediaSourceNDKMedia::streams(
     return this->d->m_streams;
 }
 
-QList<int> MediaSourceNDKMedia::listTracks(const QString &mimeType)
+QList<int> MediaSourceNDKMedia::listTracks(AkCaps::CapsType type)
 {
     QList<int> tracks;
     int i = 0;
 
     for (auto &streamInfo: this->d->m_streamInfo) {
-        if (mimeType.isEmpty() || streamInfo.caps.mimeType() == mimeType)
+        if (type == AkCaps::CapsAny || streamInfo.caps.type() == type)
             tracks << i;
 
         i++;
@@ -154,13 +154,13 @@ bool MediaSourceNDKMedia::sync() const
     return this->d->m_sync;
 }
 
-int MediaSourceNDKMedia::defaultStream(const QString &mimeType)
+int MediaSourceNDKMedia::defaultStream(AkCaps::CapsType type)
 {
     int defaultStream = -1;
     int i = 0;
 
     for (auto &streamInfo: this->d->m_streamInfo) {
-        if (streamInfo.caps.mimeType() == mimeType) {
+        if (streamInfo.caps.type() == type) {
             if (streamInfo.defaultStream)
                 return i;
 
@@ -236,7 +236,7 @@ AkElement::ElementState MediaSourceNDKMe
 }
 
 void MediaSourceNDKMedia::seek(qint64 mSecs,
-                               MultiSrcElement::SeekPosition position)
+                               SeekPosition position)
 {
     if (this->d->m_state == AkElement::ElementStateNull)
         return;
@@ -244,12 +244,12 @@ void MediaSourceNDKMedia::seek(qint64 mS
     int64_t pts = mSecs;
 
     switch (position) {
-    case MultiSrcElement::SeekCur:
+    case SeekCur:
         pts += this->currentTimeMSecs();
 
         break;
 
-    case MultiSrcElement::SeekEnd:
+    case SeekEnd:
         pts += this->durationMSecs();
 
         break;
@@ -389,8 +389,8 @@ bool MediaSourceNDKMedia::setState(AkEle
             QList<int> filterStreams;
 
             if (this->d->m_streams.isEmpty())
-                filterStreams << this->defaultStream("audio/x-raw")
-                              << this->defaultStream("video/x-raw");
+                filterStreams << this->defaultStream(AkCaps::CapsAudio)
+                              << this->defaultStream(AkCaps::CapsVideo);
             else
                 filterStreams = this->d->m_streams;
 
@@ -403,12 +403,12 @@ bool MediaSourceNDKMedia::setState(AkEle
                 this->d->m_streamsMap[i] = stream;
 
                 QObject::connect(stream.data(),
-                                 SIGNAL(oStream(const AkPacket &)),
+                                 SIGNAL(oStream(AkPacket)),
                                  this,
-                                 SIGNAL(oStream(const AkPacket &)),
+                                 SIGNAL(oStream(AkPacket)),
                                  Qt::DirectConnection);
                 QObject::connect(stream.data(),
-                                 SIGNAL(oStream(const AkPacket &)),
+                                 SIGNAL(oStream(AkPacket)),
                                  this,
                                  SLOT(log()));
                 QObject::connect(stream.data(),
@@ -424,9 +424,11 @@ bool MediaSourceNDKMedia::setState(AkEle
             this->d->m_run = true;
             this->d->m_paused = state == AkElement::ElementStatePaused;
             this->d->m_eos = false;
-            QtConcurrent::run(&this->d->m_threadPool,
-                               this->d,
-                               &MediaSourceNDKMediaPrivate::readPackets);
+            auto result =
+                    QtConcurrent::run(&this->d->m_threadPool,
+                                      this->d,
+                                      &MediaSourceNDKMediaPrivate::readPackets);
+            Q_UNUSED(result)
             this->d->m_state = state;
             emit this->stateChanged(state);
 
@@ -525,12 +527,12 @@ void MediaSourceNDKMedia::log()
     AbstractStreamPtr videoStream;
 
     for (auto &stream: this->d->m_streamsMap) {
-        auto mimeType = stream->mimeType();
+        auto type = stream->type();
 
-        if (mimeType == "audio/x-raw" && !audioStream)
+        if (type == AkCaps::CapsAudio && !audioStream)
             audioStream = stream;
 
-        if (mimeType == "video/x-raw" && !videoStream)
+        if (type == AkCaps::CapsVideo && !videoStream)
             videoStream = stream;
 
         if (audioStream && videoStream)
@@ -569,29 +571,39 @@ MediaSourceNDKMediaPrivate::MediaSourceN
 AbstractStreamPtr MediaSourceNDKMediaPrivate::createStream(int index)
 {
     auto mediaExtractor = this->m_mediaExtractor.data();
-    auto type = AbstractStream::mimeType(mediaExtractor, uint(index));
+    auto type = AbstractStream::type(mediaExtractor, uint(index));
     AbstractStreamPtr stream;
     auto id = Ak::id();
 
-    if (type == "video/x-raw")
+    switch (type) {
+    case AkCaps::CapsVideo:
         stream = AbstractStreamPtr(new VideoStream(mediaExtractor,
                                                    uint(index),
                                                    id,
                                                    &this->m_globalClock,
                                                    this->m_sync));
-    else if (type == "audio/x-raw")
+
+        break;
+
+    case AkCaps::CapsAudio:
         stream = AbstractStreamPtr(new AudioStream(mediaExtractor,
                                                    uint(index),
                                                    id,
                                                    &this->m_globalClock,
                                                    this->m_sync));
-    else
+
+        break;
+
+    default:
         stream = AbstractStreamPtr(new AbstractStream(mediaExtractor,
                                                       uint(index),
                                                       id,
                                                       &this->m_globalClock,
                                                       this->m_sync));
 
+        break;
+    }
+
     return stream;
 }
 
@@ -669,7 +681,7 @@ AkCaps MediaSourceNDKMediaPrivate::capsF
 
         int32_t rate = 0;
         AMediaFormat_getInt32(mediaFormat, AMEDIAFORMAT_KEY_SAMPLE_RATE, &rate);
-        caps = AkAudioCaps(sampleFormat, layout, rate);
+        caps = AkAudioCaps(sampleFormat, layout, false, rate);
     } else if (QString(mime).startsWith("video/")) {
         int32_t width = 0;
         AMediaFormat_getInt32(mediaFormat, AMEDIAFORMAT_KEY_WIDTH, &width);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ndkmedia/src/mediasourcendkmedia.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ndkmedia/src/mediasourcendkmedia.h
@@ -32,40 +32,40 @@ class MediaSourceNDKMedia: public MediaS
         MediaSourceNDKMedia(QObject *parent=nullptr);
         ~MediaSourceNDKMedia();
 
-        Q_INVOKABLE QStringList medias() const;
-        Q_INVOKABLE QString media() const;
-        Q_INVOKABLE QList<int> streams() const;
-        Q_INVOKABLE QList<int> listTracks(const QString &mimeType);
-        Q_INVOKABLE QString streamLanguage(int stream);
-        Q_INVOKABLE bool loop() const;
-        Q_INVOKABLE bool sync() const;
-        Q_INVOKABLE int defaultStream(const QString &mimeType);
-        Q_INVOKABLE QString description(const QString &media) const;
-        Q_INVOKABLE AkCaps caps(int stream);
-        Q_INVOKABLE qint64 durationMSecs();
-        Q_INVOKABLE qint64 currentTimeMSecs();
-        Q_INVOKABLE qint64 maxPacketQueueSize() const;
-        Q_INVOKABLE bool showLog() const;
-        Q_INVOKABLE AkElement::ElementState state() const;
+        Q_INVOKABLE QStringList medias() const override;
+        Q_INVOKABLE QString media() const override;
+        Q_INVOKABLE QList<int> streams() const override;
+        Q_INVOKABLE QList<int> listTracks(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString streamLanguage(int stream) override;
+        Q_INVOKABLE bool loop() const override;
+        Q_INVOKABLE bool sync() const override;
+        Q_INVOKABLE int defaultStream(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString description(const QString &media) const override;
+        Q_INVOKABLE AkCaps caps(int stream) override;
+        Q_INVOKABLE qint64 durationMSecs() override;
+        Q_INVOKABLE qint64 currentTimeMSecs() override;
+        Q_INVOKABLE qint64 maxPacketQueueSize() const override;
+        Q_INVOKABLE bool showLog() const override;
+        Q_INVOKABLE AkElement::ElementState state() const override;
 
     private:
         MediaSourceNDKMediaPrivate *d;
 
     public slots:
-        void seek(qint64 mSecs, MultiSrcElement::SeekPosition position);
-        void setMedia(const QString &media);
-        void setStreams(const QList<int> &streams);
-        void setMaxPacketQueueSize(qint64 maxPacketQueueSize);
-        void setShowLog(bool showLog);
-        void setLoop(bool loop);
-        void setSync(bool sync);
-        void resetMedia();
-        void resetStreams();
-        void resetMaxPacketQueueSize();
-        void resetShowLog();
-        void resetLoop();
-        void resetSync();
-        bool setState(AkElement::ElementState state);
+        void seek(qint64 mSecs, SeekPosition position) override;
+        void setMedia(const QString &media) override;
+        void setStreams(const QList<int> &streams) override;
+        void setMaxPacketQueueSize(qint64 maxPacketQueueSize) override;
+        void setShowLog(bool showLog) override;
+        void setLoop(bool loop) override;
+        void setSync(bool sync) override;
+        void resetMedia() override;
+        void resetStreams() override;
+        void resetMaxPacketQueueSize() override;
+        void resetShowLog() override;
+        void resetLoop() override;
+        void resetSync() override;
+        bool setState(AkElement::ElementState state) override;
 
     private slots:
         void doLoop();
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ndkmedia/src/videostream.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ndkmedia/src/videostream.cpp
@@ -99,63 +99,49 @@ using ImageFormatToPixelFormatMap = QMap
 inline const ImageFormatToPixelFormatMap &imageFormatToPixelFormat()
 {
     static const ImageFormatToPixelFormatMap imgFmtToPixFmt {
-        {COLOR_FormatMonochrome               , AkVideoCaps::Format_monob      },
-        {COLOR_Format8bitRGB332               , AkVideoCaps::Format_rgb8       },
-        {COLOR_Format12bitRGB444              , AkVideoCaps::Format_rgb444le   },
-        {COLOR_Format16bitARGB4444            , AkVideoCaps::Format_argb444le  },
-        {COLOR_Format16bitARGB1555            , AkVideoCaps::Format_argb555le  },
-        {COLOR_Format16bitRGB565              , AkVideoCaps::Format_rgb565le   },
-        {COLOR_Format16bitBGR565              , AkVideoCaps::Format_bgr565le   },
-        {COLOR_Format18bitRGB666              , AkVideoCaps::Format_rgb666     },
-        {COLOR_Format18bitARGB1665            , AkVideoCaps::Format_argb1665   },
-        {COLOR_Format19bitARGB1666            , AkVideoCaps::Format_argb1666   },
-        {COLOR_Format24bitRGB888              , AkVideoCaps::Format_rgb24      },
-        {COLOR_Format24bitBGR888              , AkVideoCaps::Format_bgr24      },
-        {COLOR_Format24bitARGB1887            , AkVideoCaps::Format_argb1887   },
-        {COLOR_Format25bitARGB1888            , AkVideoCaps::Format_bgra1888   },
-        {COLOR_Format32bitBGRA8888            , AkVideoCaps::Format_bgra       },
-        {COLOR_Format32bitARGB8888            , AkVideoCaps::Format_argb       },
-        {COLOR_FormatYUV411Planar             , AkVideoCaps::Format_yuv411p    },
-        {COLOR_FormatYUV411PackedPlanar       , AkVideoCaps::Format_yuv411p    },
-        {COLOR_FormatYUV420Planar             , AkVideoCaps::Format_yuv420p    },
-        {COLOR_FormatYUV420PackedPlanar       , AkVideoCaps::Format_yuv420p    },
-        {COLOR_FormatYUV420SemiPlanar         , AkVideoCaps::Format_yuv420p    },
-        {COLOR_FormatYUV422Planar             , AkVideoCaps::Format_yuv422p    },
-        {COLOR_FormatYUV422PackedPlanar       , AkVideoCaps::Format_yuv422p    },
-        {COLOR_FormatYUV422SemiPlanar         , AkVideoCaps::Format_yuv422p    },
-        {COLOR_FormatYCbYCr                   , AkVideoCaps::Format_yuyv422    },
-        {COLOR_FormatYCrYCb                   , AkVideoCaps::Format_yvyu422    },
-        {COLOR_FormatCbYCrY                   , AkVideoCaps::Format_uyvy422    },
-        {COLOR_FormatCrYCbY                   , AkVideoCaps::Format_vyuy422    },
-        {COLOR_FormatYUV444Interleaved        , AkVideoCaps::Format_yuv444     },
-        {COLOR_FormatRawBayer8bit             , AkVideoCaps::Format_bayer_rggb8},
-//        {COLOR_FormatRawBayer10bit            , AkVideoCaps::Format_           },
-//        {COLOR_FormatRawBayer8bitcompressed   , AkVideoCaps::Format_           },
-        {COLOR_FormatL2                       , AkVideoCaps::Format_gray2      },
-        {COLOR_FormatL4                       , AkVideoCaps::Format_gray4      },
-        {COLOR_FormatL8                       , AkVideoCaps::Format_gray       },
-        {COLOR_FormatL16                      , AkVideoCaps::Format_gray16le   },
-        {COLOR_FormatL24                      , AkVideoCaps::Format_gray24     },
-        {COLOR_FormatL32                      , AkVideoCaps::Format_gray32     },
-        {COLOR_FormatYUV420PackedSemiPlanar   , AkVideoCaps::Format_yuv420p    },
-        {COLOR_FormatYUV422PackedSemiPlanar   , AkVideoCaps::Format_yuv422p    },
-        {COLOR_Format18BitBGR666              , AkVideoCaps::Format_bgr666     },
-        {COLOR_Format24BitARGB6666            , AkVideoCaps::Format_argb6666   },
-        {COLOR_Format24BitABGR6666            , AkVideoCaps::Format_abgr6666   },
-//        {COLOR_TI_FormatYUV420PackedSemiPlanar, AkVideoCaps::Format_           },
-//        {COLOR_FormatSurface                  , AkVideoCaps::Format_           },
-        {COLOR_Format32bitABGR8888            , AkVideoCaps::Format_abgr       },
-//        {COLOR_FormatYUV420Flexible           , AkVideoCaps::Format_           },
-//        {COLOR_FormatYUV422Flexible           , AkVideoCaps::Format_           },
-//        {COLOR_FormatYUV444Flexible           , AkVideoCaps::Format_           },
-        {COLOR_FormatRGBFlexible              , AkVideoCaps::Format_rgbp       },
-        {COLOR_FormatRGBAFlexible             , AkVideoCaps::Format_rgbap      },
-//        {COLOR_QCOM_FormatYUV420SemiPlanar    , AkVideoCaps::Format_           },
+        {COLOR_Format8bitRGB332            , AkVideoCaps::Format_rgb332    },
+        {COLOR_Format12bitRGB444           , AkVideoCaps::Format_rgb444le  },
+        {COLOR_Format16bitARGB4444         , AkVideoCaps::Format_argb4444le},
+        {COLOR_Format16bitARGB1555         , AkVideoCaps::Format_argb1555le},
+        {COLOR_Format16bitRGB565           , AkVideoCaps::Format_rgb565le  },
+        {COLOR_Format16bitBGR565           , AkVideoCaps::Format_bgr565le  },
+        {COLOR_Format24bitRGB888           , AkVideoCaps::Format_rgb24     },
+        {COLOR_Format24bitBGR888           , AkVideoCaps::Format_bgr24     },
+        {COLOR_Format32bitBGRA8888         , AkVideoCaps::Format_bgra      },
+        {COLOR_Format32bitARGB8888         , AkVideoCaps::Format_argb      },
+        {COLOR_FormatYUV411Planar          , AkVideoCaps::Format_yuv411p   },
+        {COLOR_FormatYUV411PackedPlanar    , AkVideoCaps::Format_yuv411p   },
+        {COLOR_FormatYUV420Planar          , AkVideoCaps::Format_yuv420p   },
+        {COLOR_FormatYUV420PackedPlanar    , AkVideoCaps::Format_yuv420p   },
+        {COLOR_FormatYUV420SemiPlanar      , AkVideoCaps::Format_nv12      },
+        {COLOR_FormatYUV422Planar          , AkVideoCaps::Format_yuv422p   },
+        {COLOR_FormatYUV422PackedPlanar    , AkVideoCaps::Format_yuv422p   },
+        {COLOR_FormatYUV422SemiPlanar      , AkVideoCaps::Format_yuv422p   },
+        {COLOR_FormatYCbYCr                , AkVideoCaps::Format_yuyv422   },
+        {COLOR_FormatYCrYCb                , AkVideoCaps::Format_yvyu422   },
+        {COLOR_FormatCbYCrY                , AkVideoCaps::Format_uyvy422   },
+        {COLOR_FormatCrYCbY                , AkVideoCaps::Format_vyuy422   },
+        {COLOR_FormatYUV444Interleaved     , AkVideoCaps::Format_yuv444    },
+        {COLOR_FormatL8                    , AkVideoCaps::Format_gray8     },
+        {COLOR_FormatL16                   , AkVideoCaps::Format_gray16le  },
+        {COLOR_FormatL32                   , AkVideoCaps::Format_gray32le  },
+        {COLOR_FormatYUV420PackedSemiPlanar, AkVideoCaps::Format_yuv420p   },
+        {COLOR_FormatYUV422PackedSemiPlanar, AkVideoCaps::Format_yuv422p   },
+        {COLOR_Format32bitABGR8888         , AkVideoCaps::Format_abgr      },
+        {COLOR_FormatYUV420Flexible        , AkVideoCaps::Format_yuv420p   },
+        {COLOR_FormatYUV422Flexible        , AkVideoCaps::Format_yuv422p   },
+        {COLOR_FormatYUV444Flexible        , AkVideoCaps::Format_yuv444p   },
+        {COLOR_FormatRGBFlexible           , AkVideoCaps::Format_rgb24p    },
+        {COLOR_FormatRGBAFlexible          , AkVideoCaps::Format_rgbap     },
     };
 
     return imgFmtToPixFmt;
 }
 
+#if __ANDROID_API__ < 28
+const char *AMEDIAFORMAT_KEY_SLICE_HEIGHT = "slice-height";
+#endif
+
 class VideoStreamPrivate
 {
     public:
@@ -191,6 +177,10 @@ VideoStream::~VideoStream()
 
 AkCaps VideoStream::caps() const
 {
+    int32_t colorFormat = 0;
+    AMediaFormat_getInt32(this->mediaFormat(),
+                          AMEDIAFORMAT_KEY_COLOR_FORMAT,
+                          &colorFormat);
     int32_t width = 0;
     AMediaFormat_getInt32(this->mediaFormat(),
                           AMEDIAFORMAT_KEY_WIDTH,
@@ -204,10 +194,10 @@ AkCaps VideoStream::caps() const
                           AMEDIAFORMAT_KEY_FRAME_RATE,
                           &frameRate);
 
-    return AkVideoCaps(AkVideoCaps::Format_rgb24,
+    return AkVideoCaps(imageFormatToPixelFormat().value(colorFormat),
                        width,
                        height,
-                       AkFrac(frameRate, 1));
+                       {frameRate, 1});
 }
 
 bool VideoStream::decodeData()
@@ -246,8 +236,7 @@ bool VideoStream::decodeData()
 void VideoStream::processData(const AkPacket &packet)
 {
     if (!this->sync()) {
-        auto oPacket = AkVideoPacket(packet).convert(AkVideoCaps::Format_rgb24);
-        emit this->oStream(oPacket);
+        emit this->oStream(packet);
 
         return;
     }
@@ -286,8 +275,7 @@ void VideoStream::processData(const AkPa
         }
 
         this->m_clockDiff = diff;
-        auto oPacket = AkVideoPacket(packet).convert(AkVideoCaps::Format_rgb24);
-        emit this->oStream(oPacket);
+        emit this->oStream(packet);
         this->d->m_lastPts = pts;
 
         break;
@@ -316,26 +304,52 @@ AkPacket VideoStreamPrivate::readPacket(
     AMediaFormat_getInt32(format,
                           AMEDIAFORMAT_KEY_HEIGHT,
                           &height);
-    int32_t frameRate;
+    int32_t frameRate = 0;
     AMediaFormat_getInt32(format,
                           AMEDIAFORMAT_KEY_FRAME_RATE,
                           &frameRate);
+    int32_t stride = 0;
+    AMediaFormat_getInt32(format,
+                          AMEDIAFORMAT_KEY_STRIDE,
+                          &stride);
+    int32_t sliceHeight = 0;
+    AMediaFormat_getInt32(format,
+                          AMEDIAFORMAT_KEY_SLICE_HEIGHT,
+                          &sliceHeight);
+
+    if (sliceHeight < height)
+        sliceHeight = height;
+
     AMediaFormat_delete(format);
 
     size_t bufferSize = 0;
     auto data = AMediaCodec_getOutputBuffer(self->codec(),
                                             bufferIndex,
                                             &bufferSize);
-    bufferSize = qMin(bufferSize, size_t(info.size));
-    QByteArray oBuffer(int(bufferSize), Qt::Uninitialized);
-    memcpy(oBuffer.data(), data + info.offset, bufferSize);
-
-    AkVideoPacket packet;
-    packet.setCaps({imageFormatToPixelFormat().value(colorFormat),
-                    width,
-                    height,
-                    {AkFrac(frameRate, 1)}});
-    packet.setBuffer(oBuffer);
+    AkVideoPacket packet({imageFormatToPixelFormat().value(colorFormat),
+                          width,
+                          height,
+                          {frameRate, 1}});
+    auto iData = data + info.offset;
+
+    for (int plane = 0; plane < packet.planes(); ++plane) {
+        auto iLineSize = packet.planes() > 1?
+                             stride >> packet.widthDiv(plane):
+                             stride;
+        auto oLineSize = packet.lineSize(plane);
+        auto lineSize = qMin<size_t>(iLineSize, oLineSize);
+        auto heightDiv = packet.heightDiv(plane);
+
+        for (int y = 0; y < packet.caps().height(); ++y) {
+            int ys = y >> heightDiv;
+            memcpy(packet.line(plane, y),
+                   iData + ys * iLineSize,
+                   lineSize);
+        }
+
+        iData += (iLineSize * sliceHeight) >> heightDiv;
+    }
+
     packet.setPts(info.presentationTimeUs);
     packet.setTimeBase({1, qint64(1e6)});
     packet.setIndex(int(self->index()));
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/ndkmedia/src/videostream.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/ndkmedia/src/videostream.h
@@ -37,11 +37,11 @@ class VideoStream: public AbstractStream
                     QObject *parent=nullptr);
         ~VideoStream();
 
-        Q_INVOKABLE AkCaps caps() const;
-        Q_INVOKABLE bool decodeData();
+        Q_INVOKABLE AkCaps caps() const override;
+        Q_INVOKABLE bool decodeData() override;
 
     protected:
-        void processData(const AkPacket &packet);
+        void processData(const AkPacket &packet) override;
 
     private:
         VideoStreamPrivate *d;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/vlc/src/mediasourcevlc.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/vlc/src/mediasourcevlc.cpp
@@ -29,6 +29,7 @@
 #include <akcaps.h>
 #include <akfrac.h>
 #include <akpacket.h>
+#include <aksubtitlecaps.h>
 #include <akvideocaps.h>
 #include <akvideopacket.h>
 
@@ -65,7 +66,7 @@ class MediaSourceVLCPrivate
         libvlc_media_player_t *m_mediaPlayer {nullptr};
         QMutex m_mutex;
         QWaitCondition m_mediaParsed;
-        AkAudioPacket m_audioFrame;
+        AkAudioCaps m_audioCaps;
         AkVideoPacket m_videoFrame;
         AkFrac m_fps;
         AkElement::ElementState m_state {AkElement::ElementStateNull};
@@ -246,13 +247,13 @@ QList<int> MediaSourceVLC::streams() con
     return this->d->m_streams;
 }
 
-QList<int> MediaSourceVLC::listTracks(const QString &mimeType)
+QList<int> MediaSourceVLC::listTracks(AkCaps::CapsType type)
 {
     QList<int> tracks;
     int i = 0;
 
     for (auto &streamInfo: this->d->m_streamInfo) {
-        if (mimeType.isEmpty() || streamInfo.caps.mimeType() == mimeType)
+        if (type != AkCaps::CapsUnknown || streamInfo.caps.type() == type)
             tracks << i;
 
         i++;
@@ -278,13 +279,13 @@ bool MediaSourceVLC::sync() const
     return this->d->m_sync;
 }
 
-int MediaSourceVLC::defaultStream(const QString &mimeType)
+int MediaSourceVLC::defaultStream(AkCaps::CapsType type)
 {
     int defaultStream = -1;
     int i = 0;
 
     for (auto &streamInfo: this->d->m_streamInfo) {
-        if (streamInfo.caps.mimeType() == mimeType) {
+        if (streamInfo.caps.type() == type) {
             defaultStream = i;
 
             break;
@@ -348,7 +349,7 @@ AkElement::ElementState MediaSourceVLC::
 }
 
 void MediaSourceVLC::seek(qint64 mSecs,
-                          MultiSrcElement::SeekPosition position)
+                          SeekPosition position)
 {
     if (this->d->m_state == AkElement::ElementStateNull)
         return;
@@ -357,12 +358,12 @@ void MediaSourceVLC::seek(qint64 mSecs,
     auto duration = this->durationMSecs();
 
     switch (position) {
-    case MultiSrcElement::SeekCur:
+    case SeekCur:
         pts += this->currentTimeMSecs();
 
         break;
 
-    case MultiSrcElement::SeekEnd:
+    case SeekEnd:
         pts += duration;
 
         break;
@@ -531,8 +532,8 @@ bool MediaSourceVLC::setState(AkElement:
             QList<int> filterStreams;
 
             if (this->d->m_streams.isEmpty())
-                filterStreams << this->defaultStream("audio/x-raw")
-                              << this->defaultStream("video/x-raw");
+                filterStreams << this->defaultStream(AkCaps::CapsAudio)
+                              << this->defaultStream(AkCaps::CapsVideo);
             else
                 filterStreams = this->d->m_streams;
 
@@ -540,15 +541,20 @@ bool MediaSourceVLC::setState(AkElement:
 
             for (int &i: filterStreams) {
                 auto caps = this->caps(i);
-                auto mimeType = caps.mimeType();
 
-                if (mimeType == "audio/x-raw") {
+                switch (caps.type()) {
+                case AkCaps::CapsAudio:
                     libvlc_audio_set_track(this->d->m_mediaPlayer, i);
                     this->d->m_audioIndex = i;
-                } else if (mimeType == "video/x-raw") {
+
+                    break;
+                case AkCaps::CapsVideo:
                     libvlc_video_set_track(this->d->m_mediaPlayer, i);
                     this->d->m_fps = AkVideoCaps(caps).fps();
                     this->d->m_videoIndex = i;
+                    break;
+                default:
+                    break;
                 }
             }
 
@@ -675,6 +681,7 @@ void MediaSourceVLCPrivate::mediaParsedC
             case libvlc_track_audio: {
                 AkAudioCaps audioCaps(AkAudioCaps::SampleFormat_s16,
                                       AkAudioCaps::defaultChannelLayout(int(tracks[i]->audio->i_channels)),
+                                      false,
                                       int(tracks[i]->audio->i_rate));
                 streamInfo << Stream(audioCaps,
                                      tracks[i]->psz_language);
@@ -695,8 +702,7 @@ void MediaSourceVLCPrivate::mediaParsedC
             }
 
             case libvlc_track_text: {
-                AkCaps subtitlesCaps("text/x-raw");
-                subtitlesCaps.setProperty("type", "text");
+                AkSubtitleCaps subtitlesCaps(AkSubtitleCaps::SubtitleFormat_text);
                 streamInfo << Stream(subtitlesCaps,
                                      tracks[i]->psz_language);
 
@@ -734,9 +740,10 @@ void MediaSourceVLCPrivate::mediaPlayerE
 {
     Q_UNUSED(event)
     auto self = reinterpret_cast<MediaSourceVLC *>(userData);
-    QtConcurrent::run(&self->d->m_threadPool, [self] () {
+    auto result = QtConcurrent::run(&self->d->m_threadPool, [self] () {
         self->d->doLoop();
     });
+    Q_UNUSED(result)
 }
 
 void MediaSourceVLCPrivate::mediaPlayerTimeChanged(const libvlc_event_t *event, void *userData)
@@ -748,7 +755,7 @@ void MediaSourceVLCPrivate::mediaPlayerT
 void *MediaSourceVLCPrivate::videoLockCallback(void *userData, void **planes)
 {
     auto self = reinterpret_cast<MediaSourceVLC *>(userData);
-    planes[0] = self->d->m_videoFrame.buffer().data();
+    planes[0] = self->d->m_videoFrame.data();
 
     return self;
 }
@@ -757,7 +764,7 @@ void MediaSourceVLCPrivate::videoDisplay
 {
     Q_UNUSED(picture)
     auto self = reinterpret_cast<MediaSourceVLC *>(userData);
-    self->d->m_videoFrame.pts() = self->d->m_pts;
+    self->d->m_videoFrame.setPts(self->d->m_pts);
     emit self->oStream(self->d->m_videoFrame);
 }
 
@@ -767,14 +774,15 @@ void MediaSourceVLCPrivate::audioPlayCal
                                               int64_t pts)
 {
     auto self = reinterpret_cast<MediaSourceVLC *>(userData);
-    QByteArray oBuffer(reinterpret_cast<const char *>(samples),
-                       2
-                       * int(count)
-                       * int(self->d->m_audioFrame.caps().channels()));
-    self->d->m_audioFrame.caps().setSamples(int(count));
-    self->d->m_audioFrame.buffer() = oBuffer;
-    self->d->m_audioFrame.pts() = pts;
-    emit self->oStream(self->d->m_audioFrame);
+
+    AkAudioPacket packet(self->d->m_audioCaps, count);
+    memcpy(packet.data(), samples, packet.size());
+    packet.setPts(pts);
+    packet.setTimeBase({1, 1000});
+    packet.setIndex(int(self->d->m_audioIndex));
+    packet.setId(self->d->m_audioId);
+
+    emit self->oStream(packet);
 }
 
 unsigned MediaSourceVLCPrivate::videoFormatCallback(void **userData,
@@ -785,16 +793,17 @@ unsigned MediaSourceVLCPrivate::videoFor
                                                     unsigned *lines)
 {
     auto self = reinterpret_cast<MediaSourceVLC *>(*userData);
+
     AkVideoCaps caps(AkVideoCaps::Format_rgb24,
                      int(*width),
                      int(*height),
                      self->d->m_fps);
     self->d->m_videoFrame = AkVideoPacket(caps);
-    self->d->m_videoFrame.timeBase() = AkFrac(1, 1000);
-    self->d->m_videoFrame.index() = int(self->d->m_videoIndex);
-    self->d->m_videoFrame.id() = self->d->m_videoId;
+    self->d->m_videoFrame.setTimeBase(AkFrac(1, 1000));
+    self->d->m_videoFrame.setIndex(int(self->d->m_videoIndex));
+    self->d->m_videoFrame.setId(self->d->m_videoId);
     snprintf(chroma, 5, "%s", "RV24");
-    *pitches = unsigned(caps.bytesPerLine(0));
+    *pitches = unsigned(self->d->m_videoFrame.lineSize(0));
     *lines = *height;
 
     return 1;
@@ -812,14 +821,10 @@ int MediaSourceVLCPrivate::audioSetupCal
      */
     *channels = 2;
 
-    AkAudioCaps caps(AkAudioCaps::SampleFormat_s16,
-                     AkAudioCaps::defaultChannelLayout(int(*channels)),
-                     int(*rate));
-    AkAudioPacket packet;
-    self->d->m_audioFrame.caps() = caps;
-    self->d->m_audioFrame.timeBase() = AkFrac(1, 1000);
-    self->d->m_audioFrame.index() = int(self->d->m_audioIndex);
-    self->d->m_audioFrame.id() = self->d->m_audioId;
+    self->d->m_audioCaps = {AkAudioCaps::SampleFormat_s16,
+                            AkAudioCaps::defaultChannelLayout(int(*channels)),
+                            false,
+                            int(*rate)};
     snprintf(format, 5, "%s", "S16N");
 
     return 0;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/MultiSrc/src/vlc/src/mediasourcevlc.h
+++ webcamoid-9.0.0/libAvKys/Plugins/MultiSrc/src/vlc/src/mediasourcevlc.h
@@ -35,11 +35,11 @@ class MediaSourceVLC: public MediaSource
         Q_INVOKABLE QStringList medias() const;
         Q_INVOKABLE QString media() const;
         Q_INVOKABLE QList<int> streams() const;
-        Q_INVOKABLE QList<int> listTracks(const QString &mimeType);
+        Q_INVOKABLE QList<int> listTracks(AkCaps::CapsType type);
         Q_INVOKABLE QString streamLanguage(int stream);
         Q_INVOKABLE bool loop() const;
         Q_INVOKABLE bool sync() const;
-        Q_INVOKABLE int defaultStream(const QString &mimeType);
+        Q_INVOKABLE int defaultStream(AkCaps::CapsType type);
         Q_INVOKABLE QString description(const QString &media) const;
         Q_INVOKABLE AkCaps caps(int stream);
         Q_INVOKABLE qint64 durationMSecs();
@@ -52,7 +52,7 @@ class MediaSourceVLC: public MediaSource
         MediaSourceVLCPrivate *d;
 
     public slots:
-        void seek(qint64 mSecs, MultiSrcElement::SeekPosition position);
+        void seek(qint64 mSecs, SeekPosition position);
         void setMedia(const QString &media);
         void setStreams(const QList<int> &streams);
         void setMaxPacketQueueSize(qint64 maxPacketQueueSize);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Multiplex/CMakeLists.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-# Webcamoid, webcam capture application.
-# Copyright (C) 2021  Gonzalo Exequiel Pedone
-#
-# Webcamoid is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Webcamoid is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
-#
-# Web-Site: http://webcamoid.github.io/
-
-cmake_minimum_required(VERSION 3.16)
-
-project(Multiplex LANGUAGES CXX)
-
-include(../../cmake/ProjectCommons.cmake)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-set(CMAKE_AUTOUIC ON)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-
-set(QT_COMPONENTS
-    Core)
-find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS
-             ${QT_COMPONENTS}
-             REQUIRED)
-find_package(Qt${QT_VERSION_MAJOR} ${QT_MINIMUM_VERSION} COMPONENTS
-             ${QT_COMPONENTS}
-             REQUIRED)
-add_library(Multiplex SHARED
-            src/multiplex.h
-            src/multiplexelement.h
-            src/multiplex.cpp
-            src/multiplexelement.cpp
-            pspec.json)
-
-if (WIN32)
-    set_target_properties(Multiplex PROPERTIES
-                          RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
-elseif (NOT ANDROID)
-    set_target_properties(Multiplex PROPERTIES
-                          LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
-endif ()
-
-add_dependencies(Multiplex avkys)
-target_include_directories(Multiplex
-                           PRIVATE ../../Lib/src)
-target_compile_definitions(Multiplex PRIVATE AVKYS_PLUGIN_MULTIPLEX)
-list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
-target_link_libraries(Multiplex avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
-
-if (WIN32)
-    install(TARGETS Multiplex RUNTIME DESTINATION ${PLUGINSDIR})
-elseif (NOT ANDROID)
-    install(TARGETS Multiplex DESTINATION ${PLUGINSDIR})
-endif ()
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Multiplex/pspec.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-    "type": "WebcamoidPluginsCollection",
-    "plugins": [
-        {
-            "name": "Multiplex",
-            "description": "Filter out input streams",
-            "id": "Utils/Multiplex",
-            "implements": ["Element"],
-            "type": "qtplugin"
-        }
-    ]
-}
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Multiplex/src/multiplex.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include "multiplex.h"
-#include "multiplexelement.h"
-
-QObject *Multiplex::create(const QString &key, const QString &specification)
-{
-    Q_UNUSED(key)
-    Q_UNUSED(specification)
-
-    return new MultiplexElement();
-}
-
-QStringList Multiplex::keys() const
-{
-    return {};
-}
-
-#include "moc_multiplex.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Multiplex/src/multiplex.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef MULTIPLEX_H
-#define MULTIPLEX_H
-
-#include <akplugin.h>
-
-class Multiplex: public QObject, public AkPlugin
-{
-    Q_OBJECT
-    Q_INTERFACES(AkPlugin)
-    Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
-
-    public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
-};
-
-#endif // MULTIPLEX_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Multiplex/src/multiplexelement.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include <akcaps.h>
-#include <akpacket.h>
-
-#include "multiplexelement.h"
-
-class MultiplexElementPrivate
-{
-    public:
-        AkCaps m_caps;
-        int m_inputIndex {-1};
-        int m_outputIndex {-1};
-};
-
-MultiplexElement::MultiplexElement(): AkElement()
-{
-    this->d = new MultiplexElementPrivate;
-}
-
-MultiplexElement::~MultiplexElement()
-{
-    delete this->d;
-}
-
-AkCaps MultiplexElement::caps() const
-{
-    return this->d->m_caps;
-}
-
-int MultiplexElement::inputIndex() const
-{
-    return this->d->m_inputIndex;
-}
-
-int MultiplexElement::outputIndex() const
-{
-    return this->d->m_outputIndex;
-}
-
-void MultiplexElement::setCaps(const AkCaps &caps)
-{
-    if (this->d->m_caps == caps)
-        return;
-
-    this->d->m_caps = caps;
-    emit this->capsChanged(caps);
-}
-
-void MultiplexElement::setInputIndex(int inputIndex)
-{
-    if (this->d->m_inputIndex == inputIndex)
-        return;
-
-    this->d->m_inputIndex = inputIndex;
-    emit this->inputIndexChanged(inputIndex);
-}
-
-void MultiplexElement::setOutputIndex(int outputIndex)
-{
-    if (this->d->m_outputIndex == outputIndex)
-        return;
-
-    this->d->m_outputIndex = outputIndex;
-    emit this->outputIndexChanged(outputIndex);
-}
-
-void MultiplexElement::resetCaps()
-{
-    this->setCaps({});
-}
-
-void MultiplexElement::resetInputIndex()
-{
-    this->setInputIndex(-1);
-}
-
-void MultiplexElement::resetOutputIndex()
-{
-    this->setOutputIndex(-1);
-}
-
-AkPacket MultiplexElement::iStream(const AkPacket &packet)
-{
-    if (this->d->m_inputIndex >= 0
-        && packet.index() != this->d->m_inputIndex)
-        return {};
-
-    if (this->d->m_caps
-        && !packet.caps().isCompatible(this->d->m_caps))
-        return {};
-
-    AkPacket oPacket(packet);
-
-    if (this->d->m_outputIndex >= 0)
-        oPacket.setIndex(this->d->m_outputIndex);
-
-    akSend(oPacket)
-}
-
-#include "moc_multiplexelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Multiplex/src/multiplexelement.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef MULTIPLEXELEMENT_H
-#define MULTIPLEXELEMENT_H
-
-#include <akelement.h>
-
-class MultiplexElementPrivate;
-class AkCaps;
-
-class MultiplexElement: public AkElement
-{
-    Q_OBJECT
-    Q_PROPERTY(AkCaps caps
-               READ caps
-               WRITE setCaps
-               RESET resetCaps
-               NOTIFY capsChanged)
-    Q_PROPERTY(int inputIndex
-               READ inputIndex
-               WRITE setInputIndex
-               RESET resetInputIndex
-               NOTIFY inputIndexChanged)
-    Q_PROPERTY(int outputIndex
-               READ outputIndex
-               WRITE setOutputIndex
-               RESET resetOutputIndex
-               NOTIFY outputIndexChanged)
-
-    public:
-        MultiplexElement();
-        ~MultiplexElement();
-
-        Q_INVOKABLE AkCaps caps() const;
-        Q_INVOKABLE int inputIndex() const;
-        Q_INVOKABLE int outputIndex() const;
-
-    private:
-        MultiplexElementPrivate *d;
-
-    signals:
-        void capsChanged(const AkCaps &caps);
-        void inputIndexChanged(int inputIndex);
-        void outputIndexChanged(int outputIndex);
-
-    public slots:
-        void setCaps(const AkCaps &caps);
-        void setInputIndex(int inputIndex);
-        void setOutputIndex(int outputIndex);
-        void resetCaps();
-        void resetInputIndex();
-        void resetOutputIndex();
-
-        AkPacket iStream(const AkPacket &packet);
-};
-
-#endif // MULTIPLEXELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Nervous/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Nervous/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Nervous
 target_compile_definitions(Nervous PRIVATE AVKYS_PLUGIN_NERVOUS)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Nervous avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Nervous RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Nervous/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Nervous/share/qml/main.qml
@@ -25,21 +25,24 @@ GridLayout {
     columns: 2
 
     Label {
-        text: qsTr("N° of frames")
+        id: txtNumberOfFrames
+        text: qsTr("Number of frames")
     }
     TextField {
         text: Nervous.nFrames
-        placeholderText: qsTr("N° of frames")
+        placeholderText: qsTr("Number of frames")
         selectByMouse: true
         validator: RegExpValidator {
             regExp: /\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtNumberOfFrames.text
 
         onTextChanged: Nervous.nFrames = Number(text)
     }
 
     Label {
+        id: txtSimple
         text: qsTr("Simple")
     }
     RowLayout {
@@ -50,6 +53,7 @@ GridLayout {
         }
         Switch {
             checked: Nervous.simple
+            Accessible.name: txtSimple.text
 
             onCheckedChanged: Nervous.simple = checked
         }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Nervous/src/nervous.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Nervous/src/nervous.h
@@ -29,8 +29,8 @@ class Nervous: public QObject, public Ak
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // NERVOUS_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Nervous/src/nervouselement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Nervous/src/nervouselement.cpp
@@ -18,9 +18,9 @@
  */
 
 #include <QDateTime>
-#include <QImage>
 #include <QQmlContext>
 #include <QRandomGenerator>
+#include <QSize>
 #include <QVector>
 #include <akpacket.h>
 #include <akvideopacket.h>
@@ -30,7 +30,7 @@
 class NervousElementPrivate
 {
     public:
-        QVector<QImage> m_frames;
+        QVector<AkVideoPacket> m_frames;
         QSize m_frameSize;
         int m_nFrames {32};
         int m_stride {0};
@@ -75,30 +75,34 @@ void NervousElement::controlInterfaceCon
 
 AkPacket NervousElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    if (!packet)
+        return {};
 
-    if (src.isNull())
-        return AkPacket();
+    QSize frameSize(packet.caps().width(), packet.caps().height());
 
-    if (src.size() != this->d->m_frameSize) {
+    if (frameSize != this->d->m_frameSize) {
         this->d->m_frames.clear();
         this->d->m_stride = 0;
-        this->d->m_frameSize = src.size();
+        this->d->m_frameSize = frameSize;
     }
 
-    this->d->m_frames << src.copy();
+    this->d->m_frames << packet;
     int diff = this->d->m_frames.size() - this->d->m_nFrames;
 
     for (int i = 0; i < diff && !this->d->m_frames.isEmpty(); i++)
         this->d->m_frames.removeFirst();
 
-    if (this->d->m_frames.isEmpty())
-        akSend(packet)
+    if (this->d->m_frames.isEmpty()) {
+        emit this->oStream(packet);
+
+        return packet;
+    }
 
-    int timer = 0;
     int nFrame = 0;
 
     if (!this->d->m_simple) {
+        static int timer = 0;
+
         if (timer) {
             nFrame += this->d->m_stride;
             nFrame = qBound(0, nFrame, this->d->m_frames.size() - 1);
@@ -116,9 +120,13 @@ AkPacket NervousElement::iVideoStream(co
         nFrame = QRandomGenerator::global()->bounded(this->d->m_frames.size());
     }
 
-    auto oPacket =
-            AkVideoPacket::fromImage(this->d->m_frames[nFrame], packet);
-    akSend(oPacket)
+    auto dst = this->d->m_frames[nFrame];
+    dst.copyMetadata(packet);
+
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void NervousElement::setNFrames(int nFrames)
@@ -127,7 +135,7 @@ void NervousElement::setNFrames(int nFra
         return;
 
     this->d->m_nFrames = nFrames;
-    this->nFramesChanged(nFrames);
+    emit this->nFramesChanged(nFrames);
 }
 
 void NervousElement::setSimple(bool simple)
@@ -136,7 +144,7 @@ void NervousElement::setSimple(bool simp
         return;
 
     this->d->m_simple = simple;
-    this->simpleChanged(simple);
+    emit this->simpleChanged(simple);
 }
 
 void NervousElement::resetNFrames()
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Nervous/src/nervouselement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Nervous/src/nervouselement.h
@@ -49,10 +49,10 @@ class NervousElement: public AkElement
         NervousElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void nFramesChanged(int nFrames);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Normalize/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Normalize/CMakeLists.txt
@@ -39,7 +39,6 @@ find_package(Qt${QT_VERSION_MAJOR} ${QT_
 add_library(Normalize SHARED
             src/normalize.h
             src/normalizeelement.h
-            src/pixelstructs.h
             src/normalize.cpp
             src/normalizeelement.cpp
             pspec.json)
@@ -58,7 +57,6 @@ target_include_directories(Normalize
 target_compile_definitions(Normalize PRIVATE AVKYS_PLUGIN_NORMALIZE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Normalize avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Normalize RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Normalize/src/normalize.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Normalize/src/normalize.h
@@ -29,8 +29,8 @@ class Normalize: public QObject, public
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // NORMALIZE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Normalize/src/normalizeelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Normalize/src/normalizeelement.cpp
@@ -17,155 +17,152 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "normalizeelement.h"
-#include "pixelstructs.h"
+
+#if 0
+#define USE_FULLSWING
+#endif
+
+#ifdef USE_FULLSWING
+    #define MIN_Y 0
+    #define MAX_Y 255
+#else
+    #define MIN_Y 16
+    #define MAX_Y 235
+#endif
+
+using HistogramType = quint64;
+
+class NormalizeElementPrivate
+{
+    public:
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_ayuvpack, 0, 0, {}}};
+
+        static void histogram(const AkVideoPacket &src, HistogramType *table);
+        static void limits(const AkVideoPacket &src,
+                           const HistogramType *histogram,
+                           int &low, int &high);
+        static void normalizationTable(const AkVideoPacket &src, quint8 *table);
+};
 
 NormalizeElement::NormalizeElement(): AkElement()
 {
+    this->d = new NormalizeElementPrivate;
+
+#ifdef USE_FULLSWING
+    this->d->m_videoConverter.setYuvColorSpaceType(AkVideoConverter::YuvColorSpaceType_FullSwing);
+#endif
+}
+
+NormalizeElement::~NormalizeElement()
+{
+    delete this->d;
 }
 
 AkPacket NormalizeElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull())
+    if (!src)
         return {};
 
-    auto oFrame = src.convertToFormat(QImage::Format_ARGB32);
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
 
-    // form histogram
-    QVector<HistogramListItem> histogram(256, HistogramListItem());
+    quint8 normTable[256];
+    NormalizeElementPrivate::normalizationTable(src, normTable);
 
-    for (int y = 0; y < oFrame.height(); y++) {
-        const QRgb *dstLine = reinterpret_cast<const QRgb *>(oFrame.constScanLine(y));
-
-        for (int x = 0; x < oFrame.width(); x++) {
-            auto pixel = dstLine[x];
-            histogram[qRed(pixel)].r++;
-            histogram[qGreen(pixel)].g++;
-            histogram[qBlue(pixel)].b++;
-            histogram[qAlpha(pixel)].a++;
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const AkYuv *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<AkYuv *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = srcLine[x];
+            auto y = qBound<int>(MIN_Y, akCompY(pixel), MAX_Y);
+            dstLine[x] = akYuv(normTable[y],
+                               akCompU(pixel),
+                               akCompV(pixel),
+                               akCompA(pixel));
         }
     }
 
-    // find the histogram boundaries by locating the .01 percent levels.
-    ShortPixel high, low;
-    auto thresholdIntensity = qint32(oFrame.width() * oFrame.height() / 1e3);
-    IntegerPixel intensity;
-
-    for (low.r = 0; low.r < 256; low.r++) {
-        intensity.r += histogram[low.r].r;
+    if (dst)
+        emit this->oStream(dst);
 
-        if (intensity.r > thresholdIntensity)
-            break;
-    }
-
-    intensity.clear();
-
-    for (high.r = 255; high.r > 0; high.r--) {
-        intensity.r += histogram[high.r].r;
-
-        if (intensity.r > thresholdIntensity)
-            break;
-    }
-
-    intensity.clear();
-
-    for (low.g = low.r; low.g < high.r; low.g++) {
-        intensity.g += histogram[low.g].g;
-
-        if (intensity.g > thresholdIntensity)
-            break;
-    }
+    return dst;
+}
 
-    intensity.clear();
+void NormalizeElementPrivate::histogram(const AkVideoPacket &src,
+                                        HistogramType *table)
+{
+    memset(table, 0, 256 * sizeof(HistogramType));
 
-    for (high.g = high.r; high.g != low.r; high.g--) {
-        intensity.g += histogram[high.g].g;
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const AkYuv *>(src.constLine(0, y));
 
-        if (intensity.g > thresholdIntensity)
-            break;
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = srcLine[x];
+            auto y = qBound<int>(MIN_Y, akCompY(pixel), MAX_Y);
+            table[y]++;
+        }
     }
+}
 
-    intensity.clear();
+void NormalizeElementPrivate::limits(const AkVideoPacket &src,
+                                     const HistogramType *histogram,
+                                     int &low, int &high)
+{
+    // The lowest and highest levels must occupy at least 0.1 % of the image.
+    auto thresholdIntensity =
+            size_t(src.caps().width()) * size_t(src.caps().height()) / 1000;
+    int intensity = 0;
 
-    for (low.b = low.g; low.b < high.g; low.b++) {
-        intensity.b += histogram[low.b].b;
+    for (low = 0; low < 256; low++) {
+        intensity += histogram[low];
 
-        if (intensity.b > thresholdIntensity)
+        if (intensity > thresholdIntensity)
             break;
     }
 
-    intensity.clear();
+    intensity = 0;
 
-    for (high.b = high.g; high.b != low.g; high.b--) {
-        intensity.b += histogram[high.b].b;
+    for (high = 255; high > 0; high--) {
+        intensity += histogram[high];
 
-        if (intensity.b > thresholdIntensity)
+        if (intensity > thresholdIntensity)
             break;
     }
+}
 
-    // stretch the histogram to create the normalized image mapping.
-    QVector<IntegerPixel> normalizeMap(256);
-
-    for (int i = 0; i < 256; i++) {
-        if(i < low.r)
-            normalizeMap[i].r = 0;
-        else {
-            if (i > high.r)
-                normalizeMap[i].r = 255;
-            else if (low.r != high.r)
-                normalizeMap[i].r = (255 * (i - low.r)) /
-                    (high.r - low.r);
-        }
-
-        if (i < low.g)
-            normalizeMap[i].g = 0;
-        else {
-            if(i > high.g)
-                normalizeMap[i].g = 255;
-            else if(low.g != high.g)
-                normalizeMap[i].g = (255 * (i - low.g)) /
-                    (high.g - low.g);
-        }
-
-        if (i < low.b)
-            normalizeMap[i].b = 0;
-        else {
-            if (i > high.b)
-                normalizeMap[i].b = 255;
-            else if (low.b != high.b)
-                normalizeMap[i].b = (255*(i-low.b)) /
-                    (high.b - low.b);
-        }
-    }
-
-    // write
-    for (int y = 0; y < oFrame.height(); y++) {
-        auto oLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-
-        for (int x = 0; x < oFrame.width(); x++) {
-            auto pixel = oLine[x];
-
-            int r = (low.r != high.r)? normalizeMap[qRed(pixel)].r:
-                    qRed(pixel);
-
-            int g = (low.g != high.g)? normalizeMap[qGreen(pixel)].g:
-                        qGreen(pixel);
-
-            int b = (low.b != high.b)?  normalizeMap[qBlue(pixel)].b:
-                        qBlue(pixel);
-
-            oLine[x] = qRgba(r, g, b, qAlpha(pixel));
+void NormalizeElementPrivate::normalizationTable(const AkVideoPacket &src,
+                                                 quint8 *table)
+{
+    HistogramType histogram[256];
+    NormalizeElementPrivate::histogram(src, histogram);
+    int low = 0;
+    int high = 0;
+    NormalizeElementPrivate::limits(src, histogram, low, high);
+
+    if (low == high) {
+        for (int i = 0; i < 256; i++)
+            table[i] = i;
+    } else {
+        auto yDiff = MAX_Y - MIN_Y;
+        auto q = high - low;
+
+        for (int i = 0; i < 256; i++) {
+            auto value = (yDiff * (i - low) + q * MIN_Y) / q;
+            table[i] = quint8(qBound<int>(MIN_Y, value, MAX_Y));
         }
     }
-
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
 }
 
 #include "moc_normalizeelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Normalize/src/normalizeelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Normalize/src/normalizeelement.h
@@ -22,15 +22,21 @@
 
 #include <akelement.h>
 
+class NormalizeElementPrivate;
+
 class NormalizeElement: public AkElement
 {
     Q_OBJECT
 
     public:
         NormalizeElement();
+        ~NormalizeElement();
+
+    private:
+        NormalizeElementPrivate *d;
 
     protected:
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 };
 
 #endif // NORMALIZEELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Normalize/src/pixelstructs.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef PIXELSTRUCTS_H
-#define PIXELSTRUCTS_H
-
-#include <qglobal.h>
-
-template<typename T>
-struct Pixel
-{
-    T r;
-    T g;
-    T b;
-    T a;
-
-    inline Pixel(T r=0, T g=0, T b=0, T a=0):
-        r(r), g(g), b(b), a(a)
-    {
-    }
-
-    inline void clear() {
-        this->r = 0;
-        this->g = 0;
-        this->b = 0;
-        this->a = 0;
-    }
-};
-
-// These are used as accumulators
-typedef Pixel<qint32> IntegerPixel;
-typedef Pixel<quint32> UIntegerPixel;
-typedef Pixel<quint16> ShortPixel;
-typedef Pixel<quint8> CharPixel;
-typedef IntegerPixel HistogramListItem;
-
-#endif // PIXELSTRUCTS_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/OilPaint/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/OilPaint/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(OilPaint
 target_compile_definitions(OilPaint PRIVATE AVKYS_PLUGIN_OILPAINT)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(OilPaint avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS OilPaint RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/OilPaint/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/OilPaint/share/qml/main.qml
@@ -22,20 +22,40 @@ import QtQuick.Controls 2.5
 import QtQuick.Layouts 1.3
 
 GridLayout {
-    columns: 2
+    columns: 3
+
+    Connections {
+        target: OilPaint
+
+        function onRadiusChanged(radius)
+        {
+            sldRadius.value = radius
+            spbRadius.value = radius
+        }
+    }
 
     Label {
+        id: lblRadius
         text: qsTr("Radius")
     }
-    TextField {
-        text: OilPaint.radius
-        placeholderText: qsTr("Radius")
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /\d+/
-        }
+    Slider {
+        id: sldRadius
+        value: OilPaint.radius
+        stepSize: 1
+        to: 10
         Layout.fillWidth: true
+        Accessible.name: lblRadius.text
+
+        onValueChanged: OilPaint.radius = value
+    }
+    SpinBox {
+        id: spbRadius
+        value: OilPaint.radius
+        to: sldRadius.to
+        stepSize: sldRadius.stepSize
+        editable: true
+        Accessible.name: lblRadius.text
 
-        onTextChanged: OilPaint.radius = Number(text)
+        onValueChanged: OilPaint.radius = Number(value)
     }
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/OilPaint/src/oilpaint.h
+++ webcamoid-9.0.0/libAvKys/Plugins/OilPaint/src/oilpaint.h
@@ -29,8 +29,8 @@ class OilPaint: public QObject, public A
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // OILPAINT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/OilPaint/src/oilpaintelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/OilPaint/src/oilpaintelement.cpp
@@ -17,9 +17,12 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "oilpaintelement.h"
@@ -28,6 +31,7 @@ class OilPaintElementPrivate
 {
     public:
         int m_radius {2};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 };
 
 OilPaintElement::OilPaintElement(): AkElement()
@@ -63,44 +67,42 @@ void OilPaintElement::controlInterfaceCo
 
 AkPacket OilPaintElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull())
-        return AkPacket();
+    if (!src)
+        return {};
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
 
     int radius = qMax(this->d->m_radius, 1);
-    QImage oFrame(src.size(), src.format());
-    int histogram[256];
     int scanBlockLen = (radius << 1) + 1;
-    QVector<const QRgb *> scanBlock(scanBlockLen);
-
-    for (int y = 0; y < src.height(); y++) {
-        QRgb *oLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
+    const QRgb *scanBlock[scanBlockLen];
+    int histogram[256];
 
+    for (int y = 0; y < src.caps().height(); y++) {
         for (int j = 0, pos = y - radius; j < scanBlockLen; j++, pos++) {
-            int yp = qBound(0, pos, src.height() - 1);
-            scanBlock[j] = reinterpret_cast<const QRgb *>(src.constScanLine(yp));
+            int yp = qBound(0, pos, src.caps().height() - 1);
+            scanBlock[j] = reinterpret_cast<const QRgb *>(src.constLine(0, yp));
         }
 
-        for (int x = 0; x < src.width(); x++) {
-            int minI = x - radius;
-            int maxI = x + radius + 1;
+        auto oLine = reinterpret_cast<QRgb *>(dst.line(0, y));
 
-            if (minI < 0)
-                minI = 0;
-
-            if (maxI > src.width())
-                maxI = src.width();
+        for (int x = 0; x < src.caps().width(); x++) {
+            int minI = qMax(x - radius, 0);
+            int maxI = qMin(x + radius + 1, src.caps().width());
 
             memset(histogram, 0, 256 * sizeof(int));
             int max = 0;
             QRgb oPixel = 0;
 
-            for (int j = 0; j < scanBlockLen; j++)
+            for (int j = 0; j < scanBlockLen; j++) {
+                auto line = scanBlock[j];
+
                 for (int i = minI; i < maxI; i++) {
-                    QRgb pixel = scanBlock[j][i];
+                    auto &pixel = line[i];
                     int value = ++histogram[qGray(pixel)];
 
                     if (value > max) {
@@ -108,13 +110,16 @@ AkPacket OilPaintElement::iVideoStream(c
                         oPixel = pixel;
                     }
                 }
+            }
 
             oLine[x] = oPixel;
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void OilPaintElement::setRadius(int radius)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/OilPaint/src/oilpaintelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/OilPaint/src/oilpaintelement.h
@@ -43,10 +43,10 @@ class OilPaintElement: public AkElement
         OilPaintElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void radiusChanged(int radius);
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Opacity/CMakeLists.txt
@@ -0,0 +1,67 @@
+# Webcamoid, webcam capture application.
+# Copyright (C) 2022  Gonzalo Exequiel Pedone
+#
+# Webcamoid is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Webcamoid is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+#
+# Web-Site: http://webcamoid.github.io/
+
+cmake_minimum_required(VERSION 3.16)
+
+project(Opacity LANGUAGES CXX)
+
+include(../../cmake/ProjectCommons.cmake)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+
+set(QT_COMPONENTS
+    Gui
+    Qml)
+find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS
+             ${QT_COMPONENTS}
+             REQUIRED)
+find_package(Qt${QT_VERSION_MAJOR} ${QT_MINIMUM_VERSION} COMPONENTS
+             ${QT_COMPONENTS}
+             REQUIRED)
+add_library(Opacity SHARED
+            src/opacity.h
+            src/opacityelement.h
+            src/opacity.cpp
+            src/opacityelement.cpp
+            Opacity.qrc
+            pspec.json)
+
+if (WIN32)
+    set_target_properties(Opacity PROPERTIES
+                          RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
+elseif (NOT ANDROID)
+    set_target_properties(Opacity PROPERTIES
+                          LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
+endif ()
+
+add_dependencies(Opacity avkys)
+target_include_directories(Opacity
+                           PRIVATE ../../Lib/src)
+target_compile_definitions(Opacity PRIVATE AVKYS_PLUGIN_OPACITY)
+list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
+target_link_libraries(Opacity avkys ${QT_LIBS})
+set(QML_IMPORT_PATH ../../Lib/share/qml)
+
+if (WIN32)
+    install(TARGETS Opacity RUNTIME DESTINATION ${PLUGINSDIR})
+elseif (NOT ANDROID)
+    install(TARGETS Opacity DESTINATION ${PLUGINSDIR})
+endif ()
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Opacity/Opacity.qrc
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/Opacity">
+        <file>share/qml/main.qml</file>
+    </qresource>
+</RCC>
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Opacity/pspec.json
@@ -0,0 +1,12 @@
+{
+    "type": "WebcamoidPluginsCollection",
+    "plugins": [
+        {
+            "name": "Opacity",
+            "description": "Opacity",
+            "id": "VideoFilter/Opacity",
+            "implements": ["Element", "VideoFilter"],
+            "type": "qtplugin"
+        }
+    ]
+}
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Opacity/share/qml/main.qml
@@ -0,0 +1,75 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+import QtQuick 2.12
+import QtQuick.Controls 2.5
+import QtQuick.Layouts 1.3
+import Ak 1.0
+
+GridLayout {
+    columns: 3
+
+    Connections {
+        target: Opacity
+
+        function onOpacityChanged(opacity)
+        {
+            sldOpacity.value = opacity
+            spbOpacity.value = opacity * spbOpacity.multiplier
+        }
+    }
+
+    Label {
+        id: lblOpacity
+        text: qsTr("Opacity")
+    }
+    Slider {
+        id: sldOpacity
+        value: Opacity.opacity
+        stepSize: 0.01
+        to: 1
+        Layout.fillWidth: true
+        Accessible.name: lblOpacity.text
+
+        onValueChanged: Opacity.opacity = value
+    }
+    SpinBox {
+        id: spbOpacity
+        value: multiplier * Opacity.opacity
+        to: multiplier * sldOpacity.to
+        stepSize: multiplier * sldOpacity.stepSize
+        editable: true
+        Accessible.name: lblOpacity.text
+
+        readonly property int decimals: 2
+        readonly property int multiplier: Math.pow(10, decimals)
+
+        validator: DoubleValidator {
+            bottom: Math.min(spbOpacity.from, spbOpacity.to)
+            top:  Math.max(spbOpacity.from, spbOpacity.to)
+        }
+        textFromValue: function(value, locale) {
+            return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
+        }
+        valueFromText: function(text, locale) {
+            return Number.fromLocaleString(locale, text) * multiplier
+        }
+        onValueModified: Opacity.opacity = value / multiplier
+    }
+}
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Opacity/src/opacity.cpp
@@ -0,0 +1,36 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include "opacity.h"
+#include "opacityelement.h"
+
+QObject *Opacity::create(const QString &key, const QString &specification)
+{
+    Q_UNUSED(key)
+    Q_UNUSED(specification)
+
+    return new OpacityElement();
+}
+
+QStringList Opacity::keys() const
+{
+    return {};
+}
+
+#include "moc_opacity.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Opacity/src/opacity.h
@@ -0,0 +1,36 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef OPACITY_H
+#define OPACITY_H
+
+#include <akplugin.h>
+
+class Opacity: public QObject, public AkPlugin
+{
+    Q_OBJECT
+    Q_INTERFACES(AkPlugin)
+    Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
+
+    public:
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
+};
+
+#endif // OPACITY_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Opacity/src/opacityelement.cpp
@@ -0,0 +1,118 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QQmlContext>
+#include <qrgb.h>
+#include <akfrac.h>
+#include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
+#include <akvideopacket.h>
+
+#include "opacityelement.h"
+
+class OpacityElementPrivate
+{
+    public:
+        qreal m_opacity {1.0};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+};
+
+OpacityElement::OpacityElement(): AkElement()
+{
+    this->d = new OpacityElementPrivate;
+}
+
+OpacityElement::~OpacityElement()
+{
+    delete this->d;
+}
+
+qreal OpacityElement::opacity() const
+{
+    return this->d->m_opacity;
+}
+
+QString OpacityElement::controlInterfaceProvide(const QString &controlId) const
+{
+    Q_UNUSED(controlId)
+
+    return QString("qrc:/Opacity/share/qml/main.qml");
+}
+
+void OpacityElement::controlInterfaceConfigure(QQmlContext *context,
+                                              const QString &controlId) const
+{
+    Q_UNUSED(controlId)
+
+    context->setContextProperty("Opacity", const_cast<QObject *>(qobject_cast<const QObject *>(this)));
+    context->setContextProperty("controlId", this->objectName());
+}
+
+AkPacket OpacityElement::iVideoStream(const AkVideoPacket &packet)
+{
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    auto opacity = qRound(256 * this->d->m_opacity);
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto iLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto oLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = iLine[x];
+
+            auto r = qRed(pixel);
+            auto g = qGreen(pixel);
+            auto b = qBlue(pixel);
+            auto a = (opacity * qAlpha(pixel)) >> 8;
+
+            oLine[x] = qRgba(r, g, b, a);
+        }
+    }
+
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
+}
+
+void OpacityElement::setOpacity(qreal opacity)
+{
+    if (qFuzzyCompare(this->d->m_opacity, opacity))
+        return;
+
+    this->d->m_opacity = opacity;
+    emit this->opacityChanged(opacity);
+}
+
+void OpacityElement::resetOpacity()
+{
+    this->setOpacity(1.0);
+}
+
+#include "moc_opacityelement.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Opacity/src/opacityelement.h
@@ -0,0 +1,59 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef OPACITYELEMENT_H
+#define OPACITYELEMENT_H
+
+#include <akelement.h>
+
+class OpacityElementPrivate;
+
+class OpacityElement: public AkElement
+{
+    Q_OBJECT
+    Q_PROPERTY(qreal opacity
+               READ opacity
+               WRITE setOpacity
+               RESET resetOpacity
+               NOTIFY opacityChanged)
+
+    public:
+        OpacityElement();
+        ~OpacityElement();
+
+        Q_INVOKABLE qreal opacity() const;
+
+    private:
+        OpacityElementPrivate *d;
+
+    protected:
+        QString controlInterfaceProvide(const QString &controlId) const override;
+        void controlInterfaceConfigure(QQmlContext *context,
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
+
+    signals:
+        void opacityChanged(qreal opacity);
+
+    public slots:
+        void setOpacity(qreal opacity);
+        void resetOpacity();
+};
+
+#endif // OPACITYELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Otsu/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Otsu/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Otsu
 target_compile_definitions(Otsu PRIVATE AVKYS_PLUGIN_OTSU)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Otsu avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Otsu RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Otsu/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Otsu/share/qml/main.qml
@@ -46,6 +46,7 @@ GridLayout {
         from: 2
         to: 4
         Layout.fillWidth: true
+        Accessible.name: lblLevels.text
 
         onValueChanged: Otsu.levels = value
     }
@@ -56,6 +57,7 @@ GridLayout {
         to: sldLevels.to
         stepSize: sldLevels.stepSize
         editable: true
+        Accessible.name: lblLevels.text
 
         onValueChanged: Otsu.levels = Number(value)
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Otsu/src/otsu.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Otsu/src/otsu.h
@@ -29,8 +29,8 @@ class Otsu: public QObject, public AkPlu
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // OTSU_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Otsu/src/otsuelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Otsu/src/otsuelement.cpp
@@ -17,21 +17,25 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
-#include <QtMath>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "otsuelement.h"
 
+using HistogramType = quint64;
+
 class OtsuElementPrivate
 {
     public:
         int m_levels {2};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_graya8pack, 0, 0, {}}};
 
-        QVector<int> histogram(const QImage &image) const;
-        QVector<qreal> buildTables(const QVector<int> &histogram) const;
+        QVector<HistogramType> histogram(const AkVideoPacket &src) const;
+        QVector<qreal> buildTables(const QVector<HistogramType> &histogram) const;
         void forLoop(qreal *maxSum,
                      QVector<int> *thresholds,
                      const QVector<qreal> &H,
@@ -40,10 +44,11 @@ class OtsuElementPrivate
                      int level,
                      int levels,
                      QVector<int> *index) const;
-        QVector<int> otsu(QVector<int> histogram, int classes) const;
-        QImage threshold(const QImage &src,
-                         const QVector<int> &thresholds,
-                         const QVector<int> &colors) const;
+        QVector<int> otsu(const QVector<HistogramType> &histogram,
+                          int classes) const;
+        AkVideoPacket threshold(const AkVideoPacket &src,
+                                const QVector<int> &thresholds,
+                                int levels) const;
 };
 
 OtsuElement::OtsuElement():
@@ -80,31 +85,22 @@ void OtsuElement::controlInterfaceConfig
 
 AkPacket OtsuElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_Grayscale8);
-    int levels = this->d->m_levels;
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (levels < 2)
-        levels = 2;
+    if (!src)
+        return {};
 
+    int levels = qMax(this->d->m_levels, 2);
     auto hist = this->d->histogram(src);
     auto thresholds = this->d->otsu(hist, levels);
-    QVector<int> colors(levels);
-
-    for (int i = 0; i < levels; i++)
-        colors[i] = 255 * i / (levels - 1);
-
-    auto oFrame = this->d->threshold(src, thresholds, colors);
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
+    auto dst = this->d->threshold(src, thresholds, levels);
 
-    if (oPacket)
-        emit this->oStream(oPacket);
+    if (dst)
+        emit this->oStream(dst);
 
-    return oPacket;
+    return dst;
 }
 
 void OtsuElement::setLevels(int levels)
@@ -121,25 +117,21 @@ void OtsuElement::resetLevels()
     this->setLevels(5);
 }
 
-QVector<int> OtsuElementPrivate::histogram(const QImage &image) const
+QVector<HistogramType> OtsuElementPrivate::histogram(const AkVideoPacket &src) const
 {
-    QVector<int> histogram(256, 0);
+    QVector<HistogramType> histogram(256, 0);
 
-    for (int y = 0; y < image.height(); y++) {
-        auto line = reinterpret_cast<const quint8 *>(image.constScanLine(y));
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const quint16 *>(src.constLine(0, y));
 
-        for (int x = 0; x < image.width(); x++)
-            histogram[line[x]]++;
+        for (int x = 0; x < src.caps().width(); x++)
+            histogram[srcLine[x] >> 8]++;
     }
 
-    // Since we use sum tables add one more to avoid unexistent colors.
-    for (int i = 0; i < histogram.size(); i++)
-        histogram[i]++;
-
     return histogram;
 }
 
-QVector<qreal> OtsuElementPrivate::buildTables(const QVector<int> &histogram) const
+QVector<qreal> OtsuElementPrivate::buildTables(const QVector<HistogramType> &histogram) const
 {
     // Create cumulative sum tables.
     QVector<quint64> P(histogram.size() + 1);
@@ -164,7 +156,12 @@ QVector<qreal> OtsuElementPrivate::build
         auto hLine = H.data() + u * histogram.size();
 
         for (int v = u + 1; v < histogram.size(); v++)
-            hLine[v] = qPow(S[v] - S[u], 2) / (P[v] - P[u]);
+            if (P[v] == P[u]) {
+                hLine[v] = 0;
+            } else {
+                auto sDiff = S[v] - S[u];
+                hLine[v] = sDiff * sDiff / (P[v] - P[u]);
+            }
     }
 
     return H;
@@ -214,7 +211,7 @@ void OtsuElementPrivate::forLoop(qreal *
     }
 }
 
-QVector<int> OtsuElementPrivate::otsu(QVector<int> histogram,
+QVector<int> OtsuElementPrivate::otsu(const QVector<HistogramType> &histogram,
                                       int classes) const
 {
     qreal maxSum = 0.;
@@ -235,27 +232,30 @@ QVector<int> OtsuElementPrivate::otsu(QV
     return thresholds;
 }
 
-QImage OtsuElementPrivate::threshold(const QImage &src,
-                                     const QVector<int> &thresholds,
-                                     const QVector<int> &colors) const
-{
-    QImage dst(src.size(), src.format());
-    QVector<quint8> colorTable(256);
+AkVideoPacket OtsuElementPrivate::threshold(const AkVideoPacket &src,
+                                            const QVector<int> &thresholds,
+                                            int levels) const
+{
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+    quint8 colorTable[256];
     int j = 0;
 
-    for (int i = 0; i < colorTable.size(); i++) {
-        if (j < thresholds.size() && i >= thresholds[j])
+    for (int i = 0; i < 256; i++) {
+        if (j < levels - 1 && i >= thresholds[j])
             j++;
 
-        colorTable[i] = quint8(colors[j]);
+        colorTable[i] = 255 * j / (levels - 1);
     }
 
-    for (int y = 0; y < src.height(); y++) {
-        auto srcLine = src.constScanLine(y);
-        auto dstLine = dst.scanLine(y);
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const quint16 *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<quint16 *>(dst.line(0, y));
 
-        for (int x = 0; x < src.width(); x++)
-            dstLine[x] = colorTable[srcLine[x]];
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = srcLine[x];
+            dstLine[x] = (colorTable[pixel >> 8] << 8) | (pixel & 0xff);
+        }
     }
 
     return dst;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Otsu/src/otsuelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Otsu/src/otsuelement.h
@@ -43,10 +43,10 @@ class OtsuElement: public AkElement
         OtsuElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void levelsChanged(int levels);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Photocopy/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Photocopy/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Photocopy
 target_compile_definitions(Photocopy PRIVATE AVKYS_PLUGIN_PHOTOCOPY)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Photocopy avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Photocopy RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Photocopy/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Photocopy/share/qml/main.qml
@@ -22,34 +22,71 @@ import QtQuick.Controls 2.5
 import QtQuick.Layouts 1.3
 
 GridLayout {
-    columns: 2
+    columns: 3
+
+    Connections {
+        target: Photocopy
+
+        function onBrightness(brightness)
+        {
+            sldBrightness.value = brightness
+            spbBrightness.value = brightness
+        }
+
+        function onContrast(contrast)
+        {
+            sldContrast.value = contrast
+            spbContrast.value = contrast
+        }
+    }
 
     Label {
+        id: txtBrightness
         text: qsTr("Brightness")
     }
-    TextField {
-        text: Photocopy.brightness
-        placeholderText: qsTr("Brightness")
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
-        }
+    Slider {
+        id: sldBrightness
+        value: Photocopy.brightness
+        stepSize: 1
+        to: 256
         Layout.fillWidth: true
+        Accessible.name: txtBrightness.text
 
-        onTextChanged: Photocopy.brightness = Number(text)
+        onValueChanged: Photocopy.brightness = value
     }
+    SpinBox {
+        id: spbBrightness
+        value: Photocopy.brightness
+        to: sldBrightness.to
+        stepSize: sldBrightness.stepSize
+        editable: true
+        Accessible.name: txtBrightness.text
+
+        onValueChanged: Photocopy.brightness = Number(value)
+    }
+
     Label {
+        id: txtContrast
         text: qsTr("Contrast")
     }
-    TextField {
-        text: Photocopy.contrast
-        placeholderText: qsTr("Contrast")
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
-        }
+    Slider {
+        id: sldContrast
+        value: Photocopy.contrast
+        stepSize: 1
+        to: 256
         Layout.fillWidth: true
+        Accessible.name: txtContrast.text
+
+        onValueChanged: Photocopy.contrast = value
+    }
+    SpinBox {
+        id: spbContrast
+        value: Photocopy.contrast
+        to: sldContrast.to
+        stepSize: sldContrast.stepSize
+        editable: true
+        Accessible.name: txtContrast.text
 
-        onTextChanged: Photocopy.contrast = Number(text)
+        onValueChanged: Photocopy.contrast = Number(value)
     }
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Photocopy/src/photocopy.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Photocopy/src/photocopy.h
@@ -29,8 +29,8 @@ class Photocopy: public QObject, public
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // PHOTOCOPY_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Photocopy/src/photocopyelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Photocopy/src/photocopyelement.cpp
@@ -17,10 +17,14 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
+#include <QMutex>
 #include <QQmlContext>
 #include <QtMath>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "photocopyelement.h"
@@ -28,15 +32,20 @@
 class PhotocopyElementPrivate
 {
     public:
-        qreal m_brightness {0.75};
-        qreal m_contrast {20.0};
+        int m_brightness {191};
+        int m_contrast {20};
+        quint16 m_lumaTable[256];
+        QMutex m_mutex;
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 
-        inline static int rgbToLuma(int red, int green, int blue);
+        inline static int rgbToLuma(QRgb pixel);
+        void updateLumaTable();
 };
 
 PhotocopyElement::PhotocopyElement(): AkElement()
 {
     this->d = new PhotocopyElementPrivate;
+    this->d->updateLumaTable();
 }
 
 PhotocopyElement::~PhotocopyElement()
@@ -44,12 +53,12 @@ PhotocopyElement::~PhotocopyElement()
     delete this->d;
 }
 
-qreal PhotocopyElement::brightness() const
+int PhotocopyElement::brightness() const
 {
     return this->d->m_brightness;
 }
 
-qreal PhotocopyElement::contrast() const
+int PhotocopyElement::contrast() const
 {
     return this->d->m_contrast;
 }
@@ -72,61 +81,66 @@ void PhotocopyElement::controlInterfaceC
 
 AkPacket PhotocopyElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
-
-    for (int y = 0; y < src.height(); y++) {
-        const QRgb *srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        QRgb *dstLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++) {
-            int r = qRed(srcLine[x]);
-            int g = qGreen(srcLine[x]);
-            int b = qBlue(srcLine[x]);
-
-            //desaturate
-            int luma = PhotocopyElementPrivate::rgbToLuma(r, g, b);
-
-            //compute sigmoidal transfer
-            qreal val = luma / 255.0;
-            val = 255.0 / (1 + exp(this->d->m_contrast * (0.5 - val)));
-            val = val * this->d->m_brightness;
-            luma = int(qBound(0.0, val, 255.0));
-
-            dstLine[x] = qRgba(luma, luma, luma, qAlpha(srcLine[x]));
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    auto ocaps = src.caps();
+    ocaps.setFormat(AkVideoCaps::Format_graya8pack);
+    AkVideoPacket dst(ocaps);
+    dst.copyMetadata(src);
+
+    this->d->m_mutex.lock();
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<quint16 *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = srcLine[x];
+            int luma = PhotocopyElementPrivate::rgbToLuma(pixel);
+            dstLine[x] = (this->d->m_lumaTable[luma] << 8) | qAlpha(pixel);
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    this->d->m_mutex.unlock();
+
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
-void PhotocopyElement::setBrightness(qreal brightness)
+void PhotocopyElement::setBrightness(int brightness)
 {
-    if (qFuzzyCompare(this->d->m_brightness, brightness))
+    if (this->d->m_brightness == brightness)
         return;
 
+    this->d->m_mutex.lock();
     this->d->m_brightness = brightness;
+    this->d->updateLumaTable();
+    this->d->m_mutex.unlock();
     emit this->brightnessChanged(brightness);
 }
 
-void PhotocopyElement::setContrast(qreal contrast)
+void PhotocopyElement::setContrast(int contrast)
 {
-    if (qFuzzyCompare(this->d->m_contrast, contrast))
+    if (this->d->m_contrast == contrast)
         return;
 
+    this->d->m_mutex.lock();
     this->d->m_contrast = contrast;
+    this->d->updateLumaTable();
+    this->d->m_mutex.unlock();
     emit this->contrastChanged(contrast);
 }
 
 void PhotocopyElement::resetBrightness()
 {
-    this->setBrightness(0.75);
+    this->setBrightness(191);
 }
 
 void PhotocopyElement::resetContrast()
@@ -134,20 +148,29 @@ void PhotocopyElement::resetContrast()
     this->setContrast(20);
 }
 
-int PhotocopyElementPrivate::rgbToLuma(int red, int green, int blue)
+int PhotocopyElementPrivate::rgbToLuma(QRgb pixel)
 {
-    int min;
-    int max;
+    //desaturate
+    int r = qRed(pixel);
+    int g = qGreen(pixel);
+    int b = qBlue(pixel);
 
-    if (red > green) {
-        max = qMax(red, blue);
-        min = qMin(green, blue);
-    } else {
-        max = qMax(green, blue);
-        min = qMin(red, blue);
-    }
+    int min = qMin(r, qMin(g, b));
+    int max = qMax(r, qMax(g, b));
+
+    return (max + min) >> 1;
+}
 
-    return qRound((max + min) / 2.0);
+void PhotocopyElementPrivate::updateLumaTable()
+{
+    //compute sigmoidal transfer
+    auto brightness = qBound(0, this->m_brightness, 255);
+    auto contrast = qBound(0, this->m_contrast, 255);
+
+    for (int i = 0; i < 256; i++) {
+        int val = qRound(brightness / (1.0 + qExp(contrast * (127 - i) / 255)));
+        this->m_lumaTable[i] = qBound(0, val, 255);
+    }
 }
 
 #include "moc_photocopyelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Photocopy/src/photocopyelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Photocopy/src/photocopyelement.h
@@ -27,12 +27,12 @@ class PhotocopyElementPrivate;
 class PhotocopyElement: public AkElement
 {
     Q_OBJECT
-    Q_PROPERTY(qreal brightness
+    Q_PROPERTY(int brightness
                READ brightness
                WRITE setBrightness
                RESET resetBrightness
                NOTIFY brightnessChanged)
-    Q_PROPERTY(qreal contrast
+    Q_PROPERTY(int contrast
                READ contrast
                WRITE setContrast
                RESET resetContrast
@@ -42,25 +42,25 @@ class PhotocopyElement: public AkElement
         PhotocopyElement();
         ~PhotocopyElement();
 
-        Q_INVOKABLE qreal brightness() const;
-        Q_INVOKABLE qreal contrast() const;
+        Q_INVOKABLE int brightness() const;
+        Q_INVOKABLE int contrast() const;
 
     private:
         PhotocopyElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
-        void brightnessChanged(qreal brightness);
-        void contrastChanged(qreal contrast);
+        void brightnessChanged(int brightness);
+        void contrastChanged(int contrast);
 
     public slots:
-        void setBrightness(qreal brightness);
-        void setContrast(qreal contrast);
+        void setBrightness(int brightness);
+        void setContrast(int contrast);
         void resetBrightness();
         void resetContrast();
 };
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Pixelate/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Pixelate/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Pixelate
 target_compile_definitions(Pixelate PRIVATE AVKYS_PLUGIN_PIXELATE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Pixelate avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Pixelate RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Pixelate/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Pixelate/share/qml/main.qml
@@ -38,6 +38,7 @@ GridLayout {
     }
 
     Label {
+        id: txtBlockSize
         text: qsTr("Block size")
     }
     TextField {
@@ -48,6 +49,7 @@ GridLayout {
             regExp: /\d+x\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtBlockSize.text
 
         onTextChanged: Pixelate.blockSize = strToSize(text)
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Pixelate/src/pixelate.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Pixelate/src/pixelate.h
@@ -29,8 +29,8 @@ class Pixelate: public QObject, public A
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // PIXELATE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Pixelate/src/pixelateelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Pixelate/src/pixelateelement.cpp
@@ -17,9 +17,12 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
+#include <QMutex>
 #include <QQmlContext>
+#include <QSize>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "pixelateelement.h"
@@ -27,12 +30,9 @@
 class PixelateElementPrivate
 {
     public:
-        QSize m_blockSize;
-
-        PixelateElementPrivate():
-            m_blockSize(QSize(8, 8))
-        {
-        }
+        QSize m_blockSize {8, 8};
+        QMutex m_mutex;
+        AkVideoConverter m_videoConverter;
 };
 
 PixelateElement::PixelateElement(): AkElement()
@@ -68,32 +68,31 @@ void PixelateElement::controlInterfaceCo
 
 AkPacket PixelateElement::iVideoStream(const AkVideoPacket &packet)
 {
-    QSize blockSize = this->d->m_blockSize;
-
-    if (blockSize.isEmpty())
-        akSend(packet)
-
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    QImage oFrame = src.convertToFormat(QImage::Format_ARGB32);
-
-    qreal sw = 1.0 / blockSize.width();
-    qreal sh = 1.0 / blockSize.height();
+    this->d->m_mutex.lock();
+    auto blockSize = this->d->m_blockSize;
+    this->d->m_mutex.unlock();
+
+    if (blockSize.isEmpty()) {
+        if (packet)
+            emit this->oStream(packet);
+
+        return packet;
+    }
+
+    this->d->m_videoConverter.begin();
+    auto dcaps = packet.caps();
+    dcaps.setWidth(packet.caps().width() / blockSize.width());
+    dcaps.setHeight(packet.caps().height() / blockSize.height());
+    this->d->m_videoConverter.setOutputCaps(dcaps);
+    auto downScaled = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.setOutputCaps(packet.caps());
+    auto dst = this->d->m_videoConverter.convert(downScaled);
+    this->d->m_videoConverter.end();
 
-    oFrame = oFrame.scaled(int(sw * oFrame.width()),
-                           int(sh * oFrame.height()),
-                           Qt::IgnoreAspectRatio,
-                           Qt::FastTransformation)
-                   .scaled(oFrame.width(),
-                           oFrame.height(),
-                           Qt::IgnoreAspectRatio,
-                           Qt::FastTransformation);
+    if (dst)
+        emit this->oStream(dst);
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    return dst;
 }
 
 void PixelateElement::setBlockSize(const QSize &blockSize)
@@ -101,13 +100,15 @@ void PixelateElement::setBlockSize(const
     if (blockSize == this->d->m_blockSize)
         return;
 
+    this->d->m_mutex.lock();
     this->d->m_blockSize = blockSize;
+    this->d->m_mutex.unlock();
     emit this->blockSizeChanged(blockSize);
 }
 
 void PixelateElement::resetBlockSize()
 {
-    this->setBlockSize(QSize(8, 8));
+    this->setBlockSize({8, 8});
 }
 
 #include "moc_pixelateelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Pixelate/src/pixelateelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Pixelate/src/pixelateelement.h
@@ -43,10 +43,10 @@ class PixelateElement: public AkElement
         PixelateElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void blockSizeChanged(const QSize &blockSize);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/PrimariesColors/CMakeLists.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-# Webcamoid, webcam capture application.
-# Copyright (C) 2021  Gonzalo Exequiel Pedone
-#
-# Webcamoid is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Webcamoid is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
-#
-# Web-Site: http://webcamoid.github.io/
-
-cmake_minimum_required(VERSION 3.16)
-
-project(PrimariesColors LANGUAGES CXX)
-
-include(../../cmake/ProjectCommons.cmake)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-set(CMAKE_AUTOUIC ON)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-
-set(QT_COMPONENTS
-    Gui
-    Qml)
-find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS
-             ${QT_COMPONENTS}
-             REQUIRED)
-find_package(Qt${QT_VERSION_MAJOR} ${QT_MINIMUM_VERSION} COMPONENTS
-             ${QT_COMPONENTS}
-             REQUIRED)
-add_library(PrimariesColors SHARED
-            src/primariescolors.h
-            src/primariescolorselement.h
-            src/primariescolors.cpp
-            src/primariescolorselement.cpp
-            PrimariesColors.qrc
-            pspec.json)
-
-if (WIN32)
-    set_target_properties(PrimariesColors PROPERTIES
-                          RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
-elseif (NOT ANDROID)
-    set_target_properties(PrimariesColors PROPERTIES
-                          LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
-endif ()
-
-add_dependencies(PrimariesColors avkys)
-target_include_directories(PrimariesColors
-                           PRIVATE ../../Lib/src)
-target_compile_definitions(PrimariesColors PRIVATE AVKYS_PLUGIN_PRIMARIESCOLORS)
-list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
-target_link_libraries(PrimariesColors avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
-
-if (WIN32)
-    install(TARGETS PrimariesColors RUNTIME DESTINATION ${PLUGINSDIR})
-elseif (NOT ANDROID)
-    install(TARGETS PrimariesColors DESTINATION ${PLUGINSDIR})
-endif ()
--- webcamoid-9.0.0.orig/libAvKys/Plugins/PrimariesColors/PrimariesColors.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
-    <qresource prefix="/PrimariesColors">
-        <file>share/qml/main.qml</file>
-    </qresource>
-</RCC>
--- webcamoid-9.0.0.orig/libAvKys/Plugins/PrimariesColors/pspec.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-    "type": "WebcamoidPluginsCollection",
-    "plugins": [
-        {
-            "name": "PrimariesColors",
-            "description": "Primaries Colors",
-            "id": "VideoFilter/PrimariesColors",
-            "implements": ["Element", "VideoFilter"],
-            "type": "qtplugin"
-        }
-    ]
-}
--- webcamoid-9.0.0.orig/libAvKys/Plugins/PrimariesColors/share/qml/main.qml
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-import QtQuick 2.12
-import QtQuick.Controls 2.5
-import QtQuick.Layouts 1.3
-
-GridLayout {
-    columns: 2
-
-    Label {
-        text: qsTr("Factor")
-    }
-    TextField {
-        text: PrimariesColors.factor
-        placeholderText: qsTr("Factor")
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /\d+/
-        }
-        Layout.fillWidth: true
-
-        onTextChanged: PrimariesColors.factor = Number(text)
-    }
-}
--- webcamoid-9.0.0.orig/libAvKys/Plugins/PrimariesColors/src/primariescolors.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include "primariescolors.h"
-#include "primariescolorselement.h"
-
-QObject *PrimariesColors::create(const QString &key, const QString &specification)
-{
-    Q_UNUSED(key)
-    Q_UNUSED(specification)
-
-    return new PrimariesColorsElement();
-}
-
-QStringList PrimariesColors::keys() const
-{
-    return {};
-}
-
-#include "moc_primariescolors.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/PrimariesColors/src/primariescolors.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef PRIMARIESCOLORS_H
-#define PRIMARIESCOLORS_H
-
-#include <akplugin.h>
-
-class PrimariesColors: public QObject, public AkPlugin
-{
-    Q_OBJECT
-    Q_INTERFACES(AkPlugin)
-    Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
-
-    public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
-};
-
-#endif // PRIMARIESCOLORS_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/PrimariesColors/src/primariescolorselement.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include <QImage>
-#include <QQmlContext>
-#include <akpacket.h>
-#include <akvideopacket.h>
-
-#include "primariescolorselement.h"
-
-class PrimariesColorsElementPrivate
-{
-    public:
-        int m_factor {2};
-};
-
-PrimariesColorsElement::PrimariesColorsElement(): AkElement()
-{
-    this->d = new PrimariesColorsElementPrivate;
-}
-
-PrimariesColorsElement::~PrimariesColorsElement()
-{
-    delete this->d;
-}
-
-int PrimariesColorsElement::factor() const
-{
-    return this->d->m_factor;
-}
-
-QString PrimariesColorsElement::controlInterfaceProvide(const QString &controlId) const
-{
-    Q_UNUSED(controlId)
-
-    return QString("qrc:/PrimariesColors/share/qml/main.qml");
-}
-
-void PrimariesColorsElement::controlInterfaceConfigure(QQmlContext *context,
-                                                       const QString &controlId) const
-{
-    Q_UNUSED(controlId)
-
-    context->setContextProperty("PrimariesColors", const_cast<QObject *>(qobject_cast<const QObject *>(this)));
-    context->setContextProperty("controlId", this->objectName());
-}
-
-AkPacket PrimariesColorsElement::iVideoStream(const AkVideoPacket &packet)
-{
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
-
-    int f = this->d->m_factor + 1;
-    int factor127 = (f * f - 3) * 127;
-    int factorTot = f * f;
-
-    if (factor127 < 0) {
-        factor127 = 0;
-        factorTot = 3;
-    }
-
-    for (int y = 0; y < src.height(); y++) {
-        auto srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        auto destLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++) {
-            QRgb pixel = srcLine[x];
-            int ri = qRed(pixel);
-            int gi = qGreen(pixel);
-            int bi = qBlue(pixel);
-            int mean;
-
-            if (f > 32)
-                mean = 127;
-            else
-                mean = (ri + gi + bi + factor127) / factorTot;
-
-            int r = ri > mean? 255: 0;
-            int g = gi > mean? 255: 0;
-            int b = bi > mean? 255: 0;
-
-            destLine[x] = qRgba(r, g, b, qAlpha(pixel));
-        }
-    }
-
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
-}
-
-void PrimariesColorsElement::setFactor(int factor)
-{
-    if (this->d->m_factor == factor)
-        return;
-
-    this->d->m_factor = factor;
-    emit this->factorChanged(factor);
-}
-
-void PrimariesColorsElement::resetFactor()
-{
-    this->setFactor(2);
-}
-
-#include "moc_primariescolorselement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/PrimariesColors/src/primariescolorselement.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef PRIMARIESCOLORSELEMENT_H
-#define PRIMARIESCOLORSELEMENT_H
-
-#include <akelement.h>
-
-class PrimariesColorsElementPrivate;
-
-class PrimariesColorsElement: public AkElement
-{
-    Q_OBJECT
-    Q_PROPERTY(int factor
-               READ factor
-               WRITE setFactor
-               RESET resetFactor
-               NOTIFY factorChanged)
-
-    public:
-        PrimariesColorsElement();
-        ~PrimariesColorsElement();
-
-        Q_INVOKABLE int factor() const;
-
-    private:
-        PrimariesColorsElementPrivate *d;
-
-    protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
-        void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
-
-    signals:
-        void factorChanged(int factor);
-
-    public slots:
-        void setFactor(int factor);
-        void resetFactor();
-};
-
-#endif // PRIMARIESCOLORSELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Quark/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Quark/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Quark
 target_compile_definitions(Quark PRIVATE AVKYS_PLUGIN_QUARK)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Quark avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Quark RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Quark/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Quark/share/qml/main.qml
@@ -25,16 +25,18 @@ GridLayout {
     columns: 2
 
     Label {
-        text: qsTr("N° of frames")
+        id: txtNumberOfFrames
+        text: qsTr("Number of frames")
     }
     TextField {
         text: Quark.nFrames
-        placeholderText: qsTr("N° of frames")
+        placeholderText: qsTr("Number of frames")
         selectByMouse: true
         validator: RegExpValidator {
             regExp: /\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtNumberOfFrames.text
 
         onTextChanged: Quark.nFrames = Number(text)
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Quark/src/quark.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Quark/src/quark.h
@@ -29,8 +29,8 @@ class Quark: public QObject, public AkPl
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // QUARK_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Quark/src/quarkelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Quark/src/quarkelement.cpp
@@ -17,11 +17,14 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QDateTime>
-#include <QImage>
 #include <QQmlContext>
 #include <QRandomGenerator>
+#include <QSize>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "quarkelement.h"
@@ -29,9 +32,10 @@
 class QuarkElementPrivate
 {
     public:
-        QVector<QImage> m_frames;
+        QVector<AkVideoPacket> m_frames;
         QSize m_frameSize;
         int m_nFrames {16};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 };
 
 QuarkElement::QuarkElement(): AkElement()
@@ -66,37 +70,42 @@ void QuarkElement::controlInterfaceConfi
 
 AkPacket QuarkElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull())
-        return AkPacket();
+    if (!src)
+        return {};
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
+    QSize frameSize(src.caps().width(), src.caps().height());
 
-    if (src.size() != this->d->m_frameSize) {
+    if (frameSize != this->d->m_frameSize) {
         this->d->m_frames.clear();
-        this->d->m_frameSize = src.size();
+        this->d->m_frameSize = frameSize;
     }
 
-    int nFrames = this->d->m_nFrames > 0? this->d->m_nFrames: 1;
-    this->d->m_frames << src.copy();
-    int diff = this->d->m_frames.size() - nFrames;
+    this->d->m_frames << src;
+    int diff = this->d->m_frames.size() - qMax(this->d->m_nFrames, 1);
 
     for (int i = 0; i < diff; i++)
         this->d->m_frames.removeFirst();
 
-    for (int y = 0; y < src.height(); y++) {
-        QRgb *dstLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
 
-        for (int x = 0; x < src.width(); x++) {
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
             int frame = QRandomGenerator::global()->bounded(this->d->m_frames.size());
-            dstLine[x] = this->d->m_frames[frame].pixel(x, y);
+            dstLine[x] = this->d->m_frames[frame].pixel<QRgb>(0, x, y);
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void QuarkElement::setNFrames(int nFrames)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Quark/src/quarkelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Quark/src/quarkelement.h
@@ -43,10 +43,10 @@ class QuarkElement: public AkElement
         QuarkElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void nFramesChanged(int nFrames);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Radioactive/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Radioactive/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Radioactive
 target_compile_definitions(Radioactive PRIVATE AVKYS_PLUGIN_RADIOACTIVE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Radioactive avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Radioactive RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Radioactive/pspec.json
+++ webcamoid-9.0.0/libAvKys/Plugins/Radioactive/pspec.json
@@ -6,7 +6,10 @@
             "description": "Radioactivity",
             "id": "VideoFilter/Radioactive",
             "implements": ["Element", "VideoFilter"],
-            "depends": ["VideoFilter/Blur"],
+            "depends": [
+                "VideoFilter/Blur",
+                "VideoFilter/Zoom"
+            ],
             "type": "qtplugin"
         }
     ]
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Radioactive/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Radioactive/share/qml/main.qml
@@ -22,9 +22,10 @@ import QtQuick.Controls 2.5
 import QtQuick.Layouts 1.3
 import Ak 1.0
 import AkControls 1.0 as AK
+import RadioactiveElement 1.0
 
 GridLayout {
-    columns: 2
+    columns: 3
 
     function modeIndex(mode)
     {
@@ -39,81 +40,162 @@ GridLayout {
         return index
     }
 
+    Connections {
+        target: Radioactive
+
+        function onBlurChanged(blur)
+        {
+            sldBlur.value = blur
+            spbBlur.value = blur
+        }
+
+        function onZoomChanged(zoom)
+        {
+            sldZoom.value = zoom
+            spbZoom.value = zoom * spbZoom.multiplier
+        }
+
+        function onThresholdChanged(threshold)
+        {
+            sldThreshold.value = threshold
+            spbThreshold.value = threshold
+        }
+
+        function onLumaThresholdChanged(lumaThreshold)
+        {
+            sldLumaThreshold.value = lumaThreshold
+            spbLumaThreshold.value = lumaThreshold
+        }
+
+        function onAlphaDiffChanged(alphaDiff)
+        {
+            sldAlphaDiff.value = alphaDiff
+            spbAlphaDiff.value = alphaDiff
+        }
+    }
+
     Label {
+        id: txtMode
         text: qsTr("Mode")
     }
     ComboBox {
         id: cbxMode
         textRole: "text"
         currentIndex: modeIndex(Radioactive.mode)
+        Layout.columnSpan: 2
         Layout.fillWidth: true
+        Accessible.description: txtMode.text
 
         model: ListModel {
             ListElement {
-                text: qsTr("Soft normal")
-                mode: "softNormal"
+                text: qsTr("Hard color")
+                mode: RadioactiveElement.RadiationModeHardColor
             }
             ListElement {
                 text: qsTr("Hard normal")
-                mode: "hardNormal"
+                mode: RadioactiveElement.RadiationModeHardNormal
             }
             ListElement {
                 text: qsTr("Soft color")
-                mode: "softColor"
+                mode: RadioactiveElement.RadiationModeSoftColor
             }
             ListElement {
-                text: qsTr("Hard color")
-                mode: "hardColor"
+                text: qsTr("Soft normal")
+                mode: RadioactiveElement.RadiationModeSoftNormal
             }
         }
 
         onCurrentIndexChanged: Radioactive.mode = cbxMode.model.get(currentIndex).mode
     }
-
     Label {
+        id: txtBlur
         text: qsTr("Blur")
     }
-    TextField {
-        text: Radioactive.blur
-        placeholderText: qsTr("Blur")
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /\d+/
-        }
+    Slider {
+        id: sldBlur
+        value: Radioactive.blur
+        stepSize: 1
+        to: 128
         Layout.fillWidth: true
+        Accessible.name: txtBlur.text
+
+        onValueChanged: Radioactive.blur = value
+    }
+    SpinBox {
+        id: spbBlur
+        value: Radioactive.blur
+        to: sldBlur.to
+        stepSize: sldBlur.stepSize
+        editable: true
+        Accessible.name: txtBlur.text
 
-        onTextChanged: Radioactive.blur = Number(text)
+        onValueChanged: Radioactive.blur = Number(value)
     }
     Label {
+        id: txtZoom
         text: qsTr("Zoom")
     }
-    TextField {
-        text: Radioactive.zoom
-        placeholderText: qsTr("Zoom")
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /\d+\.\d+|\d+\.|\.\d+|\d+/
-        }
+    Slider {
+        id: sldZoom
+        value: Radioactive.zoom
+        stepSize: 0.1
+        from: 1.0
+        to: 10.0
         Layout.fillWidth: true
+        Accessible.name: txtZoom.text
+
+        onValueChanged: Radioactive.zoom = value
+    }
+    SpinBox {
+        id: spbZoom
+        value: multiplier * Radioactive.zoom
+        from: multiplier * sldZoom.from
+        to: multiplier * sldZoom.to
+        stepSize: multiplier * sldZoom.stepSize
+        editable: true
+        Accessible.name: txtZoom.text
+
+        readonly property int decimals: 1
+        readonly property int multiplier: Math.pow(10, decimals)
 
-        onTextChanged: Radioactive.zoom = Number(text)
+        validator: DoubleValidator {
+            bottom: Math.min(spbZoom.from, spbZoom.to)
+            top:  Math.max(spbZoom.from, spbZoom.to)
+        }
+        textFromValue: function(value, locale) {
+            return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
+        }
+        valueFromText: function(text, locale) {
+            return Number.fromLocaleString(locale, text) * multiplier
+        }
+        onValueModified: Radioactive.zoom = value / multiplier
     }
     Label {
+        id: txtThreshold
         text: qsTr("Threshold")
     }
-    TextField {
-        text: Radioactive.threshold
-        placeholderText: qsTr("Threshold")
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /\d+/
-        }
+    Slider {
+        id: sldThreshold
+        value: Radioactive.threshold
+        stepSize: 1
+        to: 255
         Layout.fillWidth: true
+        Accessible.name: txtThreshold.text
 
-        onTextChanged: Radioactive.threshold = Number(text)
+        onValueChanged: Radioactive.threshold = value
+    }
+    SpinBox {
+        id: spbThreshold
+        value: Radioactive.threshold
+        to: sldThreshold.to
+        stepSize: sldThreshold.stepSize
+        editable: true
+        Accessible.name: txtThreshold.text
+
+        onValueChanged: Radioactive.threshold = Number(value)
     }
     Label {
-        id: lumaLabel
+        id: txtLumaThreshold
         /*: Minimum luminance/light/white level/intensity in a gray or black and
             white picture.
 
@@ -121,49 +203,67 @@ GridLayout {
          */
         text: qsTr("Luma threshold")
     }
-    TextField {
-        text: Radioactive.lumaThreshold
-        placeholderText: lumaLabel.text
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /\d+/
-        }
+    Slider {
+        id: sldLumaThreshold
+        value: Radioactive.lumaThreshold
+        stepSize: 1
+        to: 255
         Layout.fillWidth: true
+        Accessible.name: txtLumaThreshold.text
 
-        onTextChanged: Radioactive.lumaThreshold = Number(text)
+        onValueChanged: Radioactive.lumaThreshold = value
+    }
+    SpinBox {
+        id: spbLumaThreshold
+        value: Radioactive.lumaThreshold
+        to: sldLumaThreshold.to
+        stepSize: sldLumaThreshold.stepSize
+        editable: true
+        Accessible.name: txtLumaThreshold.text
+
+        onValueChanged: Radioactive.lumaThreshold = Number(value)
     }
     Label {
-        id: alphaDiffLabel
+        id: txtAlphaDiff
         /*: Alpha channel, also known as the transparency component of a pixel
             in an image.
          */
         text: qsTr("Alpha differential")
     }
-    TextField {
-        text: Radioactive.alphaDiff
-        placeholderText: alphaDiffLabel.text
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /-?\d+/
-        }
+    Slider {
+        id: sldAlphaDiff
+        value: Radioactive.alphaDiff
+        stepSize: 1
+        to: 255
         Layout.fillWidth: true
+        Accessible.name: txtAlphaDiff.text
 
-        onTextChanged: Radioactive.alphaDiff = Number(text)
+        onValueChanged: Radioactive.alphaDiff = value
     }
+    SpinBox {
+        id: spbAlphaDiff
+        value: Radioactive.alphaDiff
+        from: sldAlphaDiff.from
+        to: sldAlphaDiff.to
+        stepSize: sldAlphaDiff.stepSize
+        editable: true
+        Accessible.name: txtAlphaDiff.text
 
+        onValueChanged: Radioactive.alphaDiff = Number(value)
+    }
     Label {
+        id: txtRadiationColor
         text: qsTr("Radiation color")
     }
-    RowLayout {
-        Item {
-            Layout.fillWidth: true
-        }
-        AK.ColorButton {
-            currentColor: AkUtils.fromRgba(Radioactive.radColor)
-            title: qsTr("Choose a color")
-            showAlphaChannel: true
+    Item {
+        Layout.fillWidth: true
+    }
+    AK.ColorButton {
+        currentColor: AkUtils.fromRgba(Radioactive.radColor)
+        title: qsTr("Choose a color")
+        showAlphaChannel: true
+        Accessible.description: txtRadiationColor.text
 
-            onCurrentColorChanged: Radioactive.radColor = AkUtils.toRgba(currentColor)
-        }
+        onCurrentColorChanged: Radioactive.radColor = AkUtils.toRgba(currentColor)
     }
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Radioactive/src/radioactive.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Radioactive/src/radioactive.cpp
@@ -17,6 +17,8 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
+#include <QQmlEngine>
+
 #include "radioactive.h"
 #include "radioactiveelement.h"
 
@@ -24,6 +26,9 @@ QObject *Radioactive::create(const QStri
 {
     Q_UNUSED(key)
     Q_UNUSED(specification)
+    qRegisterMetaType<RadioactiveElement::RadiationMode>("RadioactiveElementRadiationMode");
+    qRegisterMetaTypeStreamOperators<RadioactiveElement::RadiationMode>("RadioactiveElementRadiationMode");
+    qmlRegisterType<RadioactiveElement>("RadioactiveElement", 1, 0, "RadioactiveElement");
 
     return new RadioactiveElement();
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Radioactive/src/radioactive.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Radioactive/src/radioactive.h
@@ -29,8 +29,8 @@ class Radioactive: public QObject, publi
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // RADIOACTIVE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Radioactive/src/radioactiveelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Radioactive/src/radioactiveelement.cpp
@@ -17,65 +17,60 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QtMath>
-#include <QPainter>
+#include <QDataStream>
 #include <QQmlContext>
+#include <QSize>
+#include <QtMath>
+#include <akfrac.h>
 #include <akpacket.h>
 #include <akpluginmanager.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
+#include <akvideomixer.h>
 #include <akvideopacket.h>
 
 #include "radioactiveelement.h"
 
-using RadiationModeMap = QMap<RadioactiveElement::RadiationMode, QString>;
-
-inline RadiationModeMap initRadiationModeMap()
-{
-    RadiationModeMap radiationModeToStr = {
-        {RadioactiveElement::RadiationModeSoftNormal, "softNormal"},
-        {RadioactiveElement::RadiationModeHardNormal, "hardNormal"},
-        {RadioactiveElement::RadiationModeSoftColor , "softColor" },
-        {RadioactiveElement::RadiationModeHardColor , "hardColor" }
-    };
-
-    return radiationModeToStr;
-}
-
-Q_GLOBAL_STATIC_WITH_ARGS(RadiationModeMap, radiationModeToStr, (initRadiationModeMap()))
-
 class RadioactiveElementPrivate
 {
     public:
         QSize m_frameSize;
-        QImage m_prevFrame;
-        QImage m_blurZoomBuffer;
-        AkElementPtr m_blurFilter;
-        qreal m_zoom {1.1};
-        RadioactiveElement::RadiationMode m_mode {RadioactiveElement::RadiationModeSoftNormal};
+        AkVideoPacket m_prevFrame;
+        AkVideoPacket m_blurZoomBuffer;
+        AkElementPtr m_blurFilter {akPluginManager->create<AkElement>("VideoFilter/Blur")};
+        AkElementPtr m_zoomFilter {akPluginManager->create<AkElement>("VideoFilter/Zoom")};
+        RadioactiveElement::RadiationMode m_mode {RadioactiveElement::RadiationModeHardColor};
         int m_threshold {31};
         int m_lumaThreshold {95};
-        int m_alphaDiff {-8};
+        int m_alphaDiff {8};
         QRgb m_radColor {qRgb(0, 255, 0)};
-
-        QImage imageDiff(const QImage &img1,
-                         const QImage &img2,
-                         int threshold,
-                         int lumaThreshold,
-                         QRgb radColor,
-                         RadioactiveElement::RadiationMode mode);
-        QImage imageAlphaDiff(const QImage &src, int alphaDiff);
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+        AkVideoMixer m_videoMixer;
+        AkVideoMixer m_bzVideoMixer;
+
+        AkVideoPacket imageDiff(const AkVideoPacket &img1,
+                                const AkVideoPacket &img2,
+                                int threshold,
+                                int lumaThreshold,
+                                QRgb radColor,
+                                RadioactiveElement::RadiationMode mode);
+        AkVideoPacket imageAlphaDiff(const AkVideoPacket &src, int alphaDiff);
 };
 
 RadioactiveElement::RadioactiveElement(): AkElement()
 {
     this->d = new RadioactiveElementPrivate;
-    this->d->m_blurFilter =
-            akPluginManager->create<AkElement>("VideoFilter/Blur");
     this->d->m_blurFilter->setProperty("radius", 2);
+    this->d->m_zoomFilter->setProperty("zoom", 1.1);
 
     QObject::connect(this->d->m_blurFilter.data(),
                      SIGNAL(radiusChanged(int)),
                      this,
                      SIGNAL(blurChanged(int)));
+    QObject::connect(this->d->m_zoomFilter.data(),
+                     SIGNAL(zoomChanged(qreal)),
+                     this,
+                     SIGNAL(zoomChanged(qreal)));
 }
 
 RadioactiveElement::~RadioactiveElement()
@@ -83,9 +78,9 @@ RadioactiveElement::~RadioactiveElement(
     delete this->d;
 }
 
-QString RadioactiveElement::mode() const
+RadioactiveElement::RadiationMode RadioactiveElement::mode() const
 {
-    return radiationModeToStr->value(this->d->m_mode);
+    return this->d->m_mode;
 }
 
 int RadioactiveElement::blur() const
@@ -95,7 +90,7 @@ int RadioactiveElement::blur() const
 
 qreal RadioactiveElement::zoom() const
 {
-    return this->d->m_zoom;
+    return this->d->m_zoomFilter->property("zoom").toReal();
 }
 
 int RadioactiveElement::threshold() const
@@ -118,92 +113,6 @@ QRgb RadioactiveElement::radColor() cons
     return this->d->m_radColor;
 }
 
-QImage RadioactiveElementPrivate::imageDiff(const QImage &img1,
-                                            const QImage &img2,
-                                            int threshold,
-                                            int lumaThreshold,
-                                            QRgb radColor,
-                                            RadioactiveElement::RadiationMode mode)
-{
-    int width = qMin(img1.width(), img2.width());
-    int height = qMin(img1.height(), img2.height());
-    QImage diff(width, height, img1.format());
-
-    for (int y = 0; y < height; y++) {
-        const QRgb *iLine1 = reinterpret_cast<const QRgb *>(img1.constScanLine(y));
-        const QRgb *iLine2 = reinterpret_cast<const QRgb *>(img2.constScanLine(y));
-        QRgb *oLine = reinterpret_cast<QRgb *>(diff.scanLine(y));
-
-        for (int x = 0; x < width; x++) {
-            int r1 = qRed(iLine1[x]);
-            int g1 = qGreen(iLine1[x]);
-            int b1 = qBlue(iLine1[x]);
-
-            int r2 = qRed(iLine2[x]);
-            int g2 = qGreen(iLine2[x]);
-            int b2 = qBlue(iLine2[x]);
-
-            int dr = r1 - r2;
-            int dg = g1 - g2;
-            int db = b1 - b2;
-
-            int alpha = dr * dr + dg * dg + db * db;
-            alpha = int(sqrt(alpha / 3.0));
-
-            if (mode == RadioactiveElement::RadiationModeSoftNormal
-                || mode == RadioactiveElement::RadiationModeSoftColor)
-                alpha = alpha < threshold? 0: alpha;
-            else
-                alpha = alpha < threshold? 0: 255;
-
-            int gray = qGray(iLine2[x]);
-
-            alpha = gray < lumaThreshold? 0: alpha;
-
-            int r;
-            int g;
-            int b;
-
-            if (mode == RadioactiveElement::RadiationModeHardNormal
-                || mode == RadioactiveElement::RadiationModeSoftNormal) {
-                r = r2;
-                g = g2;
-                b = b2;
-            } else {
-                r = qRed(radColor);
-                g = qGreen(radColor);
-                b = qBlue(radColor);
-            }
-
-            oLine[x] = qRgba(r, g, b, alpha);
-        }
-    }
-
-    return diff;
-}
-
-QImage RadioactiveElementPrivate::imageAlphaDiff(const QImage &src,
-                                                 int alphaDiff)
-{
-    QImage dest(src.size(), src.format());
-
-    for (int y = 0; y < src.height(); y++) {
-        const QRgb *srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        QRgb *dstLine = reinterpret_cast<QRgb *>(dest.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++) {
-            QRgb pixel = srcLine[x];
-            int r = qRed(pixel);
-            int g = qGreen(pixel);
-            int b = qBlue(pixel);
-            int a = qBound(0, qAlpha(pixel) + alphaDiff, 255);
-            dstLine[x] = qRgba(r, g, b, a);
-        }
-    }
-
-    return dest;
-}
-
 QString RadioactiveElement::controlInterfaceProvide(const QString &controlId) const
 {
     Q_UNUSED(controlId)
@@ -222,85 +131,69 @@ void RadioactiveElement::controlInterfac
 
 AkPacket RadioactiveElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
-
-    if (src.size() != this->d->m_frameSize) {
-        this->d->m_blurZoomBuffer = QImage();
-        this->d->m_prevFrame = QImage();
-        this->d->m_frameSize = src.size();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    auto dst = src;
+    QSize frameSize(src.caps().width(), src.caps().height());
+
+    if (frameSize != this->d->m_frameSize) {
+        this->d->m_blurZoomBuffer = AkVideoPacket();
+        this->d->m_prevFrame = AkVideoPacket();
+        this->d->m_frameSize = frameSize;
     }
 
-    if (this->d->m_prevFrame.isNull()) {
-        oFrame = src;
-        this->d->m_blurZoomBuffer = QImage(src.size(), src.format());
-        this->d->m_blurZoomBuffer.fill(qRgba(0, 0, 0, 0));
+    if (!this->d->m_prevFrame) {
+        this->d->m_blurZoomBuffer = AkVideoPacket(src.caps(), true);
     } else {
         // Compute the difference between previous and current frame,
         // and save it to the buffer.
-        QImage diff =
-                this->d->imageDiff(this->d->m_prevFrame,
-                                   src,
-                                   this->d->m_threshold,
-                                   this->d->m_lumaThreshold,
-                                   this->d->m_radColor,
-                                   this->d->m_mode);
-
-        QPainter painter;
-        painter.begin(&this->d->m_blurZoomBuffer);
-        painter.drawImage(0, 0, diff);
-        painter.end();
+        auto diff = this->d->imageDiff(this->d->m_prevFrame,
+                                       src,
+                                       this->d->m_threshold,
+                                       this->d->m_lumaThreshold,
+                                       this->d->m_radColor,
+                                       this->d->m_mode);
+
+        this->d->m_bzVideoMixer.begin(&this->d->m_blurZoomBuffer);
+        this->d->m_bzVideoMixer.draw(diff);
+        this->d->m_bzVideoMixer.end();
 
         // Blur buffer.
-        auto blurZoomPacket =
-                AkVideoPacket::fromImage(this->d->m_blurZoomBuffer, packet);
-        auto blurPacket = this->d->m_blurFilter->iStream(blurZoomPacket);
-        auto blur = AkVideoPacket(blurPacket).toImage();
+        AkVideoPacket blur =
+                this->d->m_blurFilter->iStream(this->d->m_blurZoomBuffer);
 
         // Zoom buffer.
-        QImage blurScaled = blur.scaled(this->d->m_zoom * blur.size());
-        QSize diffSize = blur.size() - blurScaled.size();
-        QPoint p(diffSize.width() >> 1,
-                 diffSize.height() >> 1);
-
-        QImage zoom(blur.size(), blur.format());
-        zoom.fill(qRgba(0, 0, 0, 0));
-
-        painter.begin(&zoom);
-        painter.drawImage(p, blurScaled);
-        painter.end();
+        AkVideoPacket zoom = this->d->m_zoomFilter->iStream(blur);
 
         // Reduce alpha.
-        QImage alphaDiff = this->d->imageAlphaDiff(zoom, this->d->m_alphaDiff);
+        auto alphaDiff = this->d->imageAlphaDiff(zoom, this->d->m_alphaDiff);
         this->d->m_blurZoomBuffer = alphaDiff;
 
         // Apply buffer.
-        painter.begin(&oFrame);
-        painter.drawImage(0, 0, src);
-        painter.drawImage(0, 0, this->d->m_blurZoomBuffer);
-        painter.end();
+        this->d->m_videoMixer.begin(&dst);
+        this->d->m_videoMixer.draw(this->d->m_blurZoomBuffer);
+        this->d->m_videoMixer.end();
     }
 
-    this->d->m_prevFrame = src.copy();
+    this->d->m_prevFrame = src;
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
-void RadioactiveElement::setMode(const QString &mode)
+void RadioactiveElement::setMode(RadiationMode mode)
 {
-    RadiationMode modeEnum = radiationModeToStr->key(mode,
-                                                     RadiationModeSoftNormal);
-
-    if (this->d->m_mode == modeEnum)
+    if (this->d->m_mode == mode)
         return;
 
-    this->d->m_mode = modeEnum;
+    this->d->m_mode = mode;
     emit this->modeChanged(mode);
 }
 
@@ -311,11 +204,7 @@ void RadioactiveElement::setBlur(int blu
 
 void RadioactiveElement::setZoom(qreal zoom)
 {
-    if (qFuzzyCompare(this->d->m_zoom, zoom))
-        return;
-
-    this->d->m_zoom = zoom;
-    emit this->zoomChanged(zoom);
+    this->d->m_zoomFilter->setProperty("zoom", zoom);
 }
 
 void RadioactiveElement::setThreshold(int threshold)
@@ -356,7 +245,7 @@ void RadioactiveElement::setRadColor(QRg
 
 void RadioactiveElement::resetMode()
 {
-    this->setMode("softNormal");
+    this->setMode(RadiationModeHardColor);
 }
 
 void RadioactiveElement::resetBlur()
@@ -381,7 +270,7 @@ void RadioactiveElement::resetLumaThresh
 
 void RadioactiveElement::resetAlphaDiff()
 {
-    this->setAlphaDiff(-8);
+    this->setAlphaDiff(8);
 }
 
 void RadioactiveElement::resetRadColor()
@@ -389,4 +278,117 @@ void RadioactiveElement::resetRadColor()
     this->setRadColor(qRgb(0, 255, 0));
 }
 
+QDataStream &operator >>(QDataStream &istream, RadioactiveElement::RadiationMode &mode)
+{
+    int modeInt;
+    istream >> modeInt;
+    mode = static_cast<RadioactiveElement::RadiationMode>(modeInt);
+
+    return istream;
+}
+
+QDataStream &operator <<(QDataStream &ostream, RadioactiveElement::RadiationMode mode)
+{
+    ostream << static_cast<int>(mode);
+
+    return ostream;
+}
+
+AkVideoPacket RadioactiveElementPrivate::imageDiff(const AkVideoPacket &img1,
+                                                   const AkVideoPacket &img2,
+                                                   int threshold,
+                                                   int lumaThreshold,
+                                                   QRgb radColor,
+                                                   RadioactiveElement::RadiationMode mode)
+{
+    int width = qMin(img1.caps().width(), img2.caps().width());
+    int height = qMin(img1.caps().height(), img2.caps().height());
+    auto ocaps = img1.caps();
+    ocaps.setWidth(width);
+    ocaps.setHeight(height);
+    AkVideoPacket diff(ocaps);
+
+    int radR = qRed(radColor);
+    int radG = qGreen(radColor);
+    int radB = qBlue(radColor);
+
+    for (int y = 0; y < height; y++) {
+        auto iLine1 = reinterpret_cast<const QRgb *>(img1.constLine(0, y));
+        auto iLine2 = reinterpret_cast<const QRgb *>(img2.constLine(0, y));
+        auto oLine = reinterpret_cast<QRgb *>(diff.line(0, y));
+
+        for (int x = 0; x < width; x++) {
+            auto &pixel1 = iLine1[x];
+            int r1 = qRed(pixel1);
+            int g1 = qGreen(pixel1);
+            int b1 = qBlue(pixel1);
+
+            auto &pixel2 = iLine2[x];
+            int r2 = qRed(pixel2);
+            int g2 = qGreen(pixel2);
+            int b2 = qBlue(pixel2);
+
+            int dr = r1 - r2;
+            int dg = g1 - g2;
+            int db = b1 - b2;
+
+            int alpha = dr * dr + dg * dg + db * db;
+            alpha = int(qSqrt(alpha / 3.0));
+
+            if (mode == RadioactiveElement::RadiationModeSoftNormal
+                || mode == RadioactiveElement::RadiationModeSoftColor)
+                alpha = alpha < threshold? 0: alpha;
+            else
+                alpha = alpha < threshold? 0: 255;
+
+            int gray = qGray(pixel2);
+
+            alpha = gray < lumaThreshold? 0: alpha;
+
+            int r;
+            int g;
+            int b;
+
+            if (mode == RadioactiveElement::RadiationModeHardNormal
+                || mode == RadioactiveElement::RadiationModeSoftNormal) {
+                r = r2;
+                g = g2;
+                b = b2;
+            } else {
+                r = radR;
+                g = radG;
+                b = radB;
+            }
+
+            oLine[x] = qRgba(r, g, b, alpha);
+        }
+    }
+
+    return diff;
+}
+
+AkVideoPacket RadioactiveElementPrivate::imageAlphaDiff(const AkVideoPacket &src,
+                                                        int alphaDiff)
+{
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+    alphaDiff = qBound(0, alphaDiff, 255);
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = srcLine[x];
+            int r = qRed(pixel);
+            int g = qGreen(pixel);
+            int b = qBlue(pixel);
+            int a = qBound(0, qAlpha(pixel) - alphaDiff, 255);
+            dstLine[x] = qRgba(r, g, b, a);
+        }
+    }
+
+    return dst;
+}
+
 #include "moc_radioactiveelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Radioactive/src/radioactiveelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Radioactive/src/radioactiveelement.h
@@ -28,8 +28,7 @@ class RadioactiveElementPrivate;
 class RadioactiveElement: public AkElement
 {
     Q_OBJECT
-    Q_ENUMS(RadiationMode)
-    Q_PROPERTY(QString mode
+    Q_PROPERTY(RadiationMode mode
                READ mode
                WRITE setMode
                RESET resetMode
@@ -73,11 +72,12 @@ class RadioactiveElement: public AkEleme
             RadiationModeSoftColor,
             RadiationModeHardColor
         };
+        Q_ENUM(RadiationMode)
 
         RadioactiveElement();
         ~RadioactiveElement();
 
-        Q_INVOKABLE QString mode() const;
+        Q_INVOKABLE RadiationMode mode() const;
         Q_INVOKABLE int blur() const;
         Q_INVOKABLE qreal zoom() const;
         Q_INVOKABLE int threshold() const;
@@ -89,13 +89,13 @@ class RadioactiveElement: public AkEleme
         RadioactiveElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
-        void modeChanged(const QString &mode);
+        void modeChanged(RadiationMode mode);
         void blurChanged(int blur);
         void zoomChanged(qreal zoom);
         void thresholdChanged(int threshold);
@@ -104,7 +104,7 @@ class RadioactiveElement: public AkEleme
         void radColorChanged(QRgb radColor);
 
     public slots:
-        void setMode(const QString &mode);
+        void setMode(RadiationMode mode);
         void setBlur(int blur);
         void setZoom(qreal zoom);
         void setThreshold(int threshold);
@@ -120,4 +120,9 @@ class RadioactiveElement: public AkEleme
         void resetRadColor();
 };
 
+Q_DECL_EXPORT QDataStream &operator >>(QDataStream &istream, RadioactiveElement::RadiationMode &mode);
+Q_DECL_EXPORT QDataStream &operator <<(QDataStream &ostream, RadioactiveElement::RadiationMode mode);
+
+Q_DECLARE_METATYPE(RadioactiveElement::RadiationMode)
+
 #endif // RADIOACTIVEELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Ripple/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Ripple/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Ripple
 target_compile_definitions(Ripple PRIVATE AVKYS_PLUGIN_RIPPLE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Ripple avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Ripple RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Ripple/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Ripple/share/qml/main.qml
@@ -20,9 +20,11 @@
 import QtQuick 2.12
 import QtQuick.Controls 2.5
 import QtQuick.Layouts 1.3
+import Ak 1.0
+import RippleElement 1.0
 
 GridLayout {
-    columns: 2
+    columns: 3
 
     function modeIndex(mode)
     {
@@ -37,73 +39,173 @@ GridLayout {
         return index
     }
 
+    Connections {
+        target: Ripple
+
+        function onAmplitudeChanged(amplitude)
+        {
+            sldAmplitude.value = amplitude
+            spbAmplitude.value = amplitude
+        }
+
+        function onDecayChanged(decay)
+        {
+            sldDecay.value = decay
+            spbDecay.value = decay
+        }
+
+        function onThresholdChanged(threshold)
+        {
+            sldThreshold.value = threshold
+            spbThreshold.value = threshold
+        }
+
+        function onLumaThresholdChanged(lumaThreshold)
+        {
+            sldLumaThreshold.value = lumaThreshold
+            spbLumaThreshold.value = lumaThreshold
+        }
+
+        function onMinDropSizeChanged(minDropSize)
+        {
+            sldMinDropSize.value = minDropSize
+            spbMinDropSize.value = minDropSize
+        }
+
+        function onMaxDropSizeChanged(maxDropSize)
+        {
+            sldMaxDropSize.value = maxDropSize
+            spbMaxDropSize.value = maxDropSize
+        }
+
+        function onDropSigmaChanged(dropSigma)
+        {
+            sldDropSigma.value = dropSigma
+            spbDropSigma.value = dropSigma * spbDropSigma.multiplier
+        }
+
+        function onDropProbabilityChanged(dropProbability)
+        {
+            sldDropProbability.value = dropProbability
+            spbDropProbability.value = dropProbability * spbDropProbability.multiplier
+        }
+    }
+
     Label {
+        id: txtMode
         text: qsTr("Mode")
     }
     ComboBox {
         id: cbxMode
         textRole: "text"
         currentIndex: modeIndex(Ripple.mode)
+        Layout.columnSpan: 2
         Layout.fillWidth: true
+        Accessible.description: txtMode.text
 
         model: ListModel {
             ListElement {
                 text: qsTr("Motion detect")
-                mode: "motionDetect"
+                mode: RippleElement.RippleModeMotionDetect
             }
             ListElement {
                 text: qsTr("Rain")
-                mode: "rain"
+                mode: RippleElement.RippleModeRain
             }
         }
 
         onCurrentIndexChanged: Ripple.mode = cbxMode.model.get(currentIndex).mode
     }
-
     Label {
+        text: qsTr("<b>General parameters</b>")
+        topPadding: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+        bottomPadding: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+        wrapMode: Text.Wrap
+        Layout.columnSpan: 3
+        Layout.fillWidth: true
+    }
+    Label {
+        id: txtAmplitude
         text: qsTr("Amplitude")
     }
-    TextField {
-        text: Ripple.amplitude
-        placeholderText: qsTr("Amplitude")
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /\d+/
-        }
+    Slider {
+        id: sldAmplitude
+        value: Ripple.amplitude
+        stepSize: 1
+        to: 1024
         Layout.fillWidth: true
+        Accessible.name: txtAmplitude.text
 
-        onTextChanged: Ripple.amplitude = Number(text)
+        onValueChanged: Ripple.amplitude = value
+    }
+    SpinBox {
+        id: spbAmplitude
+        value: Ripple.amplitude
+        to: sldAmplitude.to
+        stepSize: sldAmplitude.stepSize
+        editable: true
+        Accessible.name: txtAmplitude.text
+
+        onValueChanged: Ripple.amplitude = Number(value)
     }
     Label {
+        id: txtDecay
         text: qsTr("Decay")
     }
-    TextField {
-        text: Ripple.decay
-        placeholderText: qsTr("Decay")
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /\d+/
-        }
+    Slider {
+        id: sldDecay
+        value: Ripple.decay
+        stepSize: 1
+        to: 8
         Layout.fillWidth: true
+        Accessible.name: txtDecay.text
+
+        onValueChanged: Ripple.decay = value
+    }
+    SpinBox {
+        id: spbDecay
+        value: Ripple.decay
+        to: sldDecay.to
+        stepSize: sldDecay.stepSize
+        editable: true
+        Accessible.name: txtDecay.text
 
-        onTextChanged: Ripple.decay = Number(text)
+        onValueChanged: Ripple.decay = Number(value)
     }
     Label {
+        text: qsTr("<b>Motion detection parameters</b>")
+        topPadding: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+        bottomPadding: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+        wrapMode: Text.Wrap
+        Layout.columnSpan: 3
+        Layout.fillWidth: true
+    }
+    Label {
+        id: txtThreshold
         text: qsTr("Threshold")
     }
-    TextField {
-        text: Ripple.threshold
-        placeholderText: qsTr("Threshold")
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /\d+/
-        }
+    Slider {
+        id: sldThreshold
+        value: Ripple.threshold
+        stepSize: 1
+        to: 256
         Layout.fillWidth: true
+        Accessible.name: txtThreshold.text
 
-        onTextChanged: Ripple.threshold = Number(text)
+        onValueChanged: Ripple.threshold = value
+    }
+    SpinBox {
+        id: spbThreshold
+        value: Ripple.threshold
+        to: sldThreshold.to
+        stepSize: sldThreshold.stepSize
+        editable: true
+        Accessible.name: txtThreshold.text
+
+        onValueChanged: Ripple.threshold = Number(value)
     }
     Label {
-        id: lumaLabel
+        id: txtLumaThreshold
         /*: Minimum luminance/light/white level/intensity in a gray or black and
             white picture.
 
@@ -111,15 +213,160 @@ GridLayout {
          */
         text: qsTr("Luma threshold")
     }
-    TextField {
-        text: Ripple.lumaThreshold
-        placeholderText: lumaLabel.text
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /\d+/
+    Slider {
+        id: sldLumaThreshold
+        value: Ripple.lumaThreshold
+        stepSize: 1
+        to: 256
+        Layout.fillWidth: true
+        Accessible.name: txtLumaThreshold.text
+
+        onValueChanged: Ripple.lumaThreshold = value
+    }
+    SpinBox {
+        id: spbLumaThreshold
+        value: Ripple.lumaThreshold
+        to: sldLumaThreshold.to
+        stepSize: sldLumaThreshold.stepSize
+        editable: true
+        Accessible.name: txtLumaThreshold.text
+
+        onValueChanged: Ripple.lumaThreshold = Number(value)
+    }
+    Label {
+        text: qsTr("<b>Rain parameters</b>")
+        topPadding: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+        bottomPadding: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+        wrapMode: Text.Wrap
+        Layout.columnSpan: 3
+        Layout.fillWidth: true
+    }
+    Label {
+        id: txtMinDropSize
+
+        text: qsTr("Minimum drop size")
+    }
+    Slider {
+        id: sldMinDropSize
+        value: Ripple.minDropSize
+        stepSize: 1
+        to: 1024
+        Layout.fillWidth: true
+        Accessible.name: txtMinDropSize.text
+
+        onValueChanged: Ripple.minDropSize = value
+    }
+    SpinBox {
+        id: spbMinDropSize
+        value: Ripple.minDropSize
+        to: sldMinDropSize.to
+        stepSize: sldMinDropSize.stepSize
+        editable: true
+        Accessible.name: txtMinDropSize.text
+
+        onValueChanged: Ripple.minDropSize = Number(value)
+    }
+    Label {
+        id: txtMaxDropSize
+
+        text: qsTr("Maximum drop size")
+    }
+    Slider {
+        id: sldMaxDropSize
+        value: Ripple.maxDropSize
+        stepSize: 1
+        to: 1024
+        Layout.fillWidth: true
+        Accessible.name: txtMaxDropSize.text
+
+        onValueChanged: Ripple.maxDropSize = value
+    }
+    SpinBox {
+        id: spbMaxDropSize
+        value: Ripple.maxDropSize
+        to: sldMaxDropSize.to
+        stepSize: sldMaxDropSize.stepSize
+        editable: true
+        Accessible.name: txtMaxDropSize.text
+
+        onValueChanged: Ripple.maxDropSize = Number(value)
+    }
+    Label {
+        id: lblDropSigma
+        text: qsTr("Drop thickness")
+    }
+    Slider {
+        id: sldDropSigma
+        value: Ripple.dropSigma
+        stepSize: 0.01
+        from: 0
+        to: 10
+        Layout.fillWidth: true
+        Accessible.name: lblDropSigma.text
+
+        onValueChanged: Ripple.dropSigma = value
+    }
+    SpinBox {
+        id: spbDropSigma
+        value: multiplier * Ripple.dropSigma
+        from: multiplier * sldDropSigma.from
+        to: multiplier * sldDropSigma.to
+        stepSize: multiplier * sldDropSigma.stepSize
+        editable: true
+        Accessible.name: lblDropSigma.text
+
+        readonly property int decimals: 2
+        readonly property int multiplier: Math.pow(10, decimals)
+
+        validator: DoubleValidator {
+            bottom: Math.min(spbDropSigma.from, spbDropSigma.to)
+            top:  Math.max(spbDropSigma.from, spbDropSigma.to)
         }
+        textFromValue: function(value, locale) {
+            return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
+        }
+        valueFromText: function(text, locale) {
+            return Number.fromLocaleString(locale, text) * multiplier
+        }
+        onValueModified: Ripple.dropSigma = value / multiplier
+    }
+    Label {
+        id: lblDropProbability
+        text: qsTr("Drop frequency")
+    }
+    Slider {
+        id: sldDropProbability
+        value: Ripple.dropProbability
+        stepSize: 0.01
+        from: 0
+        to: 1
         Layout.fillWidth: true
+        Accessible.name: lblDropProbability.text
 
-        onTextChanged: Ripple.lumaThreshold = Number(text)
+        onValueChanged: Ripple.dropProbability = value
+    }
+    SpinBox {
+        id: spbDropProbability
+        value: multiplier * Ripple.dropProbability
+        from: multiplier * sldDropProbability.from
+        to: multiplier * sldDropProbability.to
+        stepSize: multiplier * sldDropProbability.stepSize
+        editable: true
+        Accessible.name: lblDropProbability.text
+
+        readonly property int decimals: 2
+        readonly property int multiplier: Math.pow(10, decimals)
+
+        validator: DoubleValidator {
+            bottom: Math.min(spbDropProbability.from, spbDropProbability.to)
+            top:  Math.max(spbDropProbability.from, spbDropProbability.to)
+        }
+        textFromValue: function(value, locale) {
+            return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
+        }
+        valueFromText: function(text, locale) {
+            return Number.fromLocaleString(locale, text) * multiplier
+        }
+        onValueModified: Ripple.dropProbability = value / multiplier
     }
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Ripple/src/ripple.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Ripple/src/ripple.cpp
@@ -17,6 +17,8 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
+#include <QQmlEngine>
+
 #include "ripple.h"
 #include "rippleelement.h"
 
@@ -24,6 +26,9 @@ QObject *Ripple::create(const QString &k
 {
     Q_UNUSED(key)
     Q_UNUSED(specification)
+    qRegisterMetaType<RippleElement::RippleMode>("RippleElementRippleMode");
+    qRegisterMetaTypeStreamOperators<RippleElement::RippleMode>("RippleElementRippleMode");
+    qmlRegisterType<RippleElement>("RippleElement", 1, 0, "RippleElement");
 
     return new RippleElement();
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Ripple/src/ripple.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Ripple/src/ripple.h
@@ -29,8 +29,8 @@ class Ripple: public QObject, public AkP
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // RIPPLE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Ripple/src/rippleelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Ripple/src/rippleelement.cpp
@@ -17,30 +17,20 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
+#include <QDataStream>
 #include <QQmlContext>
 #include <QRandomGenerator>
 #include <QtMath>
+#include <qrgb.h>
 #include <akcaps.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "rippleelement.h"
 
-using RippleModeToStr = QMap<RippleElement::RippleMode, QString>;
-
-inline RippleModeToStr initRippleModeToStr()
-{
-    RippleModeToStr rippleModeToStr {
-        {RippleElement::RippleModeMotionDetect, "motionDetect"},
-        {RippleElement::RippleModeRain        , "rain"        }
-    };
-
-    return rippleModeToStr;
-}
-
-Q_GLOBAL_STATIC_WITH_ARGS(RippleModeToStr, rippleModeToStr, (initRippleModeToStr()))
-
 class RippleElementPrivate
 {
     public:
@@ -49,27 +39,32 @@ class RippleElementPrivate
         int m_decay {8};
         int m_threshold {15};
         int m_lumaThreshold {15};
+        int m_minDropSize {3};
+        int m_maxDropSize {127};
+        qreal m_dropSigma {1.0};
+        qreal m_dropProbability {1.0};
         AkCaps m_caps;
-        QImage m_prevFrame;
-        QVector<QImage> m_rippleBuffer;
+        AkVideoPacket m_prevFrame;
+        AkVideoPacket m_rippleBuffer[2];
         int m_curRippleBuffer {0};
-        int m_period {0};
-        int m_rainStat {0};
-        uint m_dropProb {0};
-        int m_dropProbIncrement {0};
-        int m_dropsPerFrameMax {0};
-        int m_dropsPerFrame {0};
-        int m_dropPower {0};
-
-        QImage imageDiff(const QImage &img1,
-                         const QImage &img2,
-                         int threshold,
-                         int lumaThreshold, int strength);
-        void addDrops(const QImage &buffer, const QImage &drops);
-        void ripple(const QImage &buffer1, const QImage &buffer2, int decay);
-        QImage applyWater(const QImage &src, const QImage &buffer);
-        QImage rainDrop(int width, int height, int strength);
-        QImage drop(int width, int height, int power);
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+
+        AkVideoPacket imageDiff(const AkVideoPacket &img1,
+                                const AkVideoPacket &img2,
+                                int threshold,
+                                int lumaThreshold, int strength);
+        void addDrop(AkVideoPacket &buffer, const AkVideoPacket &drop) const;
+        void ripple(const AkVideoPacket &topBuffer,
+                    AkVideoPacket &bottomBuffer,
+                    int decay) const;
+        AkVideoPacket applyWater(const AkVideoPacket &src,
+                                 const AkVideoPacket &water) const;
+        AkVideoPacket drop(int bufferWidth,
+                           int bufferHeight,
+                           int dropWidth,
+                           int dropHeight,
+                           int amplitude,
+                           qreal sigma) const;
 };
 
 RippleElement::RippleElement(): AkElement()
@@ -82,9 +77,9 @@ RippleElement::~RippleElement()
     delete this->d;
 }
 
-QString RippleElement::mode() const
+RippleElement::RippleMode RippleElement::mode() const
 {
-    return rippleModeToStr->value(this->d->m_mode);
+    return this->d->m_mode;
 }
 
 int RippleElement::amplitude() const
@@ -107,284 +102,24 @@ int RippleElement::lumaThreshold() const
     return this->d->m_lumaThreshold;
 }
 
-QImage RippleElementPrivate::imageDiff(const QImage &img1,
-                                       const QImage &img2,
-                                       int threshold,
-                                       int lumaThreshold,
-                                       int strength)
-{
-    int width = qMin(img1.width(), img2.width());
-    int height = qMin(img1.height(), img2.height());
-    QImage diff(width, height, QImage::Format_ARGB32);
-
-    for (int y = 0; y < height; y++) {
-        const QRgb *img1Line = reinterpret_cast<const QRgb *>(img1.constScanLine(y));
-        const QRgb *img2Line = reinterpret_cast<const QRgb *>(img2.constScanLine(y));
-        int *diffLine = reinterpret_cast<int *>(diff.scanLine(y));
-
-        for (int x = 0; x < width; x++) {
-            QRgb pixel1 = img1Line[x];
-            int r1 = qRed(pixel1);
-            int g1 = qGreen(pixel1);
-            int b1 = qBlue(pixel1);
-
-            QRgb pixel2 = img2Line[x];
-            int r2 = qRed(pixel2);
-            int g2 = qGreen(pixel2);
-            int b2 = qBlue(pixel2);
-
-            int dr = r1 - r2;
-            int dg = g1 - g2;
-            int db = b1 - b2;
-
-            int s = dr * dr + dg * dg + db * db;
-            s = int(sqrt(s / 3.0));
-            s = s < threshold? 0: s;
-
-            int gray = qGray(img2Line[x]);
-            s = gray < lumaThreshold? 0: s;
-
-            diffLine[x] = (strength * s) >> 8;
-        }
-    }
-
-    return diff;
-}
-
-void RippleElementPrivate::addDrops(const QImage &buffer, const QImage &drops)
+int RippleElement::minDropSize() const
 {
-    for (int y = 0; y < buffer.height(); y++) {
-        const int *dropsLine = reinterpret_cast<const int *>(drops.constScanLine(y));
-        int *bufferLine = const_cast<int *>(reinterpret_cast<const int *>(buffer.scanLine(y)));
-
-        for (int x = 0; x < buffer.width(); x++)
-            bufferLine[x] += dropsLine[x];
-    }
-}
-
-void RippleElementPrivate::ripple(const QImage &buffer1,
-                                  const QImage &buffer2,
-                                  int decay)
-{
-    QImage buffer3(buffer1.size(), buffer1.format());
-    const int *buffer1Bits = reinterpret_cast<const int *>(buffer1.constBits());
-    int *buffer2Bits = const_cast<int *>(reinterpret_cast<const int *>(buffer2.bits()));
-    int *buffer3Bits = const_cast<int *>(reinterpret_cast<const int *>(buffer3.bits()));
-    int widthM1 = buffer1.width() - 1;
-    int widthP1 = buffer1.width() + 1;
-    int height = buffer1.height() - 1;
-
-    memset(buffer2Bits, 0, size_t(buffer1.bytesPerLine()));
-    memset(buffer2Bits + height * buffer1.width(), 0, size_t(buffer1.bytesPerLine()));
-    memset(buffer3Bits, 0, size_t(buffer1.bytesPerLine()));
-    memset(buffer3Bits + height * buffer1.width(), 0, size_t(buffer1.bytesPerLine()));
-
-    for (int y = 1; y < height; y++) {
-        buffer2Bits[y * buffer1.width()] = 0;
-        buffer2Bits[widthM1 + y * buffer1.width()] = 0;
-        buffer3Bits[y * buffer1.width()] = 0;
-        buffer3Bits[widthM1 + y * buffer1.width()] = 0;
-    }
-
-    // Wave simulation.
-    for (int y = 1; y < height; y++) {
-        int xOfftset = y * buffer1.width();
-
-        for (int x = 1; x < widthM1; x++) {
-            int xp = x + xOfftset;
-            int h = 0;
-
-            h += buffer1Bits[xp - widthP1];
-            h += buffer1Bits[xp - buffer1.width()];
-            h += buffer1Bits[xp - widthM1];
-            h += buffer1Bits[xp - 1];
-            h += buffer1Bits[xp + 1];
-            h += buffer1Bits[xp + widthM1];
-            h += buffer1Bits[xp + buffer1.width()];
-            h += buffer1Bits[xp + widthP1];
-            h -= 9 * buffer1Bits[xp];
-            h >>= 3;
-
-            int v = buffer1Bits[xp] - buffer2Bits[xp];
-            v += h - (v >> decay);
-            buffer3Bits[xp] = v + buffer1Bits[xp];
-        }
-    }
-
-    // Low pass filter.
-    for (int y = 1; y < height; y++) {
-        int xOfftset = y * buffer1.width();
-
-        for (int x = 1; x < widthM1; x++) {
-            int xp = x + xOfftset;
-
-            int h = 0;
-
-            h += buffer3Bits[xp - 1];
-            h += buffer3Bits[xp + 1];
-            h += buffer3Bits[xp - buffer3.width()];
-            h += buffer3Bits[xp + buffer3.width()];
-            h += 60 * buffer3Bits[xp];
-
-            buffer2Bits[xp] = h >> 6;
-        }
-    }
+    return this->d->m_minDropSize;
 }
 
-QImage RippleElementPrivate::applyWater(const QImage &src, const QImage &buffer)
+int RippleElement::maxDropSize() const
 {
-    QImage dest(src.size(), src.format());
-    const QRgb *srcBits = reinterpret_cast<const QRgb *>(src.constBits());
-    const int *bufferBits = reinterpret_cast<const int *>(buffer.bits());
-    QRgb *destBits = reinterpret_cast<QRgb *>(dest.bits());
-
-    for (int y = 0; y < src.height(); y++) {
-        int xOfftset = y * src.width();
-
-        for (int x = 0; x < src.width(); x++) {
-            int xp = x + xOfftset;
-
-            int xOff = 0;
-
-            if (x > 1
-                && x < src.width() - 1) {
-                xOff += bufferBits[xp - 1];
-                xOff -= bufferBits[xp + 1];
-            }
-
-            int yOff = 0;
-
-            if (y > 1
-                && y < src.height() - 1) {
-                yOff += bufferBits[xp - buffer.width()];
-                yOff -= bufferBits[xp + buffer.width()];
-            }
-
-            QColor color;
-            int xq = qBound(0, x + xOff, src.width() - 1);
-            int yq = qBound(0, y + yOff, src.height() - 1);
-
-            color.setRgba(srcBits[xq + yq * src.width()]);
-
-            // Shading
-            int lightness = color.lightness() + xOff;
-            lightness = qBound(0, lightness, 255);
-            color.setHsl(color.hue(), color.saturation(), lightness);
-
-            destBits[xp] = color.rgb();
-        }
-    }
-
-    return dest;
+    return this->d->m_maxDropSize;
 }
 
-QImage RippleElementPrivate::rainDrop(int width, int height, int strength)
+qreal RippleElement::dropSigma() const
 {
-    if (this->m_period == 0) {
-        switch (this->m_rainStat) {
-        case 0:
-            this->m_period = QRandomGenerator::global()->bounded(100, 612);
-            this->m_dropProb = 0;
-            this->m_dropProbIncrement = 0x00ffffff / this->m_period;
-            this->m_dropPower = QRandomGenerator::global()->bounded(-strength, strength);
-            this->m_dropsPerFrameMax = 2 << QRandomGenerator::global()->bounded(4);
-            this->m_rainStat = 1;
-
-            break;
-
-        case 1:
-            this->m_dropProb = 0x00ffffff;
-            this->m_dropsPerFrame = 1;
-            this->m_dropProbIncrement = 1;
-            this->m_period = 16 * (this->m_dropsPerFrameMax - 1);
-            this->m_rainStat = 2;
-
-            break;
-
-        case 2:
-            m_period = QRandomGenerator::global()->bounded(1000, 2024);
-            m_dropProbIncrement = 0;
-            m_rainStat = 3;
-
-            break;
-
-        case 3:
-            this->m_period = 16 * (this->m_dropsPerFrameMax - 1);
-            this->m_dropProbIncrement = -1;
-            this->m_rainStat = 4;
-
-            break;
-
-        case 4:
-            this->m_period = QRandomGenerator::global()->bounded(60, 316);
-            this->m_dropProbIncrement = -int(this->m_dropProb) / this->m_period;
-            this->m_rainStat = 5;
-
-            break;
-
-        default:
-            this->m_period = QRandomGenerator::global()->bounded(500, 1012);
-            this->m_dropProb = 0;
-            this->m_rainStat = 0;
-
-            break;
-        }
-    }
-
-    QImage rain;
-
-    if (this->m_rainStat == 1
-        || this->m_rainStat == 5) {
-
-        if ((QRandomGenerator::global()->generate() >> 8) < this->m_dropProb)
-            rain = this->drop(width, height, this->m_dropPower);
-
-        this->m_dropProb += uint(this->m_dropProbIncrement);
-    } else if (this->m_rainStat == 2
-               || this->m_rainStat == 3
-               || this->m_rainStat == 4) {
-        for  (int i = this->m_dropsPerFrame / 16; i > 0; i--)
-            rain = this->drop(width, height, this->m_dropPower);
-
-        this->m_dropsPerFrame += this->m_dropProbIncrement;
-    }
-
-    this->m_period--;
-
-    if (rain.isNull()) {
-        rain = QImage(width, height, QImage::Format_ARGB32);
-        rain.fill(qRgba(0, 0, 0, 0));
-    }
-
-    return rain;
+    return this->d->m_dropSigma;
 }
 
-QImage RippleElementPrivate::drop(int width, int height, int power)
+qreal RippleElement::dropProbability() const
 {
-    QImage drops(width, height, QImage::Format_ARGB32);
-    auto dropsBits = reinterpret_cast<int *>(drops.bits());
-
-    drops.fill(qRgba(0, 0, 0, 0));
-
-    int widthM1 = width - 1;
-    int widthP1 = width + 1;
-
-    int x = QRandomGenerator::global()->bounded(2, width - 2);
-    int y = QRandomGenerator::global()->bounded(2, height - 2);
-
-    int offset = x + y * width;
-
-    dropsBits[offset - widthP1] = power >> 2;
-    dropsBits[offset - width] = power >> 1;
-    dropsBits[offset - widthM1] = power >> 2;
-    dropsBits[offset - 1] = power >> 1;
-    dropsBits[offset] = power;
-    dropsBits[offset + 1] = power >> 1;
-    dropsBits[offset + widthM1] = power >> 2;
-    dropsBits[offset + width] = power >> 1;
-    dropsBits[offset + widthP1] = power >> 2;
-
-    return drops;
+    return this->d->m_dropProbability;
 }
 
 QString RippleElement::controlInterfaceProvide(const QString &controlId) const
@@ -405,76 +140,88 @@ void RippleElement::controlInterfaceConf
 
 AkPacket RippleElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull())
-        return AkPacket();
+    if (!src)
+        return {};
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
+    AkVideoPacket dst;
 
     if (packet.caps() != this->d->m_caps) {
-        this->d->m_prevFrame = QImage();
-        this->d->m_period = 0;
-        this->d->m_rainStat = 0;
-        this->d->m_dropProb = 0;
-        this->d->m_dropProbIncrement = 0;
-        this->d->m_dropsPerFrameMax = 0;
-        this->d->m_dropsPerFrame = 0;
-        this->d->m_dropPower = 0;
+        this->d->m_prevFrame = AkVideoPacket();
         this->d->m_caps = packet.caps();
     }
 
-    if (this->d->m_prevFrame.isNull()) {
-        oFrame = src;
-        this->d->m_rippleBuffer.clear();
-        this->d->m_rippleBuffer << QImage(src.size(), src.format());
-        this->d->m_rippleBuffer[0].fill(qRgba(0, 0, 0, 0));
-        this->d->m_rippleBuffer << QImage(src.size(), src.format());
-        this->d->m_rippleBuffer[1].fill(qRgba(0, 0, 0, 0));
+    if (!this->d->m_prevFrame) {
+        dst = src;
+        this->d->m_rippleBuffer[0] = AkVideoPacket(src.caps(), true);
+        this->d->m_rippleBuffer[1] = AkVideoPacket(src.caps(), true);
         this->d->m_curRippleBuffer = 0;
     } else {
-        QImage drops;
+        AkVideoPacket drop;
 
-        if (this->d->m_mode == RippleModeMotionDetect)
+        if (this->d->m_mode == RippleModeMotionDetect) {
             // Compute the difference between previous and current frame,
             // and save it to the buffer.
-            drops = this->d->imageDiff(this->d->m_prevFrame,
-                                       src,
-                                       this->d->m_threshold,
-                                       this->d->m_lumaThreshold,
-                                       this->d->m_amplitude);
-        else
-            drops = this->d->rainDrop(src.width(),
-                                      src.height(),
+            drop = this->d->imageDiff(this->d->m_prevFrame,
+                                      src,
+                                      this->d->m_threshold,
+                                      this->d->m_lumaThreshold,
                                       this->d->m_amplitude);
+        } else {
+            auto dropProbability = qBound(0.0, this->d->m_dropProbability, 1.0);
+            static std::default_random_engine generator;
+            std::bernoulli_distribution distribution(dropProbability);
+
+            if (distribution(generator)) {
+                auto minDropSize = qMax(this->d->m_minDropSize, 0);
+                auto maxDropSize = qMax(this->d->m_maxDropSize, 0);
+
+                if (minDropSize > maxDropSize)
+                    std::swap(minDropSize, maxDropSize);
+
+                auto dropSize =
+                        QRandomGenerator::global()->bounded(minDropSize,
+                                                            maxDropSize);
+                auto amplitude =
+                        QRandomGenerator::global()->bounded(-this->d->m_amplitude,
+                                                            this->d->m_amplitude);
+                drop = this->d->drop(src.caps().width(),
+                                     src.caps().height(),
+                                     dropSize,
+                                     dropSize,
+                                     amplitude,
+                                     this->d->m_dropSigma);
+            }
+        }
 
-        this->d->addDrops(this->d->m_rippleBuffer[this->d->m_curRippleBuffer], drops);
-        this->d->addDrops(this->d->m_rippleBuffer[1 - this->d->m_curRippleBuffer], drops);
-
-        this->d->ripple(this->d->m_rippleBuffer[this->d->m_curRippleBuffer],
-                        this->d->m_rippleBuffer[1 - this->d->m_curRippleBuffer],
-                        this->d->m_decay);
+        auto &topBuffer = this->d->m_rippleBuffer[this->d->m_curRippleBuffer];
+        auto &bottomBuffer = this->d->m_rippleBuffer[1 - this->d->m_curRippleBuffer];
+        this->d->addDrop(topBuffer, drop);
+        this->d->addDrop(bottomBuffer, drop);
+        this->d->ripple(topBuffer, bottomBuffer, this->d->m_decay);
+        this->d->m_curRippleBuffer = 1 - this->d->m_curRippleBuffer;
 
         // Apply buffer.
-        oFrame = this->d->applyWater(src,
-                                     this->d->m_rippleBuffer[this->d->m_curRippleBuffer]);
-        this->d->m_curRippleBuffer = 1 - this->d->m_curRippleBuffer;
+        dst = this->d->applyWater(src, topBuffer);
     }
 
-    this->d->m_prevFrame = src.copy();
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    this->d->m_prevFrame = src;
+
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
-void RippleElement::setMode(const QString &mode)
+void RippleElement::setMode(RippleMode mode)
 {
-    RippleMode modeEnum = rippleModeToStr->key(mode, RippleModeMotionDetect);
-
-    if (this->d->m_mode == modeEnum)
+    if (this->d->m_mode == mode)
         return;
 
-    this->d->m_mode = modeEnum;
+    this->d->m_mode = mode;
     emit this->modeChanged(mode);
 }
 
@@ -514,9 +261,45 @@ void RippleElement::setLumaThreshold(int
     emit this->lumaThresholdChanged(lumaThreshold);
 }
 
+void RippleElement::setMinDropSize(int minDropSize)
+{
+    if (this->d->m_minDropSize == minDropSize)
+        return;
+
+    this->d->m_minDropSize = minDropSize;
+    emit this->minDropSizeChanged(minDropSize);
+}
+
+void RippleElement::setMaxDropSize(int maxDropSize)
+{
+    if (this->d->m_maxDropSize == maxDropSize)
+        return;
+
+    this->d->m_maxDropSize = maxDropSize;
+    emit this->maxDropSizeChanged(maxDropSize);
+}
+
+void RippleElement::setDropSigma(qreal dropSigma)
+{
+    if (qFuzzyCompare(this->d->m_dropSigma, dropSigma))
+        return;
+
+    this->d->m_dropSigma = dropSigma;
+    emit this->dropSigmaChanged(dropSigma);
+}
+
+void RippleElement::setDropProbability(qreal dropProbability)
+{
+    if (qFuzzyCompare(this->d->m_dropProbability, dropProbability))
+        return;
+
+    this->d->m_dropProbability = dropProbability;
+    emit this->dropProbabilityChanged(dropProbability);
+}
+
 void RippleElement::resetMode()
 {
-    this->setMode("motionDetect");
+    this->setMode(RippleModeMotionDetect);
 }
 
 void RippleElement::resetAmplitude()
@@ -539,4 +322,282 @@ void RippleElement::resetLumaThreshold()
     this->setLumaThreshold(15);
 }
 
+void RippleElement::resetMinDropSize()
+{
+    this->setMinDropSize(3);
+}
+
+void RippleElement::resetMaxDropSize()
+{
+    this->setMaxDropSize(127);
+}
+
+void RippleElement::resetDropSigma()
+{
+    this->setDropSigma(1.0);
+}
+
+void RippleElement::resetDropProbability()
+{
+    this->setDropProbability(1.0);
+}
+
+QDataStream &operator >>(QDataStream &istream, RippleElement::RippleMode &mode)
+{
+    int modeInt;
+    istream >> modeInt;
+    mode = static_cast<RippleElement::RippleMode>(modeInt);
+
+    return istream;
+}
+
+QDataStream &operator <<(QDataStream &ostream, RippleElement::RippleMode mode)
+{
+    ostream << static_cast<int>(mode);
+
+    return ostream;
+}
+
+AkVideoPacket RippleElementPrivate::imageDiff(const AkVideoPacket &img1,
+                                              const AkVideoPacket &img2,
+                                              int threshold,
+                                              int lumaThreshold,
+                                              int strength)
+{
+    int width = qMin(img1.caps().width(), img2.caps().width());
+    int height = qMin(img1.caps().height(), img2.caps().height());
+    auto ocaps = img1.caps();
+    ocaps.setFormat(AkVideoCaps::Format_gray32);
+    AkVideoPacket diff(ocaps);
+    diff.copyMetadata(img1);
+
+    for (int y = 0; y < height; y++) {
+        auto img1Line = reinterpret_cast<const QRgb *>(img1.constLine(0, y));
+        auto img2Line = reinterpret_cast<const QRgb *>(img2.constLine(0, y));
+        auto diffLine = reinterpret_cast<qint32 *>(diff.line(0, y));
+
+        for (int x = 0; x < width; x++) {
+            auto &pixel1 = img1Line[x];
+            int r1 = qRed(pixel1);
+            int g1 = qGreen(pixel1);
+            int b1 = qBlue(pixel1);
+
+            auto &pixel2 = img2Line[x];
+            int r2 = qRed(pixel2);
+            int g2 = qGreen(pixel2);
+            int b2 = qBlue(pixel2);
+
+            int dr = r1 - r2;
+            int dg = g1 - g2;
+            int db = b1 - b2;
+
+            int s = dr * dr + dg * dg + db * db;
+            s = qRound(qSqrt(s / 3.0));
+            s = s < threshold? 0: s;
+
+            int gray = qGray(pixel2);
+            s = gray < lumaThreshold? 0: s;
+
+            diffLine[x] = (strength * s) >> 8;
+        }
+    }
+
+    return diff;
+}
+
+void RippleElementPrivate::addDrop(AkVideoPacket &buffer,
+                                   const AkVideoPacket &drop) const
+{
+    if (!buffer || !drop)
+        return;
+
+    for (int y = 0; y < buffer.caps().height(); y++) {
+        auto dropsLine = reinterpret_cast<const qint32 *>(drop.constLine(0, y));
+        auto bufferLine = reinterpret_cast<qint32 *>(buffer.line(0, y));
+
+        for (int x = 0; x < buffer.caps().width(); x++)
+            bufferLine[x] += dropsLine[x];
+    }
+}
+
+void RippleElementPrivate::ripple(const AkVideoPacket &topBuffer,
+                                  AkVideoPacket &bottomBuffer,
+                                  int decay) const
+{
+    AkVideoPacket combinedBuffer(topBuffer.caps(), true);
+
+    int widthM1 = topBuffer.caps().width() - 1;
+    int heightM1 = topBuffer.caps().height() - 1;
+
+    auto lineTSize = topBuffer.lineSize(0);
+    auto lineBSize = bottomBuffer.lineSize(0);
+    auto lineCSize = combinedBuffer.lineSize(0);
+
+    memset(bottomBuffer.data(), 0, lineBSize);
+    memset(bottomBuffer.line(0, heightM1), 0, lineBSize);
+    auto lineBottom = reinterpret_cast<qint32 *>(bottomBuffer.line(0, 1));
+
+    for (int y = 1; y < heightM1; y++) {
+        lineBottom[0] = lineBottom[widthM1] = 0;
+        lineBottom = reinterpret_cast<qint32 *>(reinterpret_cast<qint8 *>(lineBottom) + lineBSize);
+    }
+
+    // Wave simulation.
+
+    static const int wavesKernel[9] {
+        1,  1, 1,
+        1, -9, 1,
+        1,  1, 1,
+    };
+    const int wavesDivl2 = 3;
+
+    auto lineTop = reinterpret_cast<const qint32 *>(topBuffer.constLine(0, 1));
+    auto lineTopM1 = reinterpret_cast<const qint32 *>(topBuffer.constLine(0, 0));
+    auto lineBottom2 = reinterpret_cast<const qint32 *>(bottomBuffer.constLine(0, 1));
+    auto lineCombined = reinterpret_cast<qint32 *>(combinedBuffer.line(0, 1));
+
+    for (int y = 1; y < heightM1; y++) {
+        for (int x = 1; x < widthM1; x++) {
+            auto lineT = lineTopM1;
+            auto lineKernel = wavesKernel;
+            qint64 h = 0;
+
+            for (int j = 0; j < 3; j++) {
+                for (int i = 0; i < 3; i++)
+                    h += qint64(lineKernel[i]) * qint64(lineT[x + i - 1]);
+
+                lineT = reinterpret_cast<const qint32 *>(reinterpret_cast<const qint8 *>(lineT) + lineTSize);
+                lineKernel += 3;
+            }
+
+            h >>= wavesDivl2;
+            qint32 v = lineTop[x] - lineBottom2[x];
+            v += qint32(h) - (v >> decay);
+            lineCombined[x] = v + lineTop[x];
+        }
+
+        lineTop = reinterpret_cast<const qint32 *>(reinterpret_cast<const qint8 *>(lineTop) + lineTSize);
+        lineTopM1 = reinterpret_cast<const qint32 *>(reinterpret_cast<const qint8 *>(lineTopM1) + lineTSize);
+        lineBottom2 = reinterpret_cast<const qint32 *>(reinterpret_cast<const qint8 *>(lineBottom2) + lineBSize);
+        lineCombined = reinterpret_cast<qint32 *>(reinterpret_cast<qint8 *>(lineCombined) + lineCSize);
+    }
+
+    // Low pass filter.
+
+    static const int denoiseKernel[9] {
+        0,  1, 0,
+        1, 60, 1,
+        0,  1, 0,
+    };
+    const int denoiseDivl2 = 6;
+
+    auto lineCombined2 = reinterpret_cast<const qint32 *>(combinedBuffer.constLine(0, 1));
+    auto lineCombined2M1 = reinterpret_cast<const qint32 *>(combinedBuffer.constLine(0, 0));
+    auto lineBottom3 = reinterpret_cast<qint32 *>(bottomBuffer.line(0, 1));
+
+    for (int y = 1; y < heightM1; y++) {
+        for (int x = 1; x < widthM1; x++) {
+            auto lineC = lineCombined2M1;
+            auto lineKernel = denoiseKernel;
+            qint64 h = 0;
+
+            for (int j = 0; j < 3; j++) {
+                for (int i = 0; i < 3; i++)
+                    h += qint64(lineKernel[i]) * qint64(lineC[x + i - 1]);
+
+                lineC = reinterpret_cast<const qint32 *>(reinterpret_cast<const qint8 *>(lineC) + lineCSize);
+                lineKernel += 3;
+            }
+
+            lineBottom3[x] = qint32(h) >> denoiseDivl2;
+        }
+
+        lineCombined2 = reinterpret_cast<const qint32 *>(reinterpret_cast<const qint8 *>(lineCombined2) + lineCSize);
+        lineCombined2M1 = reinterpret_cast<const qint32 *>(reinterpret_cast<const qint8 *>(lineCombined2M1) + lineCSize);
+        lineBottom3 = reinterpret_cast<qint32 *>(reinterpret_cast<qint8 *>(lineBottom3) + lineBSize);
+    }
+}
+
+AkVideoPacket RippleElementPrivate::applyWater(const AkVideoPacket &src,
+                                               const AkVideoPacket &water) const
+{
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        int ym1 = qMax(y - 1, 0);
+        int yp1 = qMin(y + 1, src.caps().height() - 1);
+        auto bufLine = reinterpret_cast<const qint32 *>(water.constLine(0, y));
+        auto bufLineM1 = reinterpret_cast<const qint32 *>(water.constLine(0, ym1));
+        auto bufLineP1 = reinterpret_cast<const qint32 *>(water.constLine(0, yp1));
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            int xm1 = qMax(x - 1, 0);
+            int xp1 = qMin(x + 1, src.caps().width() - 1);
+            int xOff = bufLine[xm1] - bufLine[xp1];
+            int yOff = bufLineM1[x] - bufLineP1[x];
+
+            // Shading
+            int xq = qBound(0, x + xOff, src.caps().width() - 1);
+            int yq = qBound(0, y + yOff, src.caps().height() - 1);
+            auto srcPixel = src.pixel<QRgb>(0, xq, yq);
+            dstLine[x] = qRgba(qBound(0, qRed(srcPixel) + xOff, 255),
+                               qBound(0, qGreen(srcPixel) + xOff, 255),
+                               qBound(0, qBlue(srcPixel) + xOff, 255),
+                               qAlpha(srcPixel));
+        }
+    }
+
+    return dst;
+}
+
+AkVideoPacket RippleElementPrivate::drop(int bufferWidth,
+                                         int bufferHeight,
+                                         int dropWidth,
+                                         int dropHeight,
+                                         int amplitude,
+                                         qreal sigma) const
+{
+    AkVideoPacket drop({AkVideoCaps::Format_gray32,
+                        bufferWidth,
+                        bufferHeight, {}},
+                        true);
+
+    if (qFuzzyCompare(sigma, 0.0))
+        return drop;
+
+    int x = QRandomGenerator::global()->bounded(0, bufferWidth);
+    int y = QRandomGenerator::global()->bounded(0, bufferHeight);
+
+    int minX = -dropWidth / 2;
+    int maxX = 1 + dropWidth / 2;
+    int minY = -dropHeight / 2;
+    int maxY = 1 + dropHeight / 2;
+
+    qreal tsigma2 = -2.0 * sigma * sigma;
+    qreal emin = qExp(qreal(minX * minX + minY * minY) / tsigma2);
+    qreal oemin = 1.0 - emin;
+
+    for (int j = minY; j < maxY; j++) {
+        int yj = y + j;
+
+        if (yj >= 0 && yj < bufferHeight) {
+            auto line = reinterpret_cast<qint32 *>(drop.line(0, yj));
+            int jj = j * j;
+
+            for (int i = minX; i < maxX; i++) {
+                int xi = x + i;
+
+                if (xi >= 0 && xi < bufferWidth) {
+                    auto e = qExp(qreal(i * i + jj) / tsigma2);
+                    line[xi] = qRound(amplitude * (e - emin) / oemin);
+                }
+            }
+        }
+    }
+
+    return drop;
+}
+
 #include "moc_rippleelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Ripple/src/rippleelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Ripple/src/rippleelement.h
@@ -27,8 +27,7 @@ class RippleElementPrivate;
 class RippleElement: public AkElement
 {
     Q_OBJECT
-    Q_ENUMS(RippleMode)
-    Q_PROPERTY(QString mode
+    Q_PROPERTY(RippleMode mode
                READ mode
                WRITE setMode
                RESET resetMode
@@ -53,6 +52,26 @@ class RippleElement: public AkElement
                WRITE setLumaThreshold
                RESET resetLumaThreshold
                NOTIFY lumaThresholdChanged)
+    Q_PROPERTY(int minDropSize
+               READ minDropSize
+               WRITE setMinDropSize
+               RESET resetMinDropSize
+               NOTIFY minDropSizeChanged)
+    Q_PROPERTY(int maxDropSize
+               READ maxDropSize
+               WRITE setMaxDropSize
+               RESET resetMaxDropSize
+               NOTIFY maxDropSizeChanged)
+    Q_PROPERTY(qreal dropSigma
+               READ dropSigma
+               WRITE setDropSigma
+               RESET resetDropSigma
+               NOTIFY dropSigmaChanged)
+    Q_PROPERTY(qreal dropProbability
+               READ dropProbability
+               WRITE setDropProbability
+               RESET resetDropProbability
+               NOTIFY dropProbabilityChanged)
 
     public:
         enum RippleMode
@@ -60,43 +79,65 @@ class RippleElement: public AkElement
             RippleModeMotionDetect,
             RippleModeRain
         };
+        Q_ENUM(RippleMode)
 
         RippleElement();
         ~RippleElement();
 
-        Q_INVOKABLE QString mode() const;
+        Q_INVOKABLE RippleMode mode() const;
         Q_INVOKABLE int amplitude() const;
         Q_INVOKABLE int decay() const;
         Q_INVOKABLE int threshold() const;
         Q_INVOKABLE int lumaThreshold() const;
+        Q_INVOKABLE int minDropSize() const;
+        Q_INVOKABLE int maxDropSize() const;
+        Q_INVOKABLE qreal dropSigma() const;
+        Q_INVOKABLE qreal dropProbability() const;
 
     private:
         RippleElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
-        void modeChanged(const QString &mode);
+        void modeChanged(RippleMode mode);
         void amplitudeChanged(int amplitude);
         void decayChanged(int decay);
         void thresholdChanged(int threshold);
         void lumaThresholdChanged(int lumaThreshold);
+        void minDropSizeChanged(int minDropSize);
+        void maxDropSizeChanged(int maxDropSize);
+        void dropSigmaChanged(qreal dropSigma);
+        void dropProbabilityChanged(qreal dropProbability);
 
     public slots:
-        void setMode(const QString &mode);
+        void setMode(RippleMode mode);
         void setAmplitude(int amplitude);
         void setDecay(int decay);
         void setThreshold(int threshold);
         void setLumaThreshold(int lumaThreshold);
+        void setMinDropSize(int minDropSize);
+        void setMaxDropSize(int maxDropSize);
+        void setDropSigma(qreal dropSigma);
+        void setDropProbability(qreal dropProbability);
         void resetMode();
         void resetAmplitude();
         void resetDecay();
         void resetThreshold();
         void resetLumaThreshold();
+        void resetMinDropSize();
+        void resetMaxDropSize();
+        void resetDropSigma();
+        void resetDropProbability();
 };
 
+Q_DECL_EXPORT QDataStream &operator >>(QDataStream &istream, RippleElement::RippleMode &mode);
+Q_DECL_EXPORT QDataStream &operator <<(QDataStream &ostream, RippleElement::RippleMode mode);
+
+Q_DECLARE_METATYPE(RippleElement::RippleMode)
+
 #endif // RIPPLEELEMENT_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Rotate/CMakeLists.txt
@@ -0,0 +1,67 @@
+# Webcamoid, webcam capture application.
+# Copyright (C) 2022  Gonzalo Exequiel Pedone
+#
+# Webcamoid is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Webcamoid is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+#
+# Web-Site: http://webcamoid.github.io/
+
+cmake_minimum_required(VERSION 3.16)
+
+project(Rotate LANGUAGES CXX)
+
+include(../../cmake/ProjectCommons.cmake)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+
+set(QT_COMPONENTS
+    Gui
+    Qml)
+find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS
+             ${QT_COMPONENTS}
+             REQUIRED)
+find_package(Qt${QT_VERSION_MAJOR} ${QT_MINIMUM_VERSION} COMPONENTS
+             ${QT_COMPONENTS}
+             REQUIRED)
+add_library(Rotate SHARED
+            src/rotate.h
+            src/rotateelement.h
+            src/rotate.cpp
+            src/rotateelement.cpp
+            Rotate.qrc
+            pspec.json)
+
+if (WIN32)
+    set_target_properties(Rotate PROPERTIES
+                          RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
+elseif (NOT ANDROID)
+    set_target_properties(Rotate PROPERTIES
+                          LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
+endif ()
+
+add_dependencies(Rotate avkys)
+target_include_directories(Rotate
+                           PRIVATE ../../Lib/src)
+target_compile_definitions(Rotate PRIVATE AVKYS_PLUGIN_ROTATE)
+list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
+target_link_libraries(Rotate avkys ${QT_LIBS})
+set(QML_IMPORT_PATH ../../Lib/share/qml)
+
+if (WIN32)
+    install(TARGETS Rotate RUNTIME DESTINATION ${PLUGINSDIR})
+elseif (NOT ANDROID)
+    install(TARGETS Rotate DESTINATION ${PLUGINSDIR})
+endif ()
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Rotate/Rotate.qrc
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/Rotate">
+        <file>share/qml/main.qml</file>
+    </qresource>
+</RCC>
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Rotate/pspec.json
@@ -0,0 +1,12 @@
+{
+    "type": "WebcamoidPluginsCollection",
+    "plugins": [
+        {
+            "name": "Rotate",
+            "description": "Rotate",
+            "id": "VideoFilter/Rotate",
+            "implements": ["Element", "VideoFilter"],
+            "type": "qtplugin"
+        }
+    ]
+}
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Rotate/share/qml/main.qml
@@ -0,0 +1,81 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+import QtQuick 2.12
+import QtQuick.Controls 2.5
+import QtQuick.Layouts 1.3
+
+GridLayout {
+    columns: 3
+
+    Connections {
+        target: Rotate
+
+        function onAngleChanged(angle)
+        {
+            sldAngle.value = angle
+            spbAngle.value = angle
+        }
+    }
+
+    // Configure rotation angle.
+    Label {
+        id: lblAngle
+        text: qsTr("Angle")
+    }
+    Slider {
+        id: sldAngle
+        value: Rotate.angle
+        stepSize: 1
+        to: 360
+        Layout.fillWidth: true
+        Accessible.name: lblAngle.text
+
+        onValueChanged: Rotate.angle = value
+    }
+    SpinBox {
+        id: spbAngle
+        value: Rotate.angle
+        to: sldAngle.to
+        stepSize: sldAngle.stepSize
+        editable: true
+        Accessible.name: lblAngle.text
+
+        onValueChanged: Rotate.angle = Number(value)
+    }
+
+    Label {
+        id: txtKeep
+        text: qsTr("Keep resolution")
+    }
+    RowLayout {
+        Layout.columnSpan: 2
+        Layout.fillWidth: true
+
+        Label {
+            Layout.fillWidth: true
+        }
+        Switch {
+            checked: Rotate.keep
+            Accessible.name: txtKeep.text
+
+            onCheckedChanged: Rotate.keep = checked
+        }
+    }
+}
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Rotate/src/rotate.cpp
@@ -0,0 +1,36 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include "rotate.h"
+#include "rotateelement.h"
+
+QObject *Rotate::create(const QString &key, const QString &specification)
+{
+    Q_UNUSED(key)
+    Q_UNUSED(specification)
+
+    return new RotateElement();
+}
+
+QStringList Rotate::keys() const
+{
+    return {};
+}
+
+#include "moc_rotate.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Rotate/src/rotate.h
@@ -0,0 +1,36 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef ROTATE_H
+#define ROTATE_H
+
+#include <akplugin.h>
+
+class Rotate: public QObject, public AkPlugin
+{
+    Q_OBJECT
+    Q_INTERFACES(AkPlugin)
+    Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
+
+    public:
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
+};
+
+#endif // ROTATE_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Rotate/src/rotateelement.cpp
@@ -0,0 +1,207 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QMutex>
+#include <QQmlContext>
+#include <QVariant>
+#include <QtMath>
+#include <qrgb.h>
+#include <akfrac.h>
+#include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
+#include <akvideopacket.h>
+
+#include "rotateelement.h"
+
+#define VALUE_SHIFT 8
+
+class RotateElementPrivate
+{
+    public:
+        qreal m_angle {0.0};
+        bool m_keep {false};
+        qint64 m_kernel[4];
+        qint64 m_frameKernel[4];
+        bool m_clampBounds {false};
+        QMutex m_mutex;
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+
+        inline void updateMatrix(qreal angle);
+};
+
+RotateElement::RotateElement(): AkElement()
+{
+    this->d = new RotateElementPrivate;
+    this->d->updateMatrix(this->d->m_angle);
+}
+
+RotateElement::~RotateElement()
+{
+    delete this->d;
+}
+
+qreal RotateElement::angle() const
+{
+    return this->d->m_angle;
+}
+
+bool RotateElement::keep() const
+{
+    return this->d->m_keep;
+}
+
+QString RotateElement::controlInterfaceProvide(const QString &controlId) const
+{
+    Q_UNUSED(controlId)
+
+    return QString("qrc:/Rotate/share/qml/main.qml");
+}
+
+void RotateElement::controlInterfaceConfigure(QQmlContext *context,
+                                                       const QString &controlId) const
+{
+    Q_UNUSED(controlId)
+
+    context->setContextProperty("Rotate", const_cast<QObject *>(qobject_cast<const QObject *>(this)));
+    context->setContextProperty("controlId", this->objectName());
+}
+
+AkPacket RotateElement::iVideoStream(const AkVideoPacket &packet)
+{
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    this->d->m_mutex.lock();
+
+    int oWidth = 0;
+    int oHeight = 0;
+
+    if (this->d->m_keep) {
+        oWidth = src.caps().width();
+        oHeight = src.caps().height();
+    } else {
+        oWidth  = (src.caps().width() * this->d->m_frameKernel[0] + src.caps().height() * this->d->m_frameKernel[1]) >> VALUE_SHIFT;
+        oHeight = (src.caps().width() * this->d->m_frameKernel[2] + src.caps().height() * this->d->m_frameKernel[3]) >> VALUE_SHIFT;
+    }
+
+    auto caps = src.caps();
+    caps.setWidth(oWidth);
+    caps.setHeight(oHeight);
+    AkVideoPacket dst(caps);
+    dst.copyMetadata(src);
+
+    int scx = src.caps().width() >> 1;
+    int scy = src.caps().height() >> 1;
+    int dcx = dst.caps().width() >> 1;
+    int dcy = dst.caps().height() >> 1;
+
+    for (int y = 0; y < dst.caps().height(); y++) {
+        int dy = y - dcy;
+        auto oLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < dst.caps().width(); x++) {
+            int dx = x - dcx;
+            int xp = int(((dx * this->d->m_kernel[0] + dy * this->d->m_kernel[1]) >> VALUE_SHIFT) + scx);
+            int yp = int(((dx * this->d->m_kernel[2] + dy * this->d->m_kernel[3]) >> VALUE_SHIFT) + scy);
+
+            if (this->d->m_clampBounds) {
+                xp = qBound(0, xp, src.caps().width() - 1);
+                yp = qBound(0, yp, src.caps().height() - 1);
+            }
+
+            if (xp >= 0 && xp < src.caps().width()
+                && yp >= 0 && yp < src.caps().height()) {
+                auto iLine = reinterpret_cast<const QRgb *>(src.constLine(0, yp));
+                oLine[x] = iLine[xp];
+            } else {
+                oLine[x] = qRgba(0, 0, 0, 0);
+            }
+        }
+    }
+
+    this->d->m_mutex.unlock();
+
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
+}
+
+void RotateElement::setAngle(qreal angle)
+{
+    if (this->d->m_angle == angle)
+        return;
+
+    this->d->m_angle = angle;
+    emit this->angleChanged(angle);
+    this->d->updateMatrix(angle);
+}
+
+void RotateElement::setKeep(bool keep)
+{
+    if (this->d->m_keep == keep)
+        return;
+
+    this->d->m_keep = keep;
+    emit this->keepChanged(keep);
+}
+
+void RotateElement::resetAngle()
+{
+    this->setAngle(0.0);
+}
+
+void RotateElement::resetKeep()
+{
+    this->setKeep(false);
+}
+
+void RotateElementPrivate::updateMatrix(qreal angle)
+{
+    int mult = 1 << VALUE_SHIFT;
+    auto radians = angle * M_PI / 180.0f;
+    auto c = qRound64(mult * qCos(radians));
+    auto s = qRound64(mult * qSin(radians));
+    auto ca = qAbs(c);
+    auto sa = qAbs(s);
+
+    this->m_mutex.lock();
+
+    this->m_kernel[0] =  c;
+    this->m_kernel[1] = -s;
+    this->m_kernel[2] =  s;
+    this->m_kernel[3] =  c;
+
+    this->m_frameKernel[0] = ca;
+    this->m_frameKernel[1] = sa;
+    this->m_frameKernel[2] = sa;
+    this->m_frameKernel[3] = ca;
+
+    this->m_mutex.unlock();
+
+    this->m_clampBounds =
+            this->m_frameKernel[0] == 0 || this->m_frameKernel[0] == mult;
+}
+
+#include "moc_rotateelement.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Rotate/src/rotateelement.h
@@ -0,0 +1,68 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef ROTATEELEMENT_H
+#define ROTATEELEMENT_H
+
+#include <akelement.h>
+
+class RotateElementPrivate;
+
+class RotateElement: public AkElement
+{
+    Q_OBJECT
+    Q_PROPERTY(qreal angle
+               READ angle
+               WRITE setAngle
+               RESET resetAngle
+               NOTIFY angleChanged)
+    Q_PROPERTY(bool keep
+               READ keep
+               WRITE setKeep
+               RESET resetKeep
+               NOTIFY keepChanged)
+
+    public:
+        RotateElement();
+        ~RotateElement();
+
+        Q_INVOKABLE qreal angle() const;
+        Q_INVOKABLE bool keep() const;
+
+    private:
+        RotateElementPrivate *d;
+
+    protected:
+        QString controlInterfaceProvide(const QString &controlId) const override;
+        void controlInterfaceConfigure(QQmlContext *context,
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
+
+    signals:
+        void angleChanged(qreal angle);
+        void keepChanged(bool keep);
+
+    public slots:
+        void setAngle(qreal angle);
+        void setKeep(bool keep);
+        void resetAngle();
+        void resetKeep();
+};
+
+#endif // ROTATEELEMENT_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Saturated/CMakeLists.txt
@@ -0,0 +1,67 @@
+# Webcamoid, webcam capture application.
+# Copyright (C) 2021  Gonzalo Exequiel Pedone
+#
+# Webcamoid is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Webcamoid is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+#
+# Web-Site: http://webcamoid.github.io/
+
+cmake_minimum_required(VERSION 3.16)
+
+project(Saturated LANGUAGES CXX)
+
+include(../../cmake/ProjectCommons.cmake)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+
+set(QT_COMPONENTS
+    Gui
+    Qml)
+find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS
+             ${QT_COMPONENTS}
+             REQUIRED)
+find_package(Qt${QT_VERSION_MAJOR} ${QT_MINIMUM_VERSION} COMPONENTS
+             ${QT_COMPONENTS}
+             REQUIRED)
+add_library(Saturated SHARED
+            src/saturated.h
+            src/saturatedelement.h
+            src/saturated.cpp
+            src/saturatedelement.cpp
+            Saturated.qrc
+            pspec.json)
+
+if (WIN32)
+    set_target_properties(Saturated PROPERTIES
+                          RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
+elseif (NOT ANDROID)
+    set_target_properties(Saturated PROPERTIES
+                          LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
+endif ()
+
+add_dependencies(Saturated avkys)
+target_include_directories(Saturated
+                           PRIVATE ../../Lib/src)
+target_compile_definitions(Saturated PRIVATE AVKYS_PLUGIN_SATURATED)
+list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
+target_link_libraries(Saturated avkys ${QT_LIBS})
+set(QML_IMPORT_PATH ../../Lib/share/qml)
+
+if (WIN32)
+    install(TARGETS Saturated RUNTIME DESTINATION ${PLUGINSDIR})
+elseif (NOT ANDROID)
+    install(TARGETS Saturated DESTINATION ${PLUGINSDIR})
+endif ()
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Saturated/Saturated.qrc
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/Saturated">
+        <file>share/qml/main.qml</file>
+    </qresource>
+</RCC>
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Saturated/pspec.json
@@ -0,0 +1,12 @@
+{
+    "type": "WebcamoidPluginsCollection",
+    "plugins": [
+        {
+            "name": "Saturated",
+            "description": "Saturated Colors",
+            "id": "VideoFilter/Saturated",
+            "implements": ["Element", "VideoFilter"],
+            "type": "qtplugin"
+        }
+    ]
+}
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Saturated/share/qml/main.qml
@@ -0,0 +1,61 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2016  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+import QtQuick 2.12
+import QtQuick.Controls 2.5
+import QtQuick.Layouts 1.3
+
+GridLayout {
+    columns: 3
+
+    Connections {
+        target: Saturated
+
+        function onFactor(factor)
+        {
+            sldFactor.value = factor
+            spbFactor.value = factor
+        }
+    }
+
+    Label {
+        id: txtFactor
+        text: qsTr("Factor")
+    }
+    Slider {
+        id: sldFactor
+        value: Saturated.factor
+        stepSize: 1
+        to: 255
+        Layout.fillWidth: true
+        Accessible.name: txtFactor.text
+
+        onValueChanged: Saturated.factor = value
+    }
+    SpinBox {
+        id: spbFactor
+        value: Saturated.factor
+        to: sldFactor.to
+        stepSize: sldFactor.stepSize
+        editable: true
+        Accessible.name: txtFactor.text
+
+        onValueChanged: Saturated.factor = Number(value)
+    }
+}
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Saturated/src/saturated.cpp
@@ -0,0 +1,36 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2016  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include "saturated.h"
+#include "saturatedelement.h"
+
+QObject *Saturated::create(const QString &key, const QString &specification)
+{
+    Q_UNUSED(key)
+    Q_UNUSED(specification)
+
+    return new SaturatedElement();
+}
+
+QStringList Saturated::keys() const
+{
+    return {};
+}
+
+#include "moc_saturated.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Saturated/src/saturated.h
@@ -0,0 +1,36 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2016  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef SATURATED_H
+#define SATURATED_H
+
+#include <akplugin.h>
+
+class Saturated: public QObject, public AkPlugin
+{
+    Q_OBJECT
+    Q_INTERFACES(AkPlugin)
+    Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
+
+    public:
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
+};
+
+#endif // SATURATED_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Saturated/src/saturatedelement.cpp
@@ -0,0 +1,136 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2016  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QQmlContext>
+#include <qrgb.h>
+#include <akfrac.h>
+#include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
+#include <akvideopacket.h>
+
+#include "saturatedelement.h"
+
+class SaturatedElementPrivate
+{
+    public:
+        int m_factor {127};
+        quint8 *m_colorTable {nullptr};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+
+        void createTable();
+};
+
+SaturatedElement::SaturatedElement(): AkElement()
+{
+    this->d = new SaturatedElementPrivate;
+    this->d->createTable();
+}
+
+SaturatedElement::~SaturatedElement()
+{
+    if (this->d->m_colorTable)
+        delete [] this->d->m_colorTable;
+
+    delete this->d;
+}
+
+int SaturatedElement::factor() const
+{
+    return this->d->m_factor;
+}
+
+QString SaturatedElement::controlInterfaceProvide(const QString &controlId) const
+{
+    Q_UNUSED(controlId)
+
+    return QString("qrc:/Saturated/share/qml/main.qml");
+}
+
+void SaturatedElement::controlInterfaceConfigure(QQmlContext *context,
+                                                       const QString &controlId) const
+{
+    Q_UNUSED(controlId)
+
+    context->setContextProperty("Saturated", const_cast<QObject *>(qobject_cast<const QObject *>(this)));
+    context->setContextProperty("controlId", this->objectName());
+}
+
+AkPacket SaturatedElement::iVideoStream(const AkVideoPacket &packet)
+{
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    auto table = this->d->m_colorTable
+                 + 256 * qBound(0, this->d->m_factor, 255);
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto destLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = srcLine[x];
+            destLine[x] = qRgba(table[qRed(pixel)],
+                                table[qGreen(pixel)],
+                                table[qBlue(pixel)],
+                                qAlpha(pixel));
+        }
+    }
+
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
+}
+
+void SaturatedElement::setFactor(int factor)
+{
+    if (this->d->m_factor == factor)
+        return;
+
+    this->d->m_factor = factor;
+    emit this->factorChanged(factor);
+}
+
+void SaturatedElement::resetFactor()
+{
+    this->setFactor(127);
+}
+
+void SaturatedElementPrivate::createTable()
+{
+    this->m_colorTable = new quint8 [256 * 256];
+
+    for (int f = 0; f < 256; f++) {
+        int mean = 255 - f;
+        auto table = this->m_colorTable + 256 * f;
+
+        for (int c = 0; c < 256; c++)
+            table[c] = c > mean? 255: 0;
+    }
+}
+
+#include "moc_saturatedelement.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Saturated/src/saturatedelement.h
@@ -0,0 +1,59 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2016  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef SATURATEDELEMENT_H
+#define SATURATEDELEMENT_H
+
+#include <akelement.h>
+
+class SaturatedElementPrivate;
+
+class SaturatedElement: public AkElement
+{
+    Q_OBJECT
+    Q_PROPERTY(int factor
+               READ factor
+               WRITE setFactor
+               RESET resetFactor
+               NOTIFY factorChanged)
+
+    public:
+        SaturatedElement();
+        ~SaturatedElement();
+
+        Q_INVOKABLE int factor() const;
+
+    private:
+        SaturatedElementPrivate *d;
+
+    protected:
+        QString controlInterfaceProvide(const QString &controlId) const override;
+        void controlInterfaceConfigure(QQmlContext *context,
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
+
+    signals:
+        void factorChanged(int factor);
+
+    public slots:
+        void setFactor(int factor);
+        void resetFactor();
+};
+
+#endif // SATURATEDELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Scale/CMakeLists.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-# Webcamoid, webcam capture application.
-# Copyright (C) 2021  Gonzalo Exequiel Pedone
-#
-# Webcamoid is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Webcamoid is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
-#
-# Web-Site: http://webcamoid.github.io/
-
-cmake_minimum_required(VERSION 3.16)
-
-project(Scale LANGUAGES CXX)
-
-include(../../cmake/ProjectCommons.cmake)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-set(CMAKE_AUTOUIC ON)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-
-set(QT_COMPONENTS
-    Gui
-    Qml)
-find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS
-             ${QT_COMPONENTS}
-             REQUIRED)
-find_package(Qt${QT_VERSION_MAJOR} ${QT_MINIMUM_VERSION} COMPONENTS
-             ${QT_COMPONENTS}
-             REQUIRED)
-add_library(Scale SHARED
-            src/scale.h
-            src/scaleelement.h
-            src/scale.cpp
-            src/scaleelement.cpp
-            Scale.qrc
-            pspec.json)
-
-if (WIN32)
-    set_target_properties(Scale PROPERTIES
-                          RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
-elseif (NOT ANDROID)
-    set_target_properties(Scale PROPERTIES
-                          LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
-endif ()
-
-add_dependencies(Scale avkys)
-target_include_directories(Scale
-                           PRIVATE ../../Lib/src)
-target_compile_definitions(Scale PRIVATE AVKYS_PLUGIN_SCALE)
-list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
-target_link_libraries(Scale avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
-
-if (WIN32)
-    install(TARGETS Scale RUNTIME DESTINATION ${PLUGINSDIR})
-elseif (NOT ANDROID)
-    install(TARGETS Scale DESTINATION ${PLUGINSDIR})
-endif ()
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Scale/Scale.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
-    <qresource prefix="/Scale">
-        <file>share/qml/main.qml</file>
-    </qresource>
-</RCC>
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Scale/pspec.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-    "type": "WebcamoidPluginsCollection",
-    "plugins": [
-        {
-            "name": "Scale",
-            "description": "Scale frame",
-            "id": "VideoFilter/Scale",
-            "implements": ["Element", "VideoFilter"],
-            "type": "qtplugin"
-        }
-    ]
-}
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Scale/share/qml/main.qml
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2020  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-import QtQuick 2.12
-import QtQuick.Controls 2.5
-import QtQuick.Layouts 1.3
-import ScaleElement 1.0
-
-GridLayout {
-    columns: 2
-
-    function optionIndex(cbx, option)
-    {
-        var index = -1
-
-        for (var i = 0; i < cbx.model.count; i++)
-            if (cbx.model.get(i).option == option) {
-                index = i
-                break
-            }
-
-        return index
-    }
-
-    Label {
-        text: qsTr("Width")
-    }
-    TextField {
-        text: Scaling.width
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /-?\d+/
-        }
-        Layout.fillWidth: true
-
-        onTextChanged: Scaling.width = Number(text)
-    }
-    Label {
-        text: qsTr("Height")
-    }
-    TextField {
-        text: Scaling.height
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /-?\d+/
-        }
-        Layout.fillWidth: true
-
-        onTextChanged: Scaling.height = Number(text)
-    }
-    Label {
-        text: qsTr("Scaling mode")
-    }
-    ComboBox {
-        textRole: "text"
-        currentIndex: optionIndex(this, Scaling.scaling)
-        Layout.fillWidth: true
-        model: ListModel {
-            ListElement {
-                text: qsTr("Fast")
-                option: ScaleElement.Fast
-            }
-            ListElement {
-                text: qsTr("Linear")
-                option: ScaleElement.Linear
-            }
-        }
-
-        onCurrentIndexChanged: Scaling.scaling = model.get(currentIndex).option
-    }
-    Label {
-        text: qsTr("Aspect ratio mode")
-    }
-    ComboBox {
-        textRole: "text"
-        currentIndex: optionIndex(this, Scaling.aspectRatio)
-        Layout.fillWidth: true
-        model: ListModel {
-            ListElement {
-                text: qsTr("Ignore")
-                option: ScaleElement.Ignore
-            }
-            ListElement {
-                text: qsTr("Keep")
-                option: ScaleElement.Keep
-            }
-            ListElement {
-                text: qsTr("Expanding")
-                option: ScaleElement.Expanding
-            }
-        }
-
-        onCurrentIndexChanged: Scaling.aspectRatio = model.get(currentIndex).option
-    }
-}
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Scale/src/scale.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2020  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include <QQmlEngine>
-
-#include "scale.h"
-#include "scaleelement.h"
-
-QObject *Scale::create(const QString &key, const QString &specification)
-{
-    Q_UNUSED(key)
-    Q_UNUSED(specification)
-    qRegisterMetaType<ScaleElement::ScalingMode>("ScaleElementScalingMode");
-    qRegisterMetaTypeStreamOperators<ScaleElement::ScalingMode>("ScaleElementScalingMode");
-    qRegisterMetaType<ScaleElement::AspectRatioMode>("ScaleElementAspectRatioMode");
-    qRegisterMetaTypeStreamOperators<ScaleElement::AspectRatioMode>("ScaleElementAspectRatioMode");
-    qmlRegisterType<ScaleElement>("ScaleElement", 1, 0, "ScaleElement");
-
-    return new ScaleElement();
-}
-
-QStringList Scale::keys() const
-{
-    return {};
-}
-
-#include "moc_scale.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Scale/src/scale.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2020  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef SCALE_H
-#define SCALE_H
-
-#include <akplugin.h>
-
-class Scale: public QObject, public AkPlugin
-{
-    Q_OBJECT
-    Q_INTERFACES(AkPlugin)
-    Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
-
-    public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
-};
-
-#endif // SCALE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Scale/src/scaleelement.cpp
+++ /dev/null
@@ -1,207 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2020  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include <QImage>
-#include <QQmlContext>
-#include <akpacket.h>
-#include <akvideopacket.h>
-
-#include "scaleelement.h"
-
-class ScaleElementPrivate
-{
-    public:
-        int m_width {-1};
-        int m_height {-1};
-        ScaleElement::ScalingMode m_scaling {ScaleElement::Fast};
-        ScaleElement::AspectRatioMode m_aspectRatio {ScaleElement::Ignore};
-};
-
-ScaleElement::ScaleElement(): AkElement()
-{
-    this->d = new ScaleElementPrivate;
-}
-
-ScaleElement::~ScaleElement()
-{
-    delete this->d;
-}
-
-int ScaleElement::width() const
-{
-    return this->d->m_width;
-}
-
-int ScaleElement::height() const
-{
-    return this->d->m_height;
-}
-
-ScaleElement::ScalingMode ScaleElement::scaling() const
-{
-    return this->d->m_scaling;
-}
-
-ScaleElement::AspectRatioMode ScaleElement::aspectRatio() const
-{
-    return this->d->m_aspectRatio;
-}
-
-QString ScaleElement::controlInterfaceProvide(const QString &controlId) const
-{
-    Q_UNUSED(controlId)
-
-    return QString("qrc:/Scale/share/qml/main.qml");
-}
-
-void ScaleElement::controlInterfaceConfigure(QQmlContext *context,
-                                                const QString &controlId) const
-{
-    Q_UNUSED(controlId)
-
-    context->setContextProperty("Scaling", const_cast<QObject *>(qobject_cast<const QObject *>(this)));
-    context->setContextProperty("controlId", this->objectName());
-}
-
-AkPacket ScaleElement::iVideoStream(const AkVideoPacket &packet)
-{
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return {};
-
-    int width = this->d->m_width < 1? src.width(): this->d->m_width;
-    int height = this->d->m_height < 1? src.height(): this->d->m_height;
-    Qt::AspectRatioMode aspectMode = Qt::IgnoreAspectRatio;
-    Qt::TransformationMode mode = Qt::FastTransformation;
-
-    switch (this->d->m_aspectRatio) {
-    case Keep:
-        aspectMode = Qt::KeepAspectRatio;
-
-        break;
-
-    case Expanding:
-        aspectMode = Qt::KeepAspectRatioByExpanding;
-
-        break;
-
-    default:
-        break;
-    }
-
-    if (this->d->m_scaling == Linear)
-        mode = Qt::SmoothTransformation;
-
-    auto oPacket = AkVideoPacket::fromImage(src.scaled(width,
-                                                       height,
-                                                       aspectMode,
-                                                       mode), packet);
-    akSend(oPacket)
-}
-
-void ScaleElement::setWidth(int width)
-{
-    if (this->d->m_width == width)
-        return;
-
-    this->d->m_width = width;
-    emit this->widthChanged(this->d->m_width);
-}
-
-void ScaleElement::setHeight(int height)
-{
-    if (this->d->m_height == height)
-        return;
-
-    this->d->m_height = height;
-    emit this->heightChanged(this->d->m_height);
-}
-
-void ScaleElement::setScaling(ScalingMode scaling)
-{
-    if (this->d->m_scaling == scaling)
-        return;
-
-    this->d->m_scaling = scaling;
-    emit this->scalingChanged(this->d->m_scaling);
-}
-
-void ScaleElement::setAspectRatio(AspectRatioMode aspectRatio)
-{
-    if (this->d->m_aspectRatio == aspectRatio)
-        return;
-
-    this->d->m_aspectRatio = aspectRatio;
-    emit this->aspectRatioChanged(this->d->m_aspectRatio);
-}
-
-void ScaleElement::resetWidth()
-{
-    this->setWidth(-1);
-}
-
-void ScaleElement::resetHeight()
-{
-    this->setHeight(-1);
-}
-
-void ScaleElement::resetScaling()
-{
-    this->setScaling(Fast);
-}
-
-void ScaleElement::resetAspectRatio()
-{
-    this->setAspectRatio(Ignore);
-}
-
-QDataStream &operator >>(QDataStream &istream, ScaleElement::ScalingMode &scaling)
-{
-    int scalingInt;
-    istream >> scalingInt;
-    scaling = static_cast<ScaleElement::ScalingMode>(scalingInt);
-
-    return istream;
-}
-
-QDataStream &operator <<(QDataStream &ostream, ScaleElement::ScalingMode scaling)
-{
-    ostream << static_cast<int>(scaling);
-
-    return ostream;
-}
-
-QDataStream &operator >>(QDataStream &istream, ScaleElement::AspectRatioMode &aspectRatioMode)
-{
-    int aspectRatioModeInt;
-    istream >> aspectRatioModeInt;
-    aspectRatioMode = static_cast<ScaleElement::AspectRatioMode>(aspectRatioModeInt);
-
-    return istream;
-}
-
-QDataStream &operator <<(QDataStream &ostream, ScaleElement::AspectRatioMode aspectRatioMode)
-{
-    ostream << static_cast<int>(aspectRatioMode);
-
-    return ostream;
-}
-
-#include "moc_scaleelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Scale/src/scaleelement.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2020  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef SCALEELEMENT_H
-#define SCALEELEMENT_H
-
-#include <akelement.h>
-
-class ScaleElementPrivate;
-
-class ScaleElement: public AkElement
-{
-    Q_OBJECT
-    Q_DISABLE_COPY(ScaleElement)
-    Q_ENUMS(ScalingMode)
-    Q_ENUMS(AspectRatioMode)
-    Q_PROPERTY(int width
-               READ width
-               WRITE setWidth
-               RESET resetWidth
-               NOTIFY widthChanged)
-    Q_PROPERTY(int height
-               READ height
-               WRITE setHeight
-               RESET resetHeight
-               NOTIFY heightChanged)
-    Q_PROPERTY(ScalingMode scaling
-               READ scaling
-               WRITE setScaling
-               RESET resetScaling
-               NOTIFY scalingChanged)
-    Q_PROPERTY(AspectRatioMode aspectRatio
-               READ aspectRatio
-               WRITE setAspectRatio
-               RESET resetAspectRatio
-               NOTIFY aspectRatioChanged)
-
-    public:
-        enum ScalingMode {
-            Fast,
-            Linear
-        };
-        enum AspectRatioMode {
-            Ignore,
-            Keep,
-            Expanding
-        };
-
-        ScaleElement();
-        ~ScaleElement();
-
-        Q_INVOKABLE int width() const;
-        Q_INVOKABLE int height() const;
-        Q_INVOKABLE ScalingMode scaling() const;
-        Q_INVOKABLE AspectRatioMode aspectRatio() const;
-
-    private:
-        ScaleElementPrivate *d;
-
-    protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
-        void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
-
-    signals:
-        void widthChanged(int width);
-        void heightChanged(int height);
-        void scalingChanged(ScalingMode scaling);
-        void aspectRatioChanged(AspectRatioMode aspectRatio);
-
-    public slots:
-        void setWidth(int width);
-        void setHeight(int height);
-        void setScaling(ScalingMode scaling);
-        void setAspectRatio(AspectRatioMode aspectRatio);
-        void resetWidth();
-        void resetHeight();
-        void resetScaling();
-        void resetAspectRatio();
-};
-
-Q_DECL_EXPORT QDataStream &operator >>(QDataStream &istream, ScaleElement::ScalingMode &scaling);
-Q_DECL_EXPORT QDataStream &operator <<(QDataStream &ostream, ScaleElement::ScalingMode scaling);
-Q_DECL_EXPORT QDataStream &operator >>(QDataStream &istream, ScaleElement::AspectRatioMode &aspectRatioMode);
-Q_DECL_EXPORT QDataStream &operator <<(QDataStream &ostream, ScaleElement::AspectRatioMode aspectRatioMode);
-
-Q_DECLARE_METATYPE(ScaleElement::ScalingMode)
-Q_DECLARE_METATYPE(ScaleElement::AspectRatioMode)
-
-#endif // SCALEELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ScanLines/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/ScanLines/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(ScanLines
 target_compile_definitions(ScanLines PRIVATE AVKYS_PLUGIN_SCANLINES)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(ScanLines avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS ScanLines RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ScanLines/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/ScanLines/share/qml/main.qml
@@ -31,6 +31,7 @@ GridLayout {
     }
 
     Label {
+        id: txtShowLines
         text: qsTr("Show lines")
     }
     TextField {
@@ -41,10 +42,12 @@ GridLayout {
             regExp: /\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtShowLines.text
 
         onTextChanged: ScanLines.showSize = Number(text)
     }
     Label {
+        id: txtHideLines
         text: qsTr("Hide lines")
     }
     TextField {
@@ -55,10 +58,12 @@ GridLayout {
             regExp: /\d+/
         }
         Layout.fillWidth: true
+        Accessible.name: txtHideLines.text
 
         onTextChanged: ScanLines.hideSize = Number(text)
     }
     Label {
+        id: txtHideColor
         text: qsTr("Hide color")
     }
     RowLayout {
@@ -68,6 +73,8 @@ GridLayout {
         AK.ColorButton {
             currentColor: AkUtils.fromRgba(ScanLines.hideColor)
             title: qsTr("Choose the hide color")
+            showAlphaChannel: true
+            Accessible.description: txtHideColor.text
 
             onCurrentColorChanged: ScanLines.hideColor = AkUtils.toRgba(currentColor)
         }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ScanLines/src/scanlines.h
+++ webcamoid-9.0.0/libAvKys/Plugins/ScanLines/src/scanlines.h
@@ -29,8 +29,8 @@ class ScanLines: public QObject, public
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // SCANLINES_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ScanLines/src/scanlineselement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/ScanLines/src/scanlineselement.cpp
@@ -17,9 +17,11 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "scanlineselement.h"
@@ -30,15 +32,38 @@ class ScanLinesElementPrivate
         int m_showSize {1};
         int m_hideSize {4};
         QRgb m_hideColor {qRgb(0, 0, 0)};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+        qint64 *m_aiMultTable {nullptr};
+        qint64 *m_aoMultTable {nullptr};
+        qint64 *m_alphaDivTable {nullptr};
 };
 
 ScanLinesElement::ScanLinesElement(): AkElement()
 {
     this->d = new ScanLinesElementPrivate;
+
+    constexpr qint64 maxAi = 255;
+    qint64 maxAi2 = maxAi * maxAi;
+    constexpr qint64 alphaMult = 1 << 16;
+    this->d->m_aiMultTable = new qint64 [alphaMult];
+    this->d->m_aoMultTable = new qint64 [alphaMult];
+    this->d->m_alphaDivTable = new qint64 [alphaMult];
+
+    for (qint64 ai = 0; ai < 256; ai++)
+        for (qint64 ao = 0; ao < 256; ao++) {
+            auto alphaMask = (ai << 8) | ao;
+            auto a = maxAi2 - (maxAi - ai) * (maxAi - ao);
+            this->d->m_aiMultTable[alphaMask] = a? alphaMult * ai * maxAi / a: 0;
+            this->d->m_aoMultTable[alphaMask] = a? alphaMult * ao * (maxAi - ai) / a: 0;
+            this->d->m_alphaDivTable[alphaMask] = a / maxAi;
+        }
 }
 
 ScanLinesElement::~ScanLinesElement()
 {
+    delete [] this->d->m_aiMultTable;
+    delete [] this->d->m_aoMultTable;
+    delete [] this->d->m_alphaDivTable;
     delete this->d;
 }
 
@@ -75,36 +100,58 @@ void ScanLinesElement::controlInterfaceC
 
 AkPacket ScanLinesElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
+    this->d->m_videoConverter.begin();
+    auto dst = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
+    if (!dst)
+        return {};
 
     int showSize = this->d->m_showSize;
     int hideSize = this->d->m_hideSize;
+    int stripeSize = showSize + hideSize;
 
-    if (showSize < 1 && hideSize < 1)
-        akSend(packet)
-
-    for (int y = 0; y < src.height(); y++) {
-        for (int i = 0; i < showSize && y < src.height(); i++, y++)
-            memcpy(oFrame.scanLine(y), src.scanLine(y), size_t(src.bytesPerLine()));
+    if (stripeSize < 1) {
+        showSize = 1;
+        stripeSize = 2;
+    }
 
-        for (int j = 0; j < hideSize && y < src.height(); j++, y++) {
-            QRgb *line = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
+    auto hideColor = this->d->m_hideColor;
+    auto ri = qRed(hideColor);
+    auto gi = qGreen(hideColor);
+    auto bi = qBlue(hideColor);
+    auto ai = qAlpha(hideColor);
+    int i = 0;
+
+    for (int y = 0; y < dst.caps().height(); y++) {
+        if (i >= showSize) {
+            auto line = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+            for (int x = 0; x < dst.caps().width(); x++) {
+                auto &pixel = line[x];
+
+                qint64 ro = qRed(pixel);
+                qint64 go = qGreen(pixel);
+                qint64 bo = qBlue(pixel);
+                qint64 ao = qAlpha(pixel);
+
+                auto alphaMask = (ai << 8) | ao;
+                qint64 rt = (ri * this->d->m_aiMultTable[alphaMask] + ro * this->d->m_aoMultTable[alphaMask]) >> 16;
+                qint64 gt = (gi * this->d->m_aiMultTable[alphaMask] + go * this->d->m_aoMultTable[alphaMask]) >> 16;
+                qint64 bt = (bi * this->d->m_aiMultTable[alphaMask] + bo * this->d->m_aoMultTable[alphaMask]) >> 16;
+                qint64 &at = this->d->m_alphaDivTable[alphaMask];
 
-            for (int x = 0; x < src.width(); x++)
-                line[x] = this->d->m_hideColor;
+                pixel = qRgba(int(rt), int(gt), int(bt), int(at));
+            }
         }
 
-        y--;
+        i = (i + 1) % stripeSize;
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void ScanLinesElement::setShowSize(int showSize)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/ScanLines/src/scanlineselement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/ScanLines/src/scanlineselement.h
@@ -56,10 +56,10 @@ class ScanLinesElement: public AkElement
         ScanLinesElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void showSizeChanged(int showSize);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Scroll/CMakeLists.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-# Webcamoid, webcam capture application.
-# Copyright (C) 2021  Gonzalo Exequiel Pedone
-#
-# Webcamoid is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Webcamoid is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
-#
-# Web-Site: http://webcamoid.github.io/
-
-cmake_minimum_required(VERSION 3.16)
-
-project(Scroll LANGUAGES CXX)
-
-include(../../cmake/ProjectCommons.cmake)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-set(CMAKE_AUTOUIC ON)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-
-set(QT_COMPONENTS
-    Gui
-    Qml)
-find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS
-             ${QT_COMPONENTS}
-             REQUIRED)
-find_package(Qt${QT_VERSION_MAJOR} ${QT_MINIMUM_VERSION} COMPONENTS
-             ${QT_COMPONENTS}
-             REQUIRED)
-add_library(Scroll SHARED
-            src/scroll.h
-            src/scrollelement.h
-            src/scroll.cpp
-            src/scrollelement.cpp
-            Scroll.qrc
-            pspec.json)
-
-if (WIN32)
-    set_target_properties(Scroll PROPERTIES
-                          RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
-elseif (NOT ANDROID)
-    set_target_properties(Scroll PROPERTIES
-                          LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
-endif ()
-
-add_dependencies(Scroll avkys)
-target_include_directories(Scroll
-                           PRIVATE ../../Lib/src)
-target_compile_definitions(Scroll PRIVATE AVKYS_PLUGIN_SCROLL)
-list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
-target_link_libraries(Scroll avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
-
-if (WIN32)
-    install(TARGETS Scroll RUNTIME DESTINATION ${PLUGINSDIR})
-elseif (NOT ANDROID)
-    install(TARGETS Scroll DESTINATION ${PLUGINSDIR})
-endif ()
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Scroll/Scroll.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
-    <qresource prefix="/Scroll">
-        <file>share/qml/main.qml</file>
-    </qresource>
-</RCC>
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Scroll/pspec.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-    "type": "WebcamoidPluginsCollection",
-    "plugins": [
-        {
-            "name": "Scroll",
-            "description": "Broken TV",
-            "id": "VideoFilter/Scroll",
-            "implements": ["Element", "VideoFilter"],
-            "type": "qtplugin"
-        }
-    ]
-}
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Scroll/share/qml/main.qml
+++ /dev/null
@@ -1,116 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-import QtQuick 2.12
-import QtQuick.Controls 2.5
-import QtQuick.Layouts 1.3
-
-GridLayout {
-    columns: 3
-
-    Connections {
-        target: Scroll
-
-        function onSpeedChanged(speed)
-        {
-            sldSpeed.value = speed
-            spbSpeed.value = spbSpeed.multiplier * speed
-        }
-
-        function onNoiseChanged(noise)
-        {
-            sldNoise.value = noise
-            spbNoise.value = spbNoise.multiplier * noise
-        }
-    }
-
-    Label {
-        id: lblSpeed
-        text: qsTr("Vertical Sync")
-    }
-    Slider {
-        id: sldSpeed
-        value: Scroll.speed
-        stepSize: 0.01
-        from: -1
-        to: 1
-        Layout.fillWidth: true
-
-        onValueChanged: Scroll.speed = value
-    }
-    SpinBox {
-        id: spbSpeed
-        value: multiplier * Scroll.speed
-        from: multiplier * sldSpeed.from
-        to: multiplier * sldSpeed.to
-        stepSize: multiplier * sldSpeed.stepSize
-        editable: true
-
-        readonly property int decimals: 2
-        readonly property int multiplier: Math.pow(10, decimals)
-
-        validator: DoubleValidator {
-            bottom: Math.min(spbSpeed.from, spbSpeed.to)
-            top:  Math.max(spbSpeed.from, spbSpeed.to)
-        }
-        textFromValue: function(value, locale) {
-            return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
-        }
-        valueFromText: function(text, locale) {
-            return Number.fromLocaleString(locale, text) * multiplier
-        }
-        onValueModified: Scroll.speed = value / multiplier
-    }
-
-    Label {
-        id: lblNoise
-        text: qsTr("Noise")
-    }
-    Slider {
-        id: sldNoise
-        value: Scroll.noise
-        stepSize: 0.01
-        to: 1
-        Layout.fillWidth: true
-
-        onValueChanged: Scroll.noise = value
-    }
-    SpinBox {
-        id: spbNoise
-        value: multiplier * Scroll.noise
-        to: multiplier * sldNoise.to
-        stepSize: multiplier * sldNoise.stepSize
-        editable: true
-
-        readonly property int decimals: 2
-        readonly property int multiplier: Math.pow(10, decimals)
-
-        validator: DoubleValidator {
-            bottom: Math.min(spbNoise.from, spbNoise.to)
-            top:  Math.max(spbNoise.from, spbNoise.to)
-        }
-        textFromValue: function(value, locale) {
-            return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
-        }
-        valueFromText: function(text, locale) {
-            return Number.fromLocaleString(locale, text) * multiplier
-        }
-        onValueModified: Scroll.noise = value / multiplier
-    }
-}
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Scroll/src/scroll.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include "scroll.h"
-#include "scrollelement.h"
-
-QObject *Scroll::create(const QString &key, const QString &specification)
-{
-    Q_UNUSED(key)
-    Q_UNUSED(specification)
-
-    return new ScrollElement();
-}
-
-QStringList Scroll::keys() const
-{
-    return {};
-}
-
-#include "moc_scroll.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Scroll/src/scroll.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef SCROLL_H
-#define SCROLL_H
-
-#include <akplugin.h>
-
-class Scroll: public QObject, public AkPlugin
-{
-    Q_OBJECT
-    Q_INTERFACES(AkPlugin)
-    Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
-
-    public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
-};
-
-#endif // SCROLL_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Scroll/src/scrollelement.cpp
+++ /dev/null
@@ -1,164 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include <QPainter>
-#include <QQmlContext>
-#include <QRandomGenerator>
-#include <QTime>
-#include <akpacket.h>
-#include <akvideopacket.h>
-
-#include "scrollelement.h"
-
-class ScrollElementPrivate
-{
-    public:
-        qreal m_speed {0.25};
-        qreal m_noise {0.1};
-        qreal m_offset {0.0};
-        QSize m_curSize;
-
-        QImage generateNoise(const QSize &size, qreal persent) const;
-};
-
-ScrollElement::ScrollElement(): AkElement()
-{
-    this->d = new ScrollElementPrivate;
-}
-
-ScrollElement::~ScrollElement()
-{
-    delete this->d;
-}
-
-qreal ScrollElement::speed() const
-{
-    return this->d->m_speed;
-}
-
-qreal ScrollElement::noise() const
-{
-    return this->d->m_noise;
-}
-
-QString ScrollElement::controlInterfaceProvide(const QString &controlId) const
-{
-    Q_UNUSED(controlId)
-
-    return QString("qrc:/Scroll/share/qml/main.qml");
-}
-
-void ScrollElement::controlInterfaceConfigure(QQmlContext *context,
-                                              const QString &controlId) const
-{
-    Q_UNUSED(controlId)
-
-    context->setContextProperty("Scroll", const_cast<QObject *>(qobject_cast<const QObject *>(this)));
-    context->setContextProperty("controlId", this->objectName());
-}
-
-AkPacket ScrollElement::iVideoStream(const AkVideoPacket &packet)
-{
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame = QImage(src.size(), src.format());
-
-    if (src.size() != this->d->m_curSize) {
-        this->d->m_offset = 0.0;
-        this->d->m_curSize = src.size();
-    }
-
-    int offset = int(this->d->m_offset);
-
-    memcpy(oFrame.scanLine(0),
-           src.constScanLine(src.height() - offset - 1),
-           size_t(src.bytesPerLine() * offset));
-
-    memcpy(oFrame.scanLine(offset),
-           src.constScanLine(0),
-           size_t(src.bytesPerLine() * (src.height() - offset)));
-
-    QPainter painter;
-    painter.begin(&oFrame);
-    QImage noise = this->d->generateNoise(oFrame.size(), this->d->m_noise);
-    painter.drawImage(0, 0, noise);
-    painter.end();
-
-    this->d->m_offset += this->d->m_speed * oFrame.height();
-
-    if (this->d->m_offset >= qreal(src.height()))
-        this->d->m_offset = 0.0;
-    else if (this->d->m_offset < 0.0)
-        this->d->m_offset = src.height();
-
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
-}
-
-void ScrollElement::setSpeed(qreal speed)
-{
-    if (qFuzzyCompare(speed, this->d->m_speed))
-        return;
-
-    this->d->m_speed = speed;
-    emit this->speedChanged(speed);
-}
-
-void ScrollElement::setNoise(qreal noise)
-{
-    if (qFuzzyCompare(this->d->m_noise, noise))
-        return;
-
-    this->d->m_noise = noise;
-    emit this->noiseChanged(noise);
-}
-
-void ScrollElement::resetSpeed()
-{
-    this->setSpeed(0.25);
-}
-
-void ScrollElement::resetNoise()
-{
-    this->setNoise(0.1);
-}
-
-QImage ScrollElementPrivate::generateNoise(const QSize &size, qreal persent) const
-{
-    QImage noise(size, QImage::Format_ARGB32);
-    noise.fill(0);
-
-    auto peper = qRound(persent * size.width() * size.height());
-
-    for (int i = 0; i < peper; i++) {
-        int gray = QRandomGenerator::global()->bounded(256);
-        int alpha = QRandomGenerator::global()->bounded(256);
-        int x = QRandomGenerator::global()->bounded(noise.width());
-        int y = QRandomGenerator::global()->bounded(noise.height());
-        noise.setPixel(x, y, qRgba(gray, gray, gray, alpha));
-    }
-
-    return noise;
-}
-
-#include "moc_scrollelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Scroll/src/scrollelement.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2016  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef SCROLLELEMENT_H
-#define SCROLLELEMENT_H
-
-#include <akelement.h>
-
-class ScrollElementPrivate;
-
-class ScrollElement: public AkElement
-{
-    Q_OBJECT
-    Q_PROPERTY(qreal speed
-               READ speed
-               WRITE setSpeed
-               RESET resetSpeed
-               NOTIFY speedChanged)
-    Q_PROPERTY(qreal noise
-               READ noise
-               WRITE setNoise
-               RESET resetNoise
-               NOTIFY noiseChanged)
-
-    public:
-        ScrollElement();
-        ~ScrollElement();
-
-        Q_INVOKABLE qreal speed() const;
-        Q_INVOKABLE qreal noise() const;
-
-    private:
-        ScrollElementPrivate *d;
-
-    protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
-        void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
-
-    signals:
-        void speedChanged(qreal speed);
-        void noiseChanged(qreal noise);
-
-    public slots:
-        void setSpeed(qreal speed);
-        void setNoise(qreal noise);
-        void resetSpeed();
-        void resetNoise();
-};
-
-#endif // SCROLLELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Shagadelic/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Shagadelic/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Shagadelic
 target_compile_definitions(Shagadelic PRIVATE AVKYS_PLUGIN_SHAGADELIC)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Shagadelic avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Shagadelic RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Shagadelic/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Shagadelic/share/qml/main.qml
@@ -30,6 +30,7 @@ GridLayout {
     }
 
     Label {
+        id: txtMask
         text: qsTr("Mask")
     }
     TextField {
@@ -40,6 +41,7 @@ GridLayout {
             regExp: /(0x)?[0-9a-fA-F]{1,8}/
         }
         Layout.fillWidth: true
+        Accessible.name: txtMask.text
 
         onTextChanged: Shagadelic.mask = hexToInt(text)
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Shagadelic/src/shagadelic.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Shagadelic/src/shagadelic.h
@@ -29,8 +29,8 @@ class Shagadelic: public QObject, public
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // SHAGADELIC_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Shagadelic/src/shagadelicelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Shagadelic/src/shagadelicelement.cpp
@@ -17,11 +17,15 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
 #include <QRandomGenerator>
+#include <QSize>
 #include <QtMath>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "shagadelicelement.h"
@@ -29,8 +33,8 @@
 class ShagadelicElementPrivate
 {
     public:
-        QImage m_ripple;
-        QImage m_spiral;
+        AkVideoPacket m_ripple;
+        AkVideoPacket m_spiral;
         QSize m_curSize;
         quint32 m_mask {0xffffff};
         int m_rx {0};
@@ -42,9 +46,10 @@ class ShagadelicElementPrivate
         int m_bvx {0};
         int m_bvy {0};
         uchar m_phase {0};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 
-        QImage makeRipple(const QSize &size) const;
-        QImage makeSpiral(const QSize &size) const;
+        AkVideoPacket makeRipple(const QSize &size) const;
+        AkVideoPacket makeSpiral(const QSize &size) const;
         void init(const QSize &size);
 };
 
@@ -81,32 +86,37 @@ void ShagadelicElement::controlInterface
 
 AkPacket ShagadelicElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame = QImage(src.size(), src.format());
-
-    if (src.size() != this->d->m_curSize) {
-        this->d->init(src.size());
-        this->d->m_curSize = src.size();
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+    QSize frameSize(src.caps().width(), src.caps().height());
+
+    if (frameSize != this->d->m_curSize) {
+        this->d->init(frameSize);
+        this->d->m_curSize = frameSize;
     }
 
-    for (int y = 0; y < src.height(); y++) {
-        const QRgb *iLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        QRgb *oLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-        const quint8 *rLine = this->d->m_ripple.constScanLine(y + this->d->m_ry);
-        const quint8 *gLine = this->d->m_spiral.constScanLine(y);
-        const quint8 *bLine = this->d->m_ripple.constScanLine(y + this->d->m_by);
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto iLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto oLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+        auto rLine = this->d->m_ripple.constLine(0, y + this->d->m_ry);
+        auto gLine = this->d->m_spiral.constLine(0, y);
+        auto bLine = this->d->m_ripple.constLine(0, y + this->d->m_by);
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = iLine[x];
 
-        for (int x = 0; x < src.width(); x++) {
             // Color saturation
-            int r = qRed(iLine[x]) > 127? 255: 0;
-            int g = qGreen(iLine[x]) > 127? 255: 0;
-            int b = qBlue(iLine[x]) > 127? 255: 0;
-            int a = qAlpha(iLine[x]);
+            int r = qRed(pixel) > 127? 255: 0;
+            int g = qGreen(pixel) > 127? 255: 0;
+            int b = qBlue(pixel) > 127? 255: 0;
+            int a = qAlpha(pixel);
 
             int pr = char(rLine[x + this->d->m_rx] + this->d->m_phase * 2) >> 7;
             int pg = char(gLine[x] + this->d->m_phase * 3) >> 7;
@@ -120,19 +130,19 @@ AkPacket ShagadelicElement::iVideoStream
     this->d->m_phase -= 8;
 
     if ((this->d->m_rx + this->d->m_rvx) < 0
-        || (this->d->m_rx + this->d->m_rvx) >= src.width())
+        || (this->d->m_rx + this->d->m_rvx) >= src.caps().width())
         this->d->m_rvx = -this->d->m_rvx;
 
     if ((this->d->m_ry + this->d->m_rvy) < 0
-        || (this->d->m_ry + this->d->m_rvy) >= src.height())
+        || (this->d->m_ry + this->d->m_rvy) >= src.caps().height())
         this->d->m_rvy = -this->d->m_rvy;
 
     if ((this->d->m_bx + this->d->m_bvx) < 0
-        || (this->d->m_bx + this->d->m_bvx) >= src.width())
+        || (this->d->m_bx + this->d->m_bvx) >= src.caps().width())
         this->d->m_bvx = -this->d->m_bvx;
 
     if ((this->d->m_by + this->d->m_bvy) < 0
-        || (this->d->m_by + this->d->m_bvy) >= src.height())
+        || (this->d->m_by + this->d->m_bvy) >= src.caps().height())
         this->d->m_bvy = -this->d->m_bvy;
 
     this->d->m_rx += this->d->m_rvx;
@@ -140,8 +150,10 @@ AkPacket ShagadelicElement::iVideoStream
     this->d->m_bx += this->d->m_bvx;
     this->d->m_by += this->d->m_bvy;
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void ShagadelicElement::setMask(quint32 mask)
@@ -158,16 +170,19 @@ void ShagadelicElement::resetMask()
     this->setMask(0xffffff);
 }
 
-QImage ShagadelicElementPrivate::makeRipple(const QSize &size) const
+AkVideoPacket ShagadelicElementPrivate::makeRipple(const QSize &size) const
 {
-    QImage ripple(2 * size, QImage::Format_Grayscale8);
-
-    for (int y = 0; y < ripple.height(); y++) {
-        qreal yy = qreal(y) / size.width() - 1.0;
-        auto oLine = reinterpret_cast<quint8 *>(ripple.scanLine(y));
+    AkVideoPacket ripple({AkVideoCaps::Format_gray8,
+                          2 * size.width(),
+                          2 * size.height(),
+                          {}});
+
+    for (int y = 0; y < ripple.caps().height(); y++) {
+        int yy = (y - size.width()) / size.width();
+        auto oLine = reinterpret_cast<quint8 *>(ripple.line(0, y));
 
-        for (int x = 0; x < ripple.width(); x++) {
-            qreal xx = qreal(x) / size.width() - 1.0;
+        for (int x = 0; x < ripple.caps().width(); x++) {
+            int xx = (x - size.width()) / size.width();
             oLine[x] = uint(3000 * sqrt(xx * xx + yy * yy)) & 255;
         }
     }
@@ -175,18 +190,20 @@ QImage ShagadelicElementPrivate::makeRip
     return ripple;
 }
 
-QImage ShagadelicElementPrivate::makeSpiral(const QSize &size) const
+AkVideoPacket ShagadelicElementPrivate::makeSpiral(const QSize &size) const
 {
-    QImage spiral(size, QImage::Format_Grayscale8);
-    int yc = spiral.height() / 2;
-
-    for (int y = 0; y < spiral.height(); y++) {
-        qreal yy = qreal(y - yc) / spiral.width();
-        auto oLine = reinterpret_cast<quint8 *>(spiral.scanLine(y));
-
-        for (int x = 0; x < spiral.width(); x++) {
-            qreal xx = qreal(x) / spiral.width() - 0.5;
+    AkVideoPacket spiral({AkVideoCaps::Format_gray8,
+                          size.width(),
+                          size.height(),
+                          {}});
+    int yc = spiral.caps().height() / 2;
+
+    for (int y = 0; y < spiral.caps().height(); y++) {
+        qreal yy = qreal(y - yc) / spiral.caps().width();
+        auto oLine = reinterpret_cast<quint8 *>(spiral.line(0, y));
 
+        for (int x = 0; x < spiral.caps().width(); x++) {
+            qreal xx = qreal(x) / spiral.caps().width() - 0.5;
             oLine[x] = uint(256 * 9 * atan2(xx, yy) / M_PI
                             + 1800 * sqrt(xx * xx + yy * yy))
                        & 255;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Shagadelic/src/shagadelicelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Shagadelic/src/shagadelicelement.h
@@ -43,10 +43,10 @@ class ShagadelicElement: public AkElemen
         ShagadelicElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void maskChanged(quint32 mask);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/SwapRB/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/SwapRB/CMakeLists.txt
@@ -57,7 +57,6 @@ target_include_directories(SwapRB
 target_compile_definitions(SwapRB PRIVATE AVKYS_PLUGIN_SWAPRB)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(SwapRB avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS SwapRB RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/SwapRB/src/swaprb.h
+++ webcamoid-9.0.0/libAvKys/Plugins/SwapRB/src/swaprb.h
@@ -29,8 +29,8 @@ class SwapRB: public QObject, public AkP
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // SWAPRB_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/SwapRB/src/swaprbelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/SwapRB/src/swaprbelement.cpp
@@ -17,29 +17,61 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "swaprbelement.h"
 
+class SwapRBElementPrivate
+{
+    public:
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+};
+
 SwapRBElement::SwapRBElement(): AkElement()
 {
+    this->d = new SwapRBElementPrivate;
 }
 
 SwapRBElement::~SwapRBElement()
 {
+    delete this->d;
 }
 
 AkPacket SwapRBElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    if (!packet)
+        return {};
+
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (src.isNull())
+    if (!src)
         return {};
 
-    auto oPacket = AkVideoPacket::fromImage(src.rgbSwapped(), packet);
-    akSend(oPacket)
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    for (int y = 0; y < src.caps().height(); ++y) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); ++x)
+            dstLine[x] = qRgba(qBlue(srcLine[x]),
+                               qGreen(srcLine[x]),
+                               qRed(srcLine[x]),
+                               qAlpha(srcLine[x]));
+    }
+
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 #include "moc_swaprbelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/SwapRB/src/swaprbelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/SwapRB/src/swaprbelement.h
@@ -32,8 +32,11 @@ class SwapRBElement: public AkElement
         SwapRBElement();
         ~SwapRBElement();
 
+    private:
+        SwapRBElementPrivate *d;
+
     protected:
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 };
 
 #endif // SWAPRBELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Swirl/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Swirl/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Swirl
 target_compile_definitions(Swirl PRIVATE AVKYS_PLUGIN_SWIRL)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Swirl avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Swirl RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Swirl/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Swirl/share/qml/main.qml
@@ -35,6 +35,7 @@ GridLayout {
     }
 
     Label {
+        id: txtDegrees
         text: qsTr("Degrees")
     }
     Slider {
@@ -44,6 +45,7 @@ GridLayout {
         from: -360
         to: 360
         Layout.fillWidth: true
+        Accessible.name: txtDegrees.text
 
         onValueChanged: Swirl.degrees = value
     }
@@ -54,6 +56,7 @@ GridLayout {
         to: sldDegrees.to
         stepSize: sldDegrees.stepSize
         editable: true
+        Accessible.name: txtDegrees.text
 
         onValueChanged: Swirl.degrees = value
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Swirl/src/swirl.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Swirl/src/swirl.h
@@ -29,8 +29,8 @@ class Swirl: public QObject, public AkPl
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // SWIRL_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Swirl/src/swirlelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Swirl/src/swirlelement.cpp
@@ -17,10 +17,14 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
+#include <QSize>
 #include <QtMath>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "swirlelement.h"
@@ -29,6 +33,13 @@ class SwirlElementPrivate
 {
     public:
         qreal m_degrees {60.0};
+        QSize m_frameSize;
+        qreal m_currentDegrees {0.0};
+        int *m_rotationX {nullptr};
+        int *m_rotationY {nullptr};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+
+        void createRotationMap(int width, int height, qreal degrees);
 };
 
 SwirlElement::SwirlElement(): AkElement()
@@ -38,6 +49,12 @@ SwirlElement::SwirlElement(): AkElement(
 
 SwirlElement::~SwirlElement()
 {
+    if (this->d->m_rotationX)
+        delete [] this->d->m_rotationX;
+
+    if (this->d->m_rotationY)
+        delete [] this->d->m_rotationY;
+
     delete this->d;
 }
 
@@ -64,57 +81,49 @@ void SwirlElement::controlInterfaceConfi
 
 AkPacket SwirlElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
-
-    qreal xScale = 1.0;
-    qreal yScale = 1.0;
-    qreal xCenter = src.width() >> 1;
-    qreal yCenter = src.height() >> 1;
-    qreal radius = qMax(xCenter, yCenter);
-
-    if (src.width() > src.height())
-        yScale = qreal(src.width()) / src.height();
-    else if (src.width() < src.height())
-        xScale = qreal(src.height()) / src.width();
-
-    auto degrees = qDegreesToRadians(this->d->m_degrees);
-
-    for (int y = 0; y < src.height(); y++) {
-        auto iLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        auto oLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-        qreal yDistance = yScale * (y - yCenter);
+    auto degrees = this->d->m_degrees;
 
-        for (int x = 0; x < src.width(); x++) {
-            qreal xDistance = xScale * (x - xCenter);
-            qreal distance = xDistance * xDistance + yDistance * yDistance;
+    if (qFuzzyCompare(degrees, 0.0)) {
+        if (packet)
+            emit this->oStream(packet);
 
-            if (distance >= radius * radius)
-                oLine[x] = iLine[x];
-            else {
-                qreal factor = 1.0 - sqrt(distance) / radius;
-                qreal sine = sin(degrees * factor * factor);
-                qreal cosine = cos(degrees * factor * factor);
+        return packet;
+    }
 
-                int xp = int((cosine * xDistance - sine * yDistance) / xScale + xCenter);
-                int yp = int((sine * xDistance + cosine * yDistance) / yScale + yCenter);
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+    QSize frameSize(src.caps().width(), src.caps().height());
+
+    if (frameSize != this->d->m_frameSize
+        || !qFuzzyCompare(degrees, this->d->m_currentDegrees)) {
+        this->d->createRotationMap(src.caps().width(),
+                                   src.caps().height(),
+                                   degrees);
+        this->d->m_frameSize = frameSize;
+        this->d->m_currentDegrees = degrees;
+    }
 
-                if (!oFrame.rect().contains(xp, yp))
-                    continue;
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto yOffset = y * src.caps().width();
+        auto xLine = this->d->m_rotationX + yOffset;
+        auto yLine = this->d->m_rotationY + yOffset;
+        auto oLine = reinterpret_cast<QRgb *>(dst.line(0, y));
 
-                auto line = reinterpret_cast<const QRgb *>(src.constScanLine(yp));
-                oLine[x] = line[xp];
-            }
-        }
+        for (int x = 0; x < src.caps().width(); x++)
+            oLine[x] = src.pixel<QRgb>(0, xLine[x], yLine[x]);
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void SwirlElement::setDegrees(qreal degrees)
@@ -131,4 +140,65 @@ void SwirlElement::resetDegrees()
     this->setDegrees(60);
 }
 
+void SwirlElementPrivate::createRotationMap(int width,
+                                            int height,
+                                            qreal degrees)
+{
+    if (this->m_rotationX)
+        delete [] this->m_rotationX;
+
+    if (this->m_rotationY)
+        delete [] this->m_rotationY;
+
+    auto mapSize = size_t(width) * size_t(height);
+    this->m_rotationX = new int [mapSize];
+    this->m_rotationY = new int [mapSize];
+
+    qreal xScale = 1.0;
+    qreal yScale = 1.0;
+    qreal xCenter = width >> 1;
+    qreal yCenter = height >> 1;
+    qreal radius = qMax(xCenter, yCenter);
+
+    if (width > height)
+        yScale = qreal(width) / height;
+    else if (width < height)
+        xScale = qreal(height) / width;
+
+    auto radians = qDegreesToRadians(degrees);
+
+    for (int y = 0; y < height; y++) {
+        auto yOffset = y * width;
+        auto xLine = this->m_rotationX + yOffset;
+        auto yLine = this->m_rotationY + yOffset;
+        qreal yDistance = yScale * (y - yCenter);
+        auto yDistance2 = yDistance * yDistance;
+
+        for (int x = 0; x < width; x++) {
+            qreal xDistance = xScale * (x - xCenter);
+            qreal distance = xDistance * xDistance + yDistance2;
+
+            if (distance >= radius * radius) {
+                xLine[x] = x;
+                yLine[x] = y;
+            } else {
+                qreal factor = 1.0 - sqrt(distance) / radius;
+                qreal sine = qSin(radians * factor * factor);
+                qreal cosine = qCos(radians * factor * factor);
+
+                int xp = int((cosine * xDistance - sine * yDistance) / xScale + xCenter);
+                int yp = int((sine * xDistance + cosine * yDistance) / yScale + yCenter);
+
+                if (xp >= 0 && xp < width && yp >= 0 && yp < height) {
+                    xLine[x] = xp;
+                    yLine[x] = yp;
+                } else {
+                    xLine[x] = x;
+                    yLine[x] = y;
+                }
+            }
+        }
+    }
+}
+
 #include "moc_swirlelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Swirl/src/swirlelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Swirl/src/swirlelement.h
@@ -43,10 +43,10 @@ class SwirlElement: public AkElement
         SwirlElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void degreesChanged(qreal degrees);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Temperature/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Temperature/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Temperature
 target_compile_definitions(Temperature PRIVATE AVKYS_PLUGIN_TEMPERATURE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Temperature avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Temperature RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Temperature/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Temperature/share/qml/main.qml
@@ -35,6 +35,7 @@ GridLayout {
     }
 
     Label {
+        id: txtTemperature
         text: qsTr("Temperature")
     }
     Slider {
@@ -44,6 +45,7 @@ GridLayout {
         from: 1000
         to: 40000
         Layout.fillWidth: true
+        Accessible.name: txtTemperature.text
 
         onValueChanged: Temperature.temperature = value
     }
@@ -54,6 +56,7 @@ GridLayout {
         to: sldTemperature.to
         stepSize: sldTemperature.stepSize
         editable: true
+        Accessible.name: txtTemperature.text
 
         onValueChanged: Temperature.temperature = value
     }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Temperature/src/temperature.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Temperature/src/temperature.h
@@ -29,8 +29,8 @@ class Temperature: public QObject, publi
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // TEMPERATURE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Temperature/src/temperatureelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Temperature/src/temperatureelement.cpp
@@ -44,35 +44,37 @@
  *     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <QImage>
+#include <QMutex>
 #include <QQmlContext>
 #include <QtMath>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "temperatureelement.h"
-
-class TemperatureElementPrivate
-{
+class TemperatureElementPrivate {
     public:
         qreal m_temperature {6500.0};
-        qreal m_kr {0.0};
-        qreal m_kg {0.0};
-        qreal m_kb {0.0};
+        quint8 m_tableR [256];
+        quint8 m_tableG [256];
+        quint8 m_tableB [256];
+        QMutex m_mutex;
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
 
         inline void colorFromTemperature(qreal temperature,
                                          qreal *r,
                                          qreal *g,
-                                         qreal *b);
+                                         qreal *b) const;
+        inline void updateTemperatureTable(qreal temperature);
 };
 
 TemperatureElement::TemperatureElement(): AkElement()
 {
     this->d = new TemperatureElementPrivate;
-    this->d->colorFromTemperature(this->d->m_temperature,
-                                  &this->d->m_kr,
-                                  &this->d->m_kg,
-                                  &this->d->m_kb);
+    this->d->updateTemperatureTable(this->d->m_temperature);
 }
 
 TemperatureElement::~TemperatureElement()
@@ -103,33 +105,37 @@ void TemperatureElement::controlInterfac
 
 AkPacket TemperatureElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
-
-    for (int y = 0; y < src.height(); y++) {
-        auto srcLine = reinterpret_cast<const QRgb *>(src.constScanLine(y));
-        auto destLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++) {
-            int r = int(this->d->m_kr * qRed(srcLine[x]));
-            int g = int(this->d->m_kg * qGreen(srcLine[x]));
-            int b = int(this->d->m_kb * qBlue(srcLine[x]));
-
-            r = qBound(0, r, 255);
-            g = qBound(0, g, 255);
-            b = qBound(0, b, 255);
-
-            destLine[x] = qRgba(r, g, b, qAlpha(srcLine[x]));
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+
+    this->d->m_mutex.lock();
+
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const QRgb *>(src.constLine(0, y));
+        auto destLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < src.caps().width(); x++) {
+            auto &pixel = srcLine[x];
+            destLine[x] = qRgba(this->d->m_tableR[qRed(pixel)],
+                                this->d->m_tableG[qGreen(pixel)],
+                                this->d->m_tableB[qBlue(pixel)],
+                                qAlpha(pixel));
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    this->d->m_mutex.unlock();
+
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void TemperatureElement::setTemperature(qreal temperature)
@@ -138,10 +144,9 @@ void TemperatureElement::setTemperature(
         return;
 
     this->d->m_temperature = temperature;
-    this->d->colorFromTemperature(temperature,
-                                  &this->d->m_kr,
-                                  &this->d->m_kg,
-                                  &this->d->m_kb);
+    this->d->m_mutex.lock();
+    this->d->updateTemperatureTable(temperature);
+    this->d->m_mutex.unlock();
     emit this->temperatureChanged(temperature);
 }
 
@@ -153,7 +158,7 @@ void TemperatureElement::resetTemperatur
 void TemperatureElementPrivate::colorFromTemperature(qreal temperature,
                                                      qreal *r,
                                                      qreal *g,
-                                                     qreal *b)
+                                                     qreal *b) const
 {
     // This algorithm was taken from here:
     // http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/
@@ -182,4 +187,18 @@ void TemperatureElementPrivate::colorFro
         *b = 0.54320679 * qLn(temperature - 10) - 1.1962541;
 }
 
+void TemperatureElementPrivate::updateTemperatureTable(qreal temperature)
+{
+    qreal kr = 0.0;
+    qreal kg = 0.0;
+    qreal kb = 0.0;
+    this->colorFromTemperature(temperature, &kr, &kg, &kb);
+
+    for (int i = 0; i < 256; i++) {
+        this->m_tableR[i] = qBound(0, qRound(kr * i), 255);
+        this->m_tableG[i] = qBound(0, qRound(kg * i), 255);
+        this->m_tableB[i] = qBound(0, qRound(kb * i), 255);
+    }
+}
+
 #include "moc_temperatureelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Temperature/src/temperatureelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Temperature/src/temperatureelement.h
@@ -44,10 +44,10 @@ class TemperatureElement:
         TemperatureElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void temperatureChanged(qreal temperature);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/CMakeLists.txt
@@ -23,7 +23,6 @@ project(VideoCapture)
 add_subdirectory(src)
 add_subdirectory(src/capture/androidcamera)
 add_subdirectory(src/capture/avfoundation)
-add_subdirectory(src/capture/cmio)
 add_subdirectory(src/capture/dshow)
 add_subdirectory(src/capture/libuvc)
 add_subdirectory(src/capture/mediafoundation)
@@ -31,5 +30,4 @@ add_subdirectory(src/capture/ndkcamera)
 add_subdirectory(src/capture/v4l2sys)
 add_subdirectory(src/capture/v4lutils)
 add_subdirectory(src/convert/ffmpeg)
-add_subdirectory(src/convert/generic)
 add_subdirectory(src/convert/gstreamer)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/share/qml/CameraControl.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/share/qml/CameraControl.qml
@@ -33,7 +33,7 @@ GridLayout {
     property variant model: []
     property int minimumLeftWidth: 0
     property int minimumRightWidth: 0
-    readonly property alias leftWidth: lblRange.width
+    readonly property alias leftWidth: lblControlName.width
     readonly property alias rightWidth: spbRange.width
 
     signal controlChanged(string controlName, int value)
@@ -49,7 +49,7 @@ GridLayout {
     }
 
     Label {
-        id: lblRange
+        id: lblControlName
         text: controlParams.length > 0? controlParams[0]: ""
         Layout.minimumWidth: minimumLeftWidth
     }
@@ -61,6 +61,7 @@ GridLayout {
         value: grdCameraControl.value
         Layout.fillWidth: true
         visible: false
+        Accessible.name: lblControlName.text
 
         onValueChanged: {
             if (visible) {
@@ -78,6 +79,7 @@ GridLayout {
         //Layout.minimumWidth: minimumRightWidth
         visible: false
         editable: true
+        Accessible.name: lblControlName.text
 
         onValueChanged: {
             if (visible)
@@ -97,6 +99,7 @@ GridLayout {
         Switch {
             id: chkBool
             checked: grdCameraControl.value !== 0
+            Accessible.name: lblControlName.text
 
             onCheckedChanged: {
                 if (visible)
@@ -112,6 +115,7 @@ GridLayout {
         Layout.fillWidth: true
         Layout.columnSpan: 2
         visible: false
+        Accessible.description: lblControlName.text
 
         onCurrentIndexChanged: {
             if (visible)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/share/qml/main.qml
@@ -32,9 +32,9 @@ GridLayout {
 
         for (let i in caps) {
             let videoCaps = caps[i]
-            let filterCaps = {fourcc: videoCaps.fourcc,
+            let filterCaps = {format: videoCaps.format,
                               size: Qt.size(videoCaps.width, videoCaps.height),
-                              fps: videoCaps.fps}
+                              fps: AkFrac.create(videoCaps.fps).string}
             let pass = false
 
             for (let filterProp in filters)
@@ -60,9 +60,9 @@ GridLayout {
     {
         for (let i in caps) {
             let videoCaps = caps[i]
-            let filterCaps = {fourcc: videoCaps.fourcc,
+            let filterCaps = {format: videoCaps.format,
                               size: Qt.size(videoCaps.width, videoCaps.height),
-                              fps: videoCaps.fps}
+                              fps: AkFrac.create(videoCaps.fps).string}
             let pass = false
 
             for (let filterProp in filters)
@@ -86,8 +86,9 @@ GridLayout {
         for (let i in capsList) {
             let videoCaps = capsList[i]
             let size = Qt.size(videoCaps.width, videoCaps.height)
+            let fps = AkFrac.create(caps.fps).string
 
-            if (videoCaps.fourcc == caps.fourcc
+            if (videoCaps.format == caps.format
                 && size == caps.size
                 && videoCaps.fps == caps.fps)
                 return i
@@ -106,8 +107,10 @@ GridLayout {
     function createModel(list, prop)
     {
         let maps = {
-            fourcc: function (value) {
-                return {description: value,
+            format: function (value) {
+                return {description: typeof value === 'number'?
+                                         AkVideoCaps.pixelFormatToString(value).toUpperCase():
+                                         value.toUpperCase(),
                         value: value}
             },
             size: function (value) {
@@ -116,7 +119,7 @@ GridLayout {
             },
             fps: function (value) {
                 return {description: Number(AkFrac.create(value).value.toFixed(2)),
-                        value: value}
+                        value: AkFrac.create(value).string}
             }
         }
 
@@ -132,8 +135,20 @@ GridLayout {
         let ncaps = VideoCapture.listTracks().length
         let rawCaps = []
 
-        for (let i = 0; i < ncaps; i++)
-            rawCaps.push(AkCaps.create(VideoCapture.rawCaps(i)).toMap())
+        for (let i = 0; i < ncaps; i++) {
+            let caps = VideoCapture.rawCaps(i)
+
+            switch (AkCaps.create(caps).type) {
+            case AkCaps.CapsVideo:
+                rawCaps.push(AkVideoCaps.create(caps))
+                break
+            case AkCaps.CapsVideoCompressed:
+                rawCaps.push(AkCompressedVideoCaps.create(caps))
+                break
+            default:
+                break
+            }
+        }
 
         let index = mediaChanged || VideoCapture.streams.length < 1?
                     0: VideoCapture.streams[0]
@@ -141,23 +156,33 @@ GridLayout {
         if (index >= ncaps)
             index = 0;
 
-        let currentCaps = AkCaps.create(VideoCapture.rawCaps(index)).toMap()
+        let caps = VideoCapture.rawCaps(index)
+        let currentCaps = AkCaps.create(caps).type == AkCaps.CapsVideo?
+                            AkVideoCaps.create(caps):
+                            AkCompressedVideoCaps.create(caps)
 
         let filters = {}
-        cbxFormat.model = createModel(filterBy(rawCaps, "fourcc", filters),
-                                      "fourcc")
-        filters.fourcc = currentCaps.fourcc
+        cbxFormat.model = createModel(filterBy(rawCaps, "format", filters),
+                                      "format")
+        filters.format = currentCaps.format
         cbxResolution.model = createModel(filterBy(rawCaps, "size", filters),
                                           "size")
         filters.size = Qt.size(currentCaps.width, currentCaps.height)
         cbxFps.model = createModel(filterBy(rawCaps, "fps", filters), "fps")
 
-        cbxFormat.currentIndex = indexBy(cbxFormat.model, currentCaps.fourcc)
+        cbxFormat.currentIndex = indexBy(cbxFormat.model, currentCaps.format)
         cbxResolution.currentIndex = indexBy(cbxResolution.model,
                                              Qt.size(currentCaps.width,
                                                      currentCaps.height))
         cbxFps.currentIndex = indexBy(cbxFps.model, currentCaps.fps)
 
+        cbxFormat.currentIndex = indexBy(cbxFormat.model, currentCaps.format)
+        cbxResolution.currentIndex = indexBy(cbxResolution.model,
+                                             Qt.size(currentCaps.width,
+                                                     currentCaps.height))
+        cbxFps.currentIndex = indexBy(cbxFps.model,
+                                      AkFrac.create(currentCaps.fps).string)
+
         cbxFormat.onCurrentIndexChanged.connect(cbxFormat.update)
         cbxResolution.onCurrentIndexChanged.connect(cbxResolution.update)
         cbxFps.onCurrentIndexChanged.connect(cbxFps.update)
@@ -168,11 +193,23 @@ GridLayout {
         let ncaps = VideoCapture.listTracks().length
         let rawCaps = []
 
-        for (let i = 0; i < ncaps; i++)
-            rawCaps.push(AkCaps.create(VideoCapture.rawCaps(i)).toMap())
+        for (let i = 0; i < ncaps; i++) {
+            let caps = VideoCapture.rawCaps(i)
+
+            switch (AkCaps.create(caps).type) {
+            case AkCaps.CapsVideo:
+                rawCaps.push(AkVideoCaps.create(caps))
+                break
+            case AkCaps.CapsVideoCompressed:
+                rawCaps.push(AkCompressedVideoCaps.create(caps))
+                break
+            default:
+                break
+            }
+        }
 
         let maps = {
-            fourcc: cbxFormat.model[cbxFormat.currentIndex]?
+            format: cbxFormat.model[cbxFormat.currentIndex]?
                     cbxFormat.model[cbxFormat.currentIndex].value:
                     cbxFormat.model[0].value,
             size: cbxResolution.model[cbxResolution.currentIndex]?
@@ -289,10 +326,11 @@ GridLayout {
         textRole: "description"
         Layout.fillWidth: true
         Layout.columnSpan: 2
+        Accessible.description: lblFormat.text
 
         function update()
         {
-            recCameraControls.updateStreams(["fourcc"])
+            recCameraControls.updateStreams(["format"])
         }
     }
     Label {
@@ -308,10 +346,11 @@ GridLayout {
         textRole: "description"
         Layout.fillWidth: true
         Layout.columnSpan: 2
+        Accessible.description: lblResolution.text
 
         function update()
         {
-            recCameraControls.updateStreams(["fourcc", "size"])
+            recCameraControls.updateStreams(["format", "size"])
         }
     }
     Label {
@@ -327,10 +366,11 @@ GridLayout {
         textRole: "description"
         Layout.fillWidth: true
         Layout.columnSpan: 2
+        Accessible.description: lblFps.text
 
         function update()
         {
-            recCameraControls.updateStreams(["fourcc", "size", "fps"])
+            recCameraControls.updateStreams(["format", "size", "fps"])
         }
     }
     Label {
@@ -342,6 +382,7 @@ GridLayout {
         text: qsTr("Reset")
         icon.source: "image://icons/reset"
         Layout.minimumWidth: minimumWidth
+        Accessible.description: qsTr("Reset to default values")
 
         property int minimumWidth: 75
 
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/CMakeLists.txt
@@ -71,7 +71,6 @@ if (WIN32)
     target_link_libraries(VideoCaptureSrc ole32)
 endif ()
 
-set(QML_IMPORT_PATH ../../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS VideoCaptureSrc RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture.cpp
@@ -48,11 +48,11 @@ QList<int> Capture::streams()
     return QList<int>();
 }
 
-QList<int> Capture::listTracks(const QString &mimeType)
+QList<int> Capture::listTracks(AkCaps::CapsType type)
 {
-    Q_UNUSED(mimeType)
+    Q_UNUSED(type)
 
-    return QList<int>();
+    return {};
 }
 
 QString Capture::ioMethod() const
@@ -72,18 +72,11 @@ QString Capture::description(const QStri
     return QString();
 }
 
-QVariantList Capture::caps(const QString &webcam) const
+CaptureVideoCaps Capture::caps(const QString &webcam) const
 {
     Q_UNUSED(webcam)
 
-    return QVariantList();
-}
-
-QString Capture::capsDescription(const AkCaps &caps) const
-{
-    Q_UNUSED(caps)
-
-    return QString();
+    return {};
 }
 
 QVariantList Capture::imageControls() const
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture.h
@@ -20,13 +20,13 @@
 #ifndef CAPTURE_H
 #define CAPTURE_H
 
-#include <QObject>
+#include <akcaps.h>
 
 class Capture;
-class AkCaps;
 class AkPacket;
 
 using CapturePtr = QSharedPointer<Capture>;
+using CaptureVideoCaps = QVector<AkCaps>;
 
 class Capture: public QObject
 {
@@ -61,12 +61,11 @@ class Capture: public QObject
         Q_INVOKABLE virtual QStringList webcams() const;
         Q_INVOKABLE virtual QString device() const;
         Q_INVOKABLE virtual QList<int> streams();
-        Q_INVOKABLE virtual QList<int> listTracks(const QString &mimeType);
+        Q_INVOKABLE virtual QList<int> listTracks(AkCaps::CapsType type);
         Q_INVOKABLE virtual QString ioMethod() const;
         Q_INVOKABLE virtual int nBuffers() const;
         Q_INVOKABLE virtual QString description(const QString &webcam) const;
-        Q_INVOKABLE virtual QVariantList caps(const QString &webcam) const;
-        Q_INVOKABLE virtual QString capsDescription(const AkCaps &caps) const;
+        Q_INVOKABLE virtual CaptureVideoCaps caps(const QString &webcam) const;
         Q_INVOKABLE virtual QVariantList imageControls() const;
         Q_INVOKABLE virtual bool setImageControls(const QVariantMap &imageControls);
         Q_INVOKABLE virtual bool resetImageControls();
@@ -77,13 +76,13 @@ class Capture: public QObject
 
     signals:
         void errorChanged(const QString &error);
-        void webcamsChanged(const QStringList &webcams) const;
+        void webcamsChanged(const QStringList &webcams);
         void deviceChanged(const QString &device);
         void streamsChanged(const QList<int> &streams);
         void ioMethodChanged(const QString &ioMethod);
         void nBuffersChanged(int nBuffers);
-        void imageControlsChanged(const QVariantMap &imageControls) const;
-        void cameraControlsChanged(const QVariantMap &cameraControls) const;
+        void imageControlsChanged(const QVariantMap &imageControls);
+        void cameraControlsChanged(const QVariantMap &cameraControls);
 
     public slots:
         virtual bool init();
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/androidcamera/src/captureandroidcamera.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/androidcamera/src/captureandroidcamera.cpp
@@ -31,6 +31,7 @@
 #include <akcaps.h>
 #include <akfrac.h>
 #include <akpacket.h>
+#include <akvideoformatspec.h>
 #include <akvideopacket.h>
 
 #include "captureandroidcamera.h"
@@ -41,12 +42,14 @@
 #define CAMERA_FACING_BACK  0
 #define CAMERA_FACING_FRONT 1
 
+#define MAKE_FOURCC(a, b, c, d) AK_MAKE_FOURCC(d, c, b, a)
+
 enum ImageFormat
 {
     TRANSLUCENT       = -3,
     TRANSPARENT       = -2,
     OPAQUE            = -1,
-    UNKNOWN           = AK_FOURCC_NULL,
+    UNKNOWN           = 0,
     RGBA_8888         = 1,
     RGBX_8888         = 2,
     RGB_888           = 3,
@@ -73,57 +76,45 @@ enum ImageFormat
     RGBA_1010102      = 43,
     JPEG              = 256,
     DEPTH_POINT_CLOUD = 257,
-    Y8                = AkFourCCR('Y', '8', ' ', ' '),
-    YV12              = AkFourCCR('Y', 'V', '1', '2'),
-    DEPTH16           = AkFourCCR('Y', '1', '6', 'D'),
-    DEPTH_JPEG        = AkFourCCR('c', 'i', 'e', 'i'),
+    Y8                = MAKE_FOURCC('Y', '8', ' ', ' '),
+    YV12              = MAKE_FOURCC('Y', 'V', '1', '2'),
+    DEPTH16           = MAKE_FOURCC('Y', '1', '6', 'D'),
+    DEPTH_JPEG        = MAKE_FOURCC('c', 'i', 'e', 'i'),
 };
 
-using ImageFormatToStrMap = QMap<ImageFormat, QString>;
+using AndroidFmtToAkFmtMap = QMap<__u32, AkVideoCaps::PixelFormat>;
 
-inline const ImageFormatToStrMap initImageFormatToStrMap()
+inline AndroidFmtToAkFmtMap initAndroidFmtToAkFmt()
 {
-    const ImageFormatToStrMap imgFmtToStrMap = {
-        {ImageFormat::TRANSLUCENT      , "TRANSLUCENT"      },
-        {ImageFormat::TRANSPARENT      , "TRANSPARENT"      },
-        {ImageFormat::OPAQUE           , "OPAQUE"           },
-        {ImageFormat::UNKNOWN          , "UNKNOWN"          },
-        {ImageFormat::RGBA_8888        , "RGBA"             },
-        {ImageFormat::RGBX_8888        , "RGBX"             },
-        {ImageFormat::RGB_888          , "RGB"              },
-        {ImageFormat::RGB_565          , "RGB565"           },
-        {ImageFormat::RGBA_5551        , "RGB555"           },
-        {ImageFormat::RGBA_4444        , "RGBA4444"         },
-        {ImageFormat::A_8              , "GRAY8"            },
-        {ImageFormat::L_8              , "GRAY8"            },
-        {ImageFormat::LA_88            , "GRAYA8"           },
-        {ImageFormat::RGB_332          , "RGB332"           },
-        {ImageFormat::NV16             , "NV16"             },
-        {ImageFormat::NV21             , "NV21"             },
-        {ImageFormat::YUY2             , "YUY2"             },
-        {ImageFormat::RGBA_F16         , "RGBAF16"          },
-        {ImageFormat::RAW_SENSOR       , "RAW_SENSOR"       },
-        {ImageFormat::YUV_420_888      , "YU12"             },
-        {ImageFormat::PRIVATE          , "PRIVATE"          },
-        {ImageFormat::RAW_PRIVATE      , "RAW_PRIVATE"      },
-        {ImageFormat::RAW10            , "SGRBG10"          },
-        {ImageFormat::RAW12            , "SGRBG12"          },
-        {ImageFormat::YUV_422_888      , "YUV422P"          },
-        {ImageFormat::FLEX_RGB_888     , "FLEX_RGB_888"     },
-        {ImageFormat::FLEX_RGBA_8888   , "FLEX_RGBA_8888"   },
-        {ImageFormat::RGBA_1010102     , "RGBA_1010102"     },
-        {ImageFormat::JPEG             , "JPEG"             },
-        {ImageFormat::DEPTH_POINT_CLOUD, "DEPTH_POINT_CLOUD"},
-        {ImageFormat::Y8               , "GRAY8"            },
-        {ImageFormat::YV12             , "YV12"             },
-        {ImageFormat::DEPTH16          , "DEPTH16"          },
-        {ImageFormat::DEPTH_JPEG       , "DEPTH_JPEG"       },
+    AndroidFmtToAkFmtMap androidFmtToAkFmt {
+        {RGBA_8888     , AkVideoCaps::Format_rgba       },
+        {RGBX_8888     , AkVideoCaps::Format_rgb0       },
+        {RGB_888       , AkVideoCaps::Format_rgb24      },
+        {RGB_565       , AkVideoCaps::Format_rgb565     },
+        {RGBA_5551     , AkVideoCaps::Format_rgba5551   },
+        {RGBA_4444     , AkVideoCaps::Format_rgba4444   },
+        {A_8           , AkVideoCaps::Format_gray8      },
+        {L_8           , AkVideoCaps::Format_gray8      },
+        {LA_88         , AkVideoCaps::Format_graya8     },
+        {RGB_332       , AkVideoCaps::Format_rgb332     },
+        {NV16          , AkVideoCaps::Format_nv16       },
+        {NV21          , AkVideoCaps::Format_nv21       },
+        {YUY2          , AkVideoCaps::Format_yuyv422    },
+        {YUV_420_888   , AkVideoCaps::Format_yuv420p    },
+        {YUV_422_888   , AkVideoCaps::Format_yuv422p    },
+        {FLEX_RGB_888  , AkVideoCaps::Format_rgb24p     },
+        {FLEX_RGBA_8888, AkVideoCaps::Format_rgbap      },
+        {RGBA_1010102  , AkVideoCaps::Format_rgba1010102},
+        {Y8            , AkVideoCaps::Format_gray8      },
+        {YV12          , AkVideoCaps::Format_yvu420p    },
     };
 
-    return imgFmtToStrMap;
+    return androidFmtToAkFmt;
 }
 
-Q_GLOBAL_STATIC_WITH_ARGS(ImageFormatToStrMap, imgFmtToStrMap, (initImageFormatToStrMap()))
+Q_GLOBAL_STATIC_WITH_ARGS(AndroidFmtToAkFmtMap,
+                          androidFmtToAkFmt,
+                          (initAndroidFmtToAkFmt()))
 
 enum ControlType
 {
@@ -146,14 +137,14 @@ using ControlVector = QVector<Control>;
 inline const ControlVector &initImageControls()
 {
     static const ControlVector controls {
-        {ControlType::Menu   ,          "SceneMode/s",              "Scene Mode", "auto"},
-        {ControlType::Boolean, "AutoWhiteBalanceLock", "Auto White Balance Lock",   true},
-        {ControlType::Menu   ,         "WhiteBalance",           "White Balance", "auto"},
-        {ControlType::Boolean,     "AutoExposureLock",      "Auto Exposure Lock",   true},
-        {ControlType::Integer, "ExposureCompensation",   "Exposure Compensation",      0},
-        {ControlType::Menu   ,          "Antibanding",             "Antibanding", "auto"},
-        {ControlType::Boolean,   "VideoStabilization",     "Video Stabilization",   true},
-        {ControlType::Menu   ,        "ColorEffect/s",            "Color Effect", "none"},
+        {ControlType::Menu   , "SceneMode/s"         , "Scene Mode"             , "auto"},
+        {ControlType::Boolean, "AutoWhiteBalanceLock", "Auto White Balance Lock", true  },
+        {ControlType::Menu   , "WhiteBalance"        , "White Balance"          , "auto"},
+        {ControlType::Boolean, "AutoExposureLock"    , "Auto Exposure Lock"     , true  },
+        {ControlType::Integer, "ExposureCompensation", "Exposure Compensation"  , 0     },
+        {ControlType::Menu   , "Antibanding"         , "Antibanding"            , "auto"},
+        {ControlType::Boolean, "VideoStabilization"  , "Video Stabilization"    , true  },
+        {ControlType::Menu   , "ColorEffect/s"       , "Color Effect"           , "none"},
     };
 
     return controls;
@@ -182,7 +173,7 @@ class CaptureAndroidCameraPrivate
         QList<int> m_streams;
         QStringList m_devices;
         QMap<QString, QString> m_descriptions;
-        QMap<QString, QVariantList> m_devicesCaps;
+        QMap<QString, CaptureVideoCaps> m_devicesCaps;
         QReadWriteLock m_controlsMutex;
         QVariantList m_globalImageControls;
         QVariantList m_globalCameraControls;
@@ -193,7 +184,7 @@ class CaptureAndroidCameraPrivate
         QWaitCondition m_waitCondition;
         AkFrac m_fps;
         AkFrac m_timeBase;
-        AkCaps m_caps;
+        AkVideoCaps m_caps;
         qint64 m_id {-1};
         QAndroidJniObject m_camera;
         QAndroidJniObject m_callbacks;
@@ -201,7 +192,7 @@ class CaptureAndroidCameraPrivate
 
         explicit CaptureAndroidCameraPrivate(CaptureAndroidCamera *self);
         void registerNatives();
-        QVariantList caps(jint device);
+        CaptureVideoCaps caps(jint device);
         jint deviceId(const QString &device) const;
         bool nearestFpsRangue(const QAndroidJniObject &parameters,
                               const AkFrac &fps,
@@ -254,6 +245,11 @@ class CaptureAndroidCameraPrivate
         static void surfaceDestroyed(JNIEnv *env, jobject obj, jlong userPtr);
         static bool canUseCamera();
         void updateDevices();
+        template<typename T>
+        static inline T alignUp(const T &value, const T &align)
+        {
+            return (value + align - 1) & ~(align - 1);
+        }
 };
 
 CaptureAndroidCamera::CaptureAndroidCamera(QObject *parent):
@@ -291,10 +287,9 @@ QList<int> CaptureAndroidCamera::streams
     return {0};
 }
 
-QList<int> CaptureAndroidCamera::listTracks(const QString &mimeType)
+QList<int> CaptureAndroidCamera::listTracks(AkCaps::CapsType type)
 {
-    if (mimeType != "video/x-raw"
-        && !mimeType.isEmpty())
+    if (type != AkCaps::CapsVideo && type != AkCaps::CapsUnknown)
         return {};
 
     auto caps = this->caps(this->d->m_device);
@@ -321,25 +316,11 @@ QString CaptureAndroidCamera::descriptio
     return this->d->m_descriptions.value(webcam);
 }
 
-QVariantList CaptureAndroidCamera::caps(const QString &webcam) const
+CaptureVideoCaps CaptureAndroidCamera::caps(const QString &webcam) const
 {
     return this->d->m_devicesCaps.value(webcam);
 }
 
-QString CaptureAndroidCamera::capsDescription(const AkCaps &caps) const
-{
-    if (caps.mimeType() != "video/unknown")
-        return {};
-
-    AkFrac fps = caps.property("fps").toString();
-
-    return QString("%1, %2x%3, %4 FPS")
-                .arg(caps.property("fourcc").toString(),
-                     caps.property("width").toString(),
-                     caps.property("height").toString())
-                .arg(qRound(fps.value()));
-}
-
 QVariantList CaptureAndroidCamera::imageControls() const
 {
     return this->d->m_globalImageControls;
@@ -488,19 +469,31 @@ AkPacket CaptureAndroidCamera::readFrame
         this->d->m_waitCondition.wait(&this->d->m_mutex, 1000);
 
     if (!this->d->m_curBuffer.isEmpty()) {
-        int bufferSize = this->d->m_curBuffer.size();
-        QByteArray oBuffer(bufferSize, 0);
-        memcpy(oBuffer.data(),
-               this->d->m_curBuffer.constData(),
-               size_t(bufferSize));
-
-        packet = AkPacket(this->d->m_caps);
-        packet.setBuffer(oBuffer);
-        packet.setPts(pts);
-        packet.setTimeBase(this->d->m_timeBase);
-        packet.setIndex(0);
-        packet.setId(this->d->m_id);
+        AkVideoPacket videoPacket(this->d->m_caps);
+        auto iData = this->d->m_curBuffer.constData();
+
+        for (int plane = 0; plane < videoPacket.planes(); ++plane) {
+            auto iLineSize = CaptureAndroidCameraPrivate::alignUp<size_t>(videoPacket.bytesUsed(plane), 16);
+            auto oLineSize = videoPacket.lineSize(plane);
+            auto lineSize = qMin<size_t>(iLineSize, oLineSize);
+            auto heightDiv = videoPacket.heightDiv(plane);
+
+            for (int y = 0; y < videoPacket.caps().height(); ++y) {
+                int ys = y >> heightDiv;
+                memcpy(videoPacket.line(plane, y),
+                       iData + ys * iLineSize,
+                       lineSize);
+            }
+
+            iData += iLineSize * (videoPacket.caps().height() >> heightDiv);
+        }
+
+        videoPacket.setPts(pts);
+        videoPacket.setTimeBase(this->d->m_timeBase);
+        videoPacket.setIndex(0);
+        videoPacket.setId(this->d->m_id);
         this->d->m_curBuffer.clear();
+        packet = videoPacket;
     }
 
     this->d->m_mutex.unlock();
@@ -540,7 +533,7 @@ void CaptureAndroidCameraPrivate::regist
     ready = true;
 }
 
-QVariantList CaptureAndroidCameraPrivate::caps(jint device)
+CaptureVideoCaps CaptureAndroidCameraPrivate::caps(jint device)
 {
     auto camera =
             QAndroidJniObject::callStaticObjectMethod("android/hardware/Camera",
@@ -569,7 +562,7 @@ QVariantList CaptureAndroidCameraPrivate
                                                 i);
         auto format = jformat.callMethod<jint>("intValue");
 
-        if (!imgFmtToStrMap->contains(ImageFormat(format)))
+        if (!androidFmtToAkFmt->contains(ImageFormat(format)))
             continue;
 
         supportedFormats << ImageFormat(format);
@@ -617,18 +610,19 @@ QVariantList CaptureAndroidCameraPrivate
     }
 
     camera.callMethod<void>("release");
-    QVariantList caps;
+    CaptureVideoCaps caps;
 
     for (auto &format: supportedFormats)
         for (auto &size: supportedSizes)
             for (auto &fps: supportedFrameRates) {
-                AkCaps videoCaps;
-                videoCaps.setMimeType("video/unknown");
-                videoCaps.setProperty("fourcc", imgFmtToStrMap->value(ImageFormat(format)));
-                videoCaps.setProperty("width", size.width());
-                videoCaps.setProperty("height", size.height());
-                videoCaps.setProperty("fps", fps.toString());
-                caps << QVariant::fromValue(videoCaps);
+                auto akFormat = androidFmtToAkFmt->value(format,
+                                                         AkVideoCaps::Format_none);
+
+                if (akFormat != AkVideoCaps::Format_none)
+                    caps << AkVideoCaps({akFormat,
+                                         size.width(),
+                                         size.height(),
+                                         fps});
             }
 
     return caps;
@@ -1237,12 +1231,14 @@ bool CaptureAndroidCamera::init()
 
     QAndroidJniObject surfaceHolder;
     QList<int> streams;
-    QVariantList supportedCaps;
-    AkCaps caps;
+    CaptureVideoCaps supportedCaps;
+    AkVideoCaps caps;
     QAndroidJniObject parameters;
     jint min = 0;
     jint max = 0;
     AkFrac fps;
+    AkVideoFormatSpec specs;
+    size_t bytesUsed {0};
 
     this->d->m_camera =
             QAndroidJniObject::callStaticObjectMethod("android/hardware/Camera",
@@ -1250,8 +1246,11 @@ bool CaptureAndroidCamera::init()
                                                       "(I)Landroid/hardware/Camera;",
                                                       this->d->deviceId(this->d->m_device));
 
-    if (!this->d->m_camera.isValid())
-        goto init_failed;
+    if (!this->d->m_camera.isValid()) {
+        this->uninit();
+
+        return false;
+    }
 
     QtAndroid::runOnAndroidThreadSync([this] {
         this->d->m_surfaceView =
@@ -1263,15 +1262,21 @@ bool CaptureAndroidCamera::init()
         window->setGeometry(0, 0, 0, 0);
     });
 
-    if (!this->d->m_surfaceView.isValid())
-        goto init_failed;
+    if (!this->d->m_surfaceView.isValid()) {
+        this->uninit();
+
+        return false;
+    }
 
     surfaceHolder =
             this->d->m_surfaceView.callObjectMethod("getHolder",
                                                     "()Landroid/view/SurfaceHolder;");
 
-    if (!surfaceHolder.isValid())
-        goto init_failed;
+    if (!surfaceHolder.isValid()) {
+        this->uninit();
+
+        return false;
+    }
 
     QThread::sleep(1);
 
@@ -1288,36 +1293,43 @@ bool CaptureAndroidCamera::init()
             this->d->m_camera.callObjectMethod("getParameters",
                                                "()Landroid/hardware/Camera$Parameters;");
 
-    if (!parameters.isValid())
-        goto init_failed;
+    if (!parameters.isValid()) {
+        this->uninit();
+
+        return false;
+    }
 
     streams = this->streams();
 
-    if (streams.isEmpty())
-        goto init_failed;
+    if (streams.isEmpty()) {
+        this->uninit();
+
+        return false;
+    }
 
     supportedCaps = this->caps(this->d->m_device);
-    caps = supportedCaps[streams[0]].value<AkCaps>();
-    caps.setProperty("align", 16);
+    caps = supportedCaps[streams[0]];
 
     parameters.callMethod<void>("setPreviewFormat",
                                 "(I)V",
-                                imgFmtToStrMap->key(caps.property("fourcc").toString(),
-                                                    ImageFormat::UNKNOWN));
+                                androidFmtToAkFmt->key(caps.format(),
+                                                       ImageFormat::UNKNOWN));
     parameters.callMethod<void>("setPreviewSize",
                                 "(II)V",
-                                caps.property("width").toInt(),
-                                caps.property("height").toInt());
+                                caps.width(),
+                                caps.height());
 
     min = 0;
     max = 0;
-    fps = caps.property("fps").toString();
+    fps = caps.fps();
 
     if (!this->d->nearestFpsRangue(parameters,
                                    fps,
                                    min,
                                    max)) {
-        goto init_failed;
+        this->uninit();
+
+        return false;
     }
 
     parameters.callMethod<void>("setPreviewFpsRange",
@@ -1335,11 +1347,6 @@ bool CaptureAndroidCamera::init()
     this->d->m_timeBase = this->d->m_fps.invert();
 
     return true;
-
-init_failed:
-    this->uninit();
-
-    return false;
 }
 
 void CaptureAndroidCamera::uninit()
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/androidcamera/src/captureandroidcamera.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/androidcamera/src/captureandroidcamera.h
@@ -32,38 +32,37 @@ class CaptureAndroidCamera: public Captu
         CaptureAndroidCamera(QObject *parent=nullptr);
         ~CaptureAndroidCamera();
 
-        Q_INVOKABLE QStringList webcams() const;
-        Q_INVOKABLE QString device() const;
-        Q_INVOKABLE QList<int> streams();
-        Q_INVOKABLE QList<int> listTracks(const QString &mimeType);
-        Q_INVOKABLE QString ioMethod() const;
-        Q_INVOKABLE int nBuffers() const;
-        Q_INVOKABLE QString description(const QString &webcam) const;
-        Q_INVOKABLE QVariantList caps(const QString &webcam) const;
-        Q_INVOKABLE QString capsDescription(const AkCaps &caps) const;
-        Q_INVOKABLE QVariantList imageControls() const;
-        Q_INVOKABLE bool setImageControls(const QVariantMap &imageControls);
-        Q_INVOKABLE bool resetImageControls();
-        Q_INVOKABLE QVariantList cameraControls() const;
-        Q_INVOKABLE bool setCameraControls(const QVariantMap &cameraControls);
-        Q_INVOKABLE bool resetCameraControls();
-        Q_INVOKABLE AkPacket readFrame();
+        Q_INVOKABLE QStringList webcams() const override;
+        Q_INVOKABLE QString device() const override;
+        Q_INVOKABLE QList<int> streams() override;
+        Q_INVOKABLE QList<int> listTracks(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString ioMethod() const override;
+        Q_INVOKABLE int nBuffers() const override;
+        Q_INVOKABLE QString description(const QString &webcam) const override;
+        Q_INVOKABLE CaptureVideoCaps caps(const QString &webcam) const override;
+        Q_INVOKABLE QVariantList imageControls() const override;
+        Q_INVOKABLE bool setImageControls(const QVariantMap &imageControls) override;
+        Q_INVOKABLE bool resetImageControls() override;
+        Q_INVOKABLE QVariantList cameraControls() const override;
+        Q_INVOKABLE bool setCameraControls(const QVariantMap &cameraControls) override;
+        Q_INVOKABLE bool resetCameraControls() override;
+        Q_INVOKABLE AkPacket readFrame() override;
 
     private:
         CaptureAndroidCameraPrivate *d;
 
     public slots:
-        bool init();
-        void uninit();
-        void setDevice(const QString &device);
-        void setStreams(const QList<int> &streams);
-        void setIoMethod(const QString &ioMethod);
-        void setNBuffers(int nBuffers);
-        void resetDevice();
-        void resetStreams();
-        void resetIoMethod();
-        void resetNBuffers();
-        void reset();
+        bool init() override;
+        void uninit() override;
+        void setDevice(const QString &device) override;
+        void setStreams(const QList<int> &streams) override;
+        void setIoMethod(const QString &ioMethod) override;
+        void setNBuffers(int nBuffers) override;
+        void resetDevice() override;
+        void resetStreams() override;
+        void resetIoMethod() override;
+        void resetNBuffers() override;
+        void reset() override;
 };
 
 #endif // CAPTUREANDROIDCAMERA_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/avfoundation/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/avfoundation/CMakeLists.txt
@@ -36,7 +36,9 @@ find_package(Qt${QT_VERSION_MAJOR} ${QT_
              ${QT_COMPONENTS}
              REQUIRED)
 find_library(AVFOUNDATION NAMES AVFoundation)
+find_library(COREFOUNDATION NAMES CoreFoundation)
 find_library(COREMEDIA NAMES CoreMedia)
+find_library(COREMEDIAIO NAMES CoreMediaIO)
 find_library(COREVIDEO NAMES CoreVideo)
 find_library(FOUNDATION NAMES Foundation)
 
@@ -53,7 +55,9 @@ set(SOURCES
 
 if (NOT NOAVFOUNDATION
     AND AVFOUNDATION
+    AND COREFOUNDATION
     AND COREMEDIA
+    AND COREMEDIAIO
     AND COREVIDEO
     AND FOUNDATION)
     add_library(VideoCapture_avfoundation SHARED ${SOURCES})
@@ -76,12 +80,16 @@ target_link_libraries(VideoCapture_avfou
 
 if (NOT NOAVFOUNDATION
     AND AVFOUNDATION
+    AND COREFOUNDATION
     AND COREMEDIA
+    AND COREMEDIAIO
     AND COREVIDEO
     AND FOUNDATION)
     target_link_libraries(VideoCapture_avfoundation
                           ${AVFOUNDATION}
+                          ${COREFOUNDATION}
                           ${COREMEDIA}
+                          ${COREMEDIAIO}
                           ${COREVIDEO}
                           ${FOUNDATION})
     install(TARGETS VideoCapture_avfoundation DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/avfoundation/pspec.json
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/avfoundation/pspec.json
@@ -6,6 +6,11 @@
             "description": "Capture video using AVFoundation",
             "id": "VideoSource/CameraCapture/Impl/AVFoundation",
             "implements": ["CameraCaptureImpl"],
+            "depends": [
+                "VideoFilter/AdjustHSL",
+                "VideoFilter/Contrast",
+                "VideoFilter/Gamma"
+            ],
             "priority": 1000,
             "type": "qtplugin"
         }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/avfoundation/src/captureavfoundation.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/avfoundation/src/captureavfoundation.h
@@ -34,20 +34,21 @@ class CaptureAvFoundation: public Captur
         CaptureAvFoundation(QObject *parent=nullptr);
         ~CaptureAvFoundation();
 
-        Q_INVOKABLE QStringList webcams() const;
-        Q_INVOKABLE QString device() const;
-        Q_INVOKABLE QList<int> streams();
-        Q_INVOKABLE QList<int> listTracks(const QString &mimeType);
-        Q_INVOKABLE QString ioMethod() const;
-        Q_INVOKABLE int nBuffers() const;
-        Q_INVOKABLE QString description(const QString &webcam) const;
-        Q_INVOKABLE QVariantList caps(const QString &webcam) const;
-        Q_INVOKABLE QString capsDescription(const AkCaps &caps) const;
-        Q_INVOKABLE QVariantList imageControls() const;
-        Q_INVOKABLE bool setImageControls(const QVariantMap &imageControls);
-        Q_INVOKABLE bool resetImageControls();
-        Q_INVOKABLE AkPacket readFrame();
-        Q_INVOKABLE quint32 modelId(const QString &webcam) const;
+        Q_INVOKABLE QStringList webcams() const override;
+        Q_INVOKABLE QString device() const override;
+        Q_INVOKABLE QList<int> streams() override;
+        Q_INVOKABLE QList<int> listTracks(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString ioMethod() const override;
+        Q_INVOKABLE int nBuffers() const override;
+        Q_INVOKABLE QString description(const QString &webcam) const override;
+        Q_INVOKABLE CaptureVideoCaps caps(const QString &webcam) const override;
+        Q_INVOKABLE QVariantList imageControls() const override;
+        Q_INVOKABLE bool setImageControls(const QVariantMap &imageControls) override;
+        Q_INVOKABLE bool resetImageControls() override;
+        Q_INVOKABLE QVariantList cameraControls() const override;
+        Q_INVOKABLE bool setCameraControls(const QVariantMap &cameraControls) override;
+        Q_INVOKABLE bool resetCameraControls() override;
+        Q_INVOKABLE AkPacket readFrame() override;
 
         QMutex &mutex();
         QWaitCondition &frameReady();
@@ -57,17 +58,17 @@ class CaptureAvFoundation: public Captur
         CaptureAvFoundationPrivate *d;
 
     public slots:
-        bool init();
-        void uninit();
-        void setDevice(const QString &device);
-        void setStreams(const QList<int> &streams);
-        void setIoMethod(const QString &ioMethod);
-        void setNBuffers(int nBuffers);
-        void resetDevice();
-        void resetStreams();
-        void resetIoMethod();
-        void resetNBuffers();
-        void reset();
+        bool init() override;
+        void uninit() override;
+        void setDevice(const QString &device) override;
+        void setStreams(const QList<int> &streams) override;
+        void setIoMethod(const QString &ioMethod) override;
+        void setNBuffers(int nBuffers) override;
+        void resetDevice() override;
+        void resetStreams() override;
+        void resetIoMethod() override;
+        void resetNBuffers() override;
+        void reset() override;
 
         void cameraConnected();
         void cameraDisconnected();
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/avfoundation/src/captureavfoundation.mm
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/avfoundation/src/captureavfoundation.mm
@@ -17,64 +17,207 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QtDebug>
 #include <QCoreApplication>
 #include <QMap>
+#include <QMutex>
+#include <QReadWriteLock>
 #include <QVariant>
 #include <QWaitCondition>
-#include <QMutex>
+#include <QtDebug>
 #include <ak.h>
-#include <akfrac.h>
 #include <akcaps.h>
+#include <akcompressedvideocaps.h>
+#include <akcompressedvideopacket.h>
 #include <akelement.h>
+#include <akfrac.h>
 #include <akpacket.h>
 #include <akpluginmanager.h>
 #include <akvideocaps.h>
 #include <akvideopacket.h>
 #include <sys/time.h>
 #import <AVFoundation/AVFoundation.h>
+#import <CoreMediaIO/CMIOHardwarePlugIn.h>
 
 #include "captureavfoundation.h"
 #include "deviceobserver.h"
 
-using FourCharCodeToStrMap = QMap<FourCharCode, QString>;
+enum ControlType
+{
+    ControlTypeAutomatic,
+    ControlTypeManual
+};
+
+enum ControlStatus
+{
+    ControlStatusOn,
+    ControlStatusOff
+};
+
+enum ControlValueType
+{
+    ControlValueTypeAbsolute,
+    ControlValueTypeNative,
+};
+
+using RawFmtToAkFmtMap = QMap<FourCharCode, AkVideoCaps::PixelFormat>;
+
+inline RawFmtToAkFmtMap initRawFmtToAkFmt()
+{
+    RawFmtToAkFmtMap rawFmtToAkFmt {
+        {kCVPixelFormatType_16BE555                          , AkVideoCaps::Format_rgb555be     },
+        {kCVPixelFormatType_16LE555                          , AkVideoCaps::Format_rgb555be     },
+        {kCVPixelFormatType_16LE5551                         , AkVideoCaps::Format_rgb5550le    },
+        {kCVPixelFormatType_16BE565                          , AkVideoCaps::Format_rgb565be     },
+        {kCVPixelFormatType_16LE565                          , AkVideoCaps::Format_rgb565le     },
+        {kCVPixelFormatType_24RGB                            , AkVideoCaps::Format_rgb24        },
+        {kCVPixelFormatType_24BGR                            , AkVideoCaps::Format_bgr24        },
+        {kCVPixelFormatType_32ARGB                           , AkVideoCaps::Format_argb         },
+        {kCVPixelFormatType_32BGRA                           , AkVideoCaps::Format_bgra         },
+        {kCVPixelFormatType_32ABGR                           , AkVideoCaps::Format_abgr         },
+        {kCVPixelFormatType_32RGBA                           , AkVideoCaps::Format_rgba         },
+        {kCVPixelFormatType_64ARGB                           , AkVideoCaps::Format_argb64be     },
+        {kCVPixelFormatType_48RGB                            , AkVideoCaps::Format_rgb48be      },
+        {kCVPixelFormatType_32AlphaGray                      , AkVideoCaps::Format_graya16be    },
+        {kCVPixelFormatType_16Gray                           , AkVideoCaps::Format_gray16be     },
+        {kCVPixelFormatType_30RGB                            , AkVideoCaps::Format_rgb30be      },
+        {kCVPixelFormatType_422YpCbCr8                       , AkVideoCaps::Format_uyvy422      },
+        {kCVPixelFormatType_4444YpCbCrA8                     , AkVideoCaps::Format_uyva         },
+        {kCVPixelFormatType_4444YpCbCrA8R                    , AkVideoCaps::Format_ayuv         },
+        {kCVPixelFormatType_4444AYpCbCr8                     , AkVideoCaps::Format_ayuv         },
+        {kCVPixelFormatType_4444AYpCbCr16                    , AkVideoCaps::Format_ayuv64le     },
+        {kCVPixelFormatType_444YpCbCr8                       , AkVideoCaps::Format_yuv24        },
+        {kCVPixelFormatType_422YpCbCr16                      , AkVideoCaps::Format_yuyv422_32   },
+        {kCVPixelFormatType_422YpCbCr10                      , AkVideoCaps::Format_yuyv422_32_10},
+        {kCVPixelFormatType_444YpCbCr10                      , AkVideoCaps::Format_yuv30        },
+        {kCVPixelFormatType_422YpCbCr_4A_8BiPlanar           , AkVideoCaps::Format_uyvy422a     },
+        {kCVPixelFormatType_422YpCbCr8_yuvs                  , AkVideoCaps::Format_yuyv422      },
+        {kCVPixelFormatType_422YpCbCr8FullRange              , AkVideoCaps::Format_yuyv422      },
+        {kCVPixelFormatType_OneComponent8                    , AkVideoCaps::Format_gray8        },
+        {kCVPixelFormatType_ARGB2101010LEPacked              , AkVideoCaps::Format_argb2101010le},
+        {kCVPixelFormatType_OneComponent10                   , AkVideoCaps::Format_gray10       },
+        {kCVPixelFormatType_OneComponent12                   , AkVideoCaps::Format_gray12       },
+        {kCVPixelFormatType_OneComponent16                   , AkVideoCaps::Format_gray16       },
+        {kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange    , AkVideoCaps::Format_p010         },
+        {kCVPixelFormatType_422YpCbCr10BiPlanarVideoRange    , AkVideoCaps::Format_p210         },
+        {kCVPixelFormatType_444YpCbCr10BiPlanarVideoRange    , AkVideoCaps::Format_p410         },
+        {kCVPixelFormatType_420YpCbCr10BiPlanarFullRange     , AkVideoCaps::Format_p010         },
+        {kCVPixelFormatType_422YpCbCr10BiPlanarFullRange     , AkVideoCaps::Format_p210         },
+        {kCVPixelFormatType_444YpCbCr10BiPlanarFullRange     , AkVideoCaps::Format_p410         },
+        {kCVPixelFormatType_420YpCbCr8VideoRange_8A_TriPlanar, AkVideoCaps::Format_nv12a        }, // first and second planes as per 420YpCbCr8BiPlanarVideoRange (420v), alpha 8 bits in third plane full-range.  No CVPlanarPixelBufferInfo struct.
+    };
+
+    return rawFmtToAkFmt;
+}
+
+Q_GLOBAL_STATIC_WITH_ARGS(RawFmtToAkFmtMap,
+                          rawFmtToAkFmt,
+                          (initRawFmtToAkFmt()))
+
+using CompressedFormatToStrMap = QMap<FourCharCode, QString>;
+
+inline CompressedFormatToStrMap initCompressedFormatToStr()
+{
+    CompressedFormatToStrMap compressedFormatToStr {
+        {kCMVideoCodecType_Animation          , "qtrle"   },
+        {kCMVideoCodecType_Cinepak            , "cinepack"},
+        {kCMVideoCodecType_JPEG               , "jpeg"    },
+        {kCMVideoCodecType_JPEG_OpenDML       , "mjpg"    },
+        {kCMVideoCodecType_SorensonVideo      , "svq1"    },
+        {kCMVideoCodecType_SorensonVideo3     , "svq3"    },
+        {kCMVideoCodecType_H263               , "h263"    },
+        {kCMVideoCodecType_H264               , "h264"    },
+        {kCMVideoCodecType_HEVC               , "hevc"    },
+        {kCMVideoCodecType_HEVCWithAlpha      , "hevc"    },
+        {kCMVideoCodecType_MPEG4Video         , "mpg4"    },
+        {kCMVideoCodecType_MPEG2Video         , "mpg2"    },
+        {kCMVideoCodecType_MPEG1Video         , "mpg1"    },
+        {kCMVideoCodecType_VP9                , "vp9"     },
+        {kCMVideoCodecType_DVCNTSC            , "dvvideo" },
+        {kCMVideoCodecType_DVCPAL             , "dvvideo" },
+        {kCMVideoCodecType_DVCProPAL          , "dvvideo" },
+        {kCMVideoCodecType_DVCPro50NTSC       , "dvvideo" },
+        {kCMVideoCodecType_DVCPro50PAL        , "dvvideo" },
+        {kCMVideoCodecType_DVCPROHD720p60     , "dvvideo" },
+        {kCMVideoCodecType_DVCPROHD720p50     , "dvvideo" },
+        {kCMVideoCodecType_DVCPROHD1080i60    , "dvvideo" },
+        {kCMVideoCodecType_DVCPROHD1080i50    , "dvvideo" },
+        {kCMVideoCodecType_DVCPROHD1080p30    , "dvvideo" },
+        {kCMVideoCodecType_DVCPROHD1080p25    , "dvvideo" },
+        {kCMVideoCodecType_AppleProRes4444XQ  , "prores"  },
+        {kCMVideoCodecType_AppleProRes4444    , "prores"  },
+        {kCMVideoCodecType_AppleProRes422HQ   , "prores"  },
+        {kCMVideoCodecType_AppleProRes422     , "prores"  },
+        {kCMVideoCodecType_AppleProRes422LT   , "prores"  },
+        {kCMVideoCodecType_AppleProRes422Proxy, "prores"  },
+        {kCMVideoCodecType_AppleProResRAW     , "prores"  },
+        {kCMVideoCodecType_AppleProResRAWHQ   , "prores"  },
+    };
+
+    return compressedFormatToStr;
+}
+
+Q_GLOBAL_STATIC_WITH_ARGS(CompressedFormatToStrMap,
+                          compressedFormatToStr,
+                          (initCompressedFormatToStr()))
 
 class CaptureAvFoundationPrivate
 {
     public:
         CaptureAvFoundation *self;
+        bool m_enableHwControls {false};
         id m_deviceObserver {nil};
         AVCaptureDeviceInput *m_deviceInput {nil};
         AVCaptureVideoDataOutput *m_dataOutput {nil};
         AVCaptureSession *m_session {nil};
         CMSampleBufferRef m_curFrame {nil};
+        CMIODeviceID m_deviceID {kCMIODeviceUnknown};
         AkElementPtr m_hslFilter {akPluginManager->create<AkElement>("VideoFilter/AdjustHSL")};
         AkElementPtr m_contrastFilter {akPluginManager->create<AkElement>("VideoFilter/Contrast")};
         AkElementPtr m_gammaFilter {akPluginManager->create<AkElement>("VideoFilter/Gamma")};
         QString m_device;
         QList<int> m_streams;
+        QMap<QString, CMIODeviceID> m_cmioIDs;
         QStringList m_devices;
-        QMap<QString, quint32> m_modelId;
         QMap<QString, QString> m_descriptions;
-        QMap<QString, QVariantList> m_devicesCaps;
+        QMap<QString, CaptureVideoCaps> m_devicesCaps;
         int m_nBuffers {32};
         QMutex m_mutex;
+        QReadWriteLock m_controlsMutex;
         QWaitCondition m_frameReady;
         AkFrac m_fps;
         AkFrac m_timeBase;
         AkCaps m_caps;
         qint64 m_id {-1};
+        QVariantList m_globalImageControls;
+        QVariantList m_globalCameraControls;
+        QVariantMap m_localImageControls;
+        QVariantMap m_localCameraControls;
 
         CaptureAvFoundationPrivate(CaptureAvFoundation *self);
         static bool canUseCamera();
-        static inline QString fourccToStr(FourCharCode format);
-        static inline FourCharCode strToFourCC(const QString &format);
+        QVector<CMIODeviceID> cmioDevices() const;
+        QString deviceUID(CMIODeviceID deviceID) const;
+        QString objectName(CMIOObjectID objectID) const;
         static inline AVCaptureDeviceFormat *formatFromCaps(AVCaptureDevice *camera,
                                                             const AkCaps &caps);
         static inline AVFrameRateRange *frameRateRangeFromFps(AVCaptureDeviceFormat *format,
                                                               const AkFrac &fps);
-        static inline const FourCharCodeToStrMap &fourccToStrMap();
-        AkCaps capsFromFrameSampleBuffer(const CMSampleBufferRef sampleBuffer) const;
+        QVariantMap controlStatus(const QVariantList &controls) const;
+        QVariantMap mapDiff(const QVariantMap &map1,
+                            const QVariantMap &map2) const;
+        QVector<CMIOControlID> deviceControls(CMIODeviceID deviceID) const;
+        ControlType controlType(CMIOControlID controlID, Boolean *isSettable) const;
+        void setControlType(CMIOControlID controlID, ControlType type) const;
+        ControlStatus controlStatus(CMIOControlID controlID, Boolean *isSettable) const;
+        void setControlStatus(CMIOControlID controlID, ControlStatus status) const;
+        ControlValueType controlValueType(CMIOControlID controlID) const;
+        void controlRange(CMIOControlID controlID,
+                          Float64 *min,
+                          Float64 *max) const;
+        Float64 controlValue(CMIOControlID controlID) const;
+        void setControlValue(CMIOControlID controlID, Float64 value) const;
+        QVariantList controls(CMIODeviceID deviceID) const;
+        bool setControls(CMIODeviceID deviceID, const QVariantMap &controls) const;
 };
 
 CaptureAvFoundation::CaptureAvFoundation(QObject *parent):
@@ -135,10 +278,9 @@ QList<int> CaptureAvFoundation::streams(
     return QList<int> {0};
 }
 
-QList<int> CaptureAvFoundation::listTracks(const QString &mimeType)
+QList<int> CaptureAvFoundation::listTracks(AkCaps::CapsType type)
 {
-    if (mimeType != "video/x-raw"
-        && !mimeType.isEmpty())
+    if (type != AkCaps::CapsVideo && type != AkCaps::CapsUnknown)
         return {};
 
     auto caps = this->caps(this->d->m_device);
@@ -165,27 +307,16 @@ QString CaptureAvFoundation::description
     return this->d->m_descriptions.value(webcam);
 }
 
-QVariantList CaptureAvFoundation::caps(const QString &webcam) const
+CaptureVideoCaps CaptureAvFoundation::caps(const QString &webcam) const
 {
     return this->d->m_devicesCaps.value(webcam);
 }
 
-QString CaptureAvFoundation::capsDescription(const AkCaps &caps) const
-{
-    if (caps.mimeType() != "video/unknown")
-        return QString();
-
-    AkFrac fps = caps.property("fps").toString();
-
-    return QString("%1, %2x%3, %4 FPS")
-                .arg(caps.property("fourcc").toString(),
-                     caps.property("width").toString(),
-                     caps.property("height").toString(),
-                     QString::number(qRound(fps.value())));
-}
-
 QVariantList CaptureAvFoundation::imageControls() const
 {
+    if (this->d->m_enableHwControls)
+        return this->d->m_globalImageControls;
+
     return {
         QVariant(QVariantList {
                      "Brightness",
@@ -237,6 +368,37 @@ QVariantList CaptureAvFoundation::imageC
 
 bool CaptureAvFoundation::setImageControls(const QVariantMap &imageControls)
 {
+    if (this->d->m_enableHwControls) {
+        this->d->m_controlsMutex.lockForRead();
+        auto globalImageControls = this->d->m_globalImageControls;
+        this->d->m_controlsMutex.unlock();
+
+        for (int i = 0; i < globalImageControls.count(); i++) {
+            auto control = globalImageControls[i].toList();
+            auto controlName = control[0].toString();
+
+            if (imageControls.contains(controlName)) {
+                control[6] = imageControls[controlName];
+                globalImageControls[i] = control;
+            }
+        }
+
+        this->d->m_controlsMutex.lockForWrite();
+
+        if (this->d->m_globalImageControls == globalImageControls) {
+            this->d->m_controlsMutex.unlock();
+
+            return false;
+        }
+
+        this->d->m_globalImageControls = globalImageControls;
+        this->d->m_controlsMutex.unlock();
+
+        emit this->imageControlsChanged(imageControls);
+
+        return true;
+    }
+
     bool ok = true;
 
     for (auto it = imageControls.cbegin(); it != imageControls.cend(); it++) {
@@ -259,6 +421,17 @@ bool CaptureAvFoundation::setImageContro
 
 bool CaptureAvFoundation::resetImageControls()
 {
+    if (this->d->m_enableHwControls) {
+        QVariantMap controls;
+
+        for (auto &control: this->imageControls()) {
+            auto params = control.toList();
+            controls[params[0].toString()] = params[5].toInt();
+        }
+
+        return this->setImageControls(controls);
+    }
+
     this->d->m_hslFilter->setProperty("luminance", 0);
     this->d->m_contrastFilter->setProperty("contrast", 0);
     this->d->m_hslFilter->setProperty("saturation", 0);
@@ -268,10 +441,81 @@ bool CaptureAvFoundation::resetImageCont
     return true;
 }
 
+QVariantList CaptureAvFoundation::cameraControls() const
+{
+    if (this->d->m_enableHwControls)
+        return this->d->m_globalCameraControls;
+
+    return {};
+}
+
+bool CaptureAvFoundation::setCameraControls(const QVariantMap &cameraControls)
+{
+    if (!this->d->m_enableHwControls)
+        return false;
+
+    this->d->m_controlsMutex.lockForRead();
+    auto globalCameraControls = this->d->m_globalCameraControls;
+    this->d->m_controlsMutex.unlock();
+
+    for (int i = 0; i < globalCameraControls.count(); i++) {
+        auto control = globalCameraControls[i].toList();
+        auto controlName = control[0].toString();
+
+        if (cameraControls.contains(controlName)) {
+            control[6] = cameraControls[controlName];
+            globalCameraControls[i] = control;
+        }
+    }
+
+    this->d->m_controlsMutex.lockForWrite();
+
+    if (this->d->m_globalCameraControls == globalCameraControls) {
+        this->d->m_controlsMutex.unlock();
+
+        return false;
+    }
+
+    this->d->m_globalCameraControls = globalCameraControls;
+    this->d->m_controlsMutex.unlock();
+
+    emit this->cameraControlsChanged(cameraControls);
+
+    return true;
+}
+
+bool CaptureAvFoundation::resetCameraControls()
+{
+    if (!this->d->m_enableHwControls)
+        return false;
+
+    QVariantMap controls;
+
+    for (auto &control: this->cameraControls()) {
+        auto params = control.toList();
+        controls[params[0].toString()] = params[5].toInt();
+    }
+
+    return this->setCameraControls(controls);
+}
+
 AkPacket CaptureAvFoundation::readFrame()
 {
     this->d->m_mutex.lock();
 
+    if (this->d->m_enableHwControls) {
+        this->d->m_controlsMutex.lockForRead();
+        auto imageControls = this->d->controlStatus(this->d->m_globalImageControls);
+        this->d->m_controlsMutex.unlock();
+
+        if (this->d->m_localImageControls != imageControls) {
+            auto controls = this->d->mapDiff(this->d->m_localImageControls,
+                                             imageControls);
+            this->d->setControls(this->d->m_deviceID, controls);
+            this->d->m_localImageControls = imageControls;
+        }
+    }
+
     if (!this->d->m_curFrame)
         if (!this->d->m_frameReady.wait(&this->d->m_mutex, 1000)) {
             this->d->m_mutex.unlock();
@@ -279,30 +523,22 @@ AkPacket CaptureAvFoundation::readFrame(
             return {};
         }
 
-    // Read frame data.
-    QByteArray oBuffer;
-    auto imageBuffer = CMSampleBufferGetImageBuffer(this->d->m_curFrame);
-    auto dataBuffer = CMSampleBufferGetDataBuffer(this->d->m_curFrame);
-    auto caps = this->d->capsFromFrameSampleBuffer(this->d->m_curFrame);
-    caps.setProperty("fps", this->d->m_timeBase.invert().toString());
+    auto formatDesc = CMSampleBufferGetFormatDescription(this->d->m_curFrame);
+    int width = 0;
+    int height = 0;
+
+    if (formatDesc) {
+        auto size = CMVideoFormatDescriptionGetDimensions(formatDesc);
+        width = size.width;
+        height = size.height;
+    }
 
-    if (imageBuffer) {
-        size_t dataSize = CVPixelBufferGetDataSize(imageBuffer);
-        oBuffer.resize(int(dataSize));
-        CVPixelBufferLockBaseAddress(imageBuffer, 0);
-        void *data = CVPixelBufferGetBaseAddress(imageBuffer);
-        memcpy(oBuffer.data(), data, dataSize);
-        CVPixelBufferUnlockBaseAddress(imageBuffer, 0);
-    } else if (dataBuffer) {
-        size_t dataSize = 0;
-        char *data = nullptr;
-        CMBlockBufferGetDataPointer(dataBuffer,
-                                    0,
-                                    nullptr,
-                                    &dataSize,
-                                    &data);
-        oBuffer.resize(int(dataSize));
-        memcpy(oBuffer.data(), data, dataSize);
+    if (width < 1 || height < 1) {
+        CFRelease(this->d->m_curFrame);
+        this->d->m_curFrame = nil;
+        this->d->m_mutex.unlock();
+
+        return {};
     }
 
     // Read pts.
@@ -326,37 +562,71 @@ AkPacket CaptureAvFoundation::readFrame(
         timeBase = this->d->m_timeBase;
     }
 
+    // Create package.
+    auto fourCC = CMFormatDescriptionGetMediaSubType(formatDesc);
+    AkPacket packet;
+
+    // Read frame data.
+    auto imageBuffer = CMSampleBufferGetImageBuffer(this->d->m_curFrame);
+
+    if (imageBuffer) {
+        AkVideoPacket videoPacket({rawFmtToAkFmt->value(fourCC),
+                                   width,
+                                   height,
+                                   this->d->m_timeBase.invert()});
+        CVPixelBufferLockBaseAddress(imageBuffer, 0);
+        auto iData = reinterpret_cast<const quint8 *>(CVPixelBufferGetBaseAddress(imageBuffer));
+        auto iLineSize = CVPixelBufferGetBytesPerRow(imageBuffer);
+        auto lineSize = qMin<size_t>(videoPacket.lineSize(0),
+                                     iLineSize);
+
+        for (int y = 0; y < videoPacket.caps().height(); ++y) {
+            auto srcLine = iData + y * iLineSize;
+            auto dstLine = videoPacket.line(0, y);
+            memcpy(dstLine, srcLine, lineSize);
+        }
+
+        CVPixelBufferUnlockBaseAddress(imageBuffer, 0);
+        packet = videoPacket;
+    } else {
+        auto dataBuffer = CMSampleBufferGetDataBuffer(this->d->m_curFrame);
+
+        if (dataBuffer) {
+            size_t dataSize = 0;
+            char *data = nullptr;
+            CMBlockBufferGetDataPointer(dataBuffer,
+                                        0,
+                                        nullptr,
+                                        &dataSize,
+                                        &data);
+            AkCompressedVideoPacket videoPacket({compressedFormatToStr->value(fourCC),
+                                                 width,
+                                                 height,
+                                                 this->d->m_timeBase.invert()},
+                                                dataSize);
+            memcpy(videoPacket.data(), data, dataSize);
+            packet = videoPacket;
+        }
+    }
+
+    packet.setPts(pts);
+    packet.setTimeBase(timeBase);
+    packet.setIndex(0);
+    packet.setId(this->d->m_id);
+
+    if (!this->d->m_enableHwControls) {
+        packet = this->d->m_hslFilter->iStream(packet);
+        packet = this->d->m_gammaFilter->iStream(packet);
+        packet = this->d->m_contrastFilter->iStream(packet);
+    }
+
     CFRelease(this->d->m_curFrame);
     this->d->m_curFrame = nil;
-
     this->d->m_mutex.unlock();
 
-    // Create package.
-    AkVideoCaps videoCaps(AkVideoCaps::Format_rgb24,
-                          caps.property("width").toInt(),
-                          caps.property("height").toInt(),
-                          caps.property("fps").toString());
-    AkVideoPacket videoPacket;
-    videoPacket.setCaps(videoCaps);
-    videoPacket.setBuffer(oBuffer);
-    videoPacket.setPts(pts);
-    videoPacket.setTimeBase(this->d->m_timeBase);
-    videoPacket.setIndex(0);
-    videoPacket.setId(this->d->m_id);
-    videoPacket = this->d->m_hslFilter->iStream(videoPacket);
-    videoPacket = this->d->m_gammaFilter->iStream(videoPacket);
-    videoPacket = this->d->m_contrastFilter->iStream(videoPacket);
-    AkPacket packet(videoPacket.convert(AkVideoCaps::Format_rgb24));
-    packet.setCaps(caps);
-
     return packet;
 }
 
-quint32 CaptureAvFoundation::modelId(const QString &webcam) const
-{
-    return this->d->m_modelId.value(webcam);
-}
-
 QMutex &CaptureAvFoundation::mutex()
 {
     return this->d->m_mutex;
@@ -374,46 +644,72 @@ void *CaptureAvFoundation::curFrame()
 
 bool CaptureAvFoundation::init()
 {
+    this->d->m_localImageControls.clear();
+    this->d->m_localCameraControls.clear();
+
     auto webcam = this->d->m_device;
 
-    if (webcam.isEmpty())
+    if (webcam.isEmpty()) {
+        qFatal("Device is empty");
+
         return false;
+    }
 
     // Read selected caps.
     auto streams = this->streams();
 
-    if (streams.isEmpty())
+    if (streams.isEmpty()) {
+        qFatal("Streams are empty");
+
         return false;
+    }
 
     auto supportedCaps = this->caps(webcam);
 
-    if (supportedCaps.isEmpty())
+    if (supportedCaps.isEmpty()) {
+        qFatal("Caps are empty");
+
+        return false;
+    }
+
+    auto deviceID = this->d->m_cmioIDs.value(webcam, kCMIODeviceUnknown);
+
+    if (deviceID == kCMIODeviceUnknown)
         return false;
 
     AkCaps caps = streams[0] < supportedCaps.size()?
-                    supportedCaps[streams[0]].value<AkCaps>():
-                    supportedCaps.first().value<AkCaps>();
+                    supportedCaps[streams[0]]:
+                    supportedCaps.first();
 
     // Get camera input.
     auto uniqueID = [[NSString alloc]
                      initWithUTF8String: webcam.toStdString().c_str()];
 
-    if (!uniqueID)
+    if (!uniqueID) {
+        qFatal("Camera ID not found");
+
         return false;
+    }
 
     auto camera = [AVCaptureDevice deviceWithUniqueID: uniqueID];
     [uniqueID release];
 
-    if (!camera)
+    if (!camera) {
+        qFatal("Can't get AVCaptureDevice");
+
         return false;
+    }
 
     // Add camera input unit.
     this->d->m_deviceInput = [AVCaptureDeviceInput
                               deviceInputWithDevice: camera
                               error: nil];
 
-    if (!this->d->m_deviceInput)
+    if (!this->d->m_deviceInput) {
+        qFatal("Can't get AVCaptureDeviceInput");
+
         return false;
+    }
 
     // Create capture session.
     this->d->m_session = [AVCaptureSession new];
@@ -421,6 +717,7 @@ bool CaptureAvFoundation::init()
 
     if ([this->d->m_session canAddInput: this->d->m_deviceInput] == NO) {
         [this->d->m_session release];
+        qFatal("Can't get AVCaptureSession");
 
         return false;
     }
@@ -431,7 +728,7 @@ bool CaptureAvFoundation::init()
     this->d->m_dataOutput = [AVCaptureVideoDataOutput new];
 
     this->d->m_dataOutput.videoSettings = @{
-        (NSString *) kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_24RGB)
+        (NSString *) kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_32ARGB)
     };
     this->d->m_dataOutput.alwaysDiscardsLateVideoFrames = YES;
 
@@ -444,6 +741,7 @@ bool CaptureAvFoundation::init()
     if ([this->d->m_session canAddOutput: this->d->m_dataOutput] == NO) {
         [this->d->m_dataOutput release];
         [this->d->m_session release];
+        qFatal("Can't add AVCaptureVideoDataOutput to AVCaptureSession");
 
         return false;
     }
@@ -453,6 +751,7 @@ bool CaptureAvFoundation::init()
 
     if ([camera lockForConfiguration: nil] == NO) {
         [this->d->m_session release];
+        qFatal("Can't lock camera configuration");
 
         return false;
     }
@@ -463,11 +762,14 @@ bool CaptureAvFoundation::init()
     if (!format) {
         [camera unlockForConfiguration];
         [this->d->m_session release];
+        qFatal("No matching camera format");
 
         return false;
     }
 
-    AkFrac fps = caps.property("fps").toString();
+    AkFrac fps = caps.type() == AkCaps::CapsVideo?
+                    AkVideoCaps(caps).fps():
+                    AkCompressedVideoCaps(caps).fps();
     auto fpsRange = CaptureAvFoundationPrivate::frameRateRangeFromFps(format,
                                                                       fps);
 
@@ -480,6 +782,7 @@ bool CaptureAvFoundation::init()
     [camera unlockForConfiguration];
     [this->d->m_deviceInput retain];
 
+    this->d->m_deviceID = deviceID;
     this->d->m_caps = caps;
     this->d->m_timeBase = fps.invert();
     this->d->m_id = Ak::id();
@@ -530,7 +833,33 @@ void CaptureAvFoundation::setDevice(cons
         return;
 
     this->d->m_device = device;
+
+    if (device.isEmpty()) {
+        this->d->m_controlsMutex.lockForWrite();
+        this->d->m_globalImageControls.clear();
+        this->d->m_globalCameraControls.clear();
+        this->d->m_controlsMutex.unlock();
+    } else {
+        this->d->m_controlsMutex.lockForWrite();
+
+        if (this->d->m_enableHwControls) {
+            auto deviceID = this->d->m_cmioIDs.value(device, kCMIODeviceUnknown);
+
+            if (deviceID != kCMIODeviceUnknown)
+                this->d->m_globalImageControls = this->d->controls(deviceID);
+        }
+
+        this->d->m_controlsMutex.unlock();
+    }
+
+    this->d->m_controlsMutex.lockForRead();
+    auto imageStatus = this->d->controlStatus(this->d->m_globalImageControls);
+    auto cameraStatus = this->d->controlStatus(this->d->m_globalCameraControls);
+    this->d->m_controlsMutex.unlock();
+
     emit this->deviceChanged(device);
+    emit this->imageControlsChanged(imageStatus);
+    emit this->cameraControlsChanged(cameraStatus);
 }
 
 void CaptureAvFoundation::setStreams(const QList<int> &streams)
@@ -579,7 +908,7 @@ void CaptureAvFoundation::resetDevice()
 
 void CaptureAvFoundation::resetStreams()
 {
-    QVariantList supportedCaps = this->caps(this->d->m_device);
+    auto supportedCaps = this->caps(this->d->m_device);
     QList<int> streams;
 
     if (!supportedCaps.isEmpty())
@@ -602,6 +931,7 @@ void CaptureAvFoundation::reset()
 {
     this->resetStreams();
     this->resetImageControls();
+    this->resetCameraControls();
 }
 
 void CaptureAvFoundation::cameraConnected()
@@ -619,11 +949,14 @@ void CaptureAvFoundation::updateDevices(
     if (!CaptureAvFoundationPrivate::canUseCamera())
         return;
 
+    decltype(this->d->m_cmioIDs) cmioIDs;
     decltype(this->d->m_devices) devices;
-    decltype(this->d->m_modelId) modelId;
     decltype(this->d->m_descriptions) descriptions;
     decltype(this->d->m_devicesCaps) devicesCaps;
 
+    for (auto &id: this->d->cmioDevices())
+        cmioIDs[this->d->deviceUID(id)] = id;
+
     auto devicesDiscovery =
             [AVCaptureDeviceDiscoverySession
              discoverySessionWithDeviceTypes: @[
@@ -637,64 +970,50 @@ void CaptureAvFoundation::updateDevices(
         QString deviceId = camera.uniqueID.UTF8String;
         devices << deviceId;
         descriptions[deviceId] = camera.localizedName.UTF8String;
-        QString modelIdStr = camera.modelID.UTF8String;
-        QRegExp vpMatch("VendorID_(\\d+) ProductID_(\\d+)");
-        quint16 vendorId = 0;
-        quint16 productId = 0;
-        int pos = 0;
-
-        forever {
-            pos = vpMatch.indexIn(modelIdStr, pos);
-
-            if (pos < 0)
-                break;
-
-            vendorId = vpMatch.cap(1).toUShort();
-            productId = vpMatch.cap(2).toUShort();
-            pos += vpMatch.matchedLength();
-        }
-
-        modelId[deviceId] = quint32(vendorId << 16) | productId;
 
         // List supported frame formats.
         for (AVCaptureDeviceFormat *format in camera.formats) {
             auto fourCC = CMFormatDescriptionGetMediaSubType(format.formatDescription);
             CMVideoDimensions size =
                     CMVideoFormatDescriptionGetDimensions(format.formatDescription);
-            auto &map = CaptureAvFoundationPrivate::fourccToStrMap();
-            QString fourccStr =
-                    map.value(fourCC,
-                              CaptureAvFoundationPrivate::fourccToStr(fourCC));
-
-            // Ignore formats that can cause alignment problems when capturing.
-            if ((size.width % 32) != 0)
-                continue;
-
-            AkCaps videoCaps;
-            videoCaps.setMimeType("video/unknown");
-            videoCaps.setProperty("fourcc", fourccStr);
-            videoCaps.setProperty("width", size.width);
-            videoCaps.setProperty("height", size.height);
 
-            // List all supported frame rates for the format.
-            for (AVFrameRateRange *fpsRange in format.videoSupportedFrameRateRanges) {
-                videoCaps.setProperty("fps", AkFrac(qRound(1e3 * fpsRange.maxFrameRate), 1e3).toString());
-                devicesCaps[deviceId] << QVariant::fromValue(videoCaps);
+            if (rawFmtToAkFmt->contains(fourCC)) {
+                AkVideoCaps videoCaps({rawFmtToAkFmt->value(fourCC),
+                                       size.width,
+                                       size.height,
+                                       {}});
+
+                // List all supported frame rates for the format.
+                for (AVFrameRateRange *fpsRange in format.videoSupportedFrameRateRanges) {
+                    videoCaps.setFps(AkFrac(qRound(1e3 * fpsRange.maxFrameRate), 1e3));
+                    devicesCaps[deviceId] << videoCaps;
+                }
+            } else if (compressedFormatToStr->contains(fourCC)) {
+                AkCompressedVideoCaps videoCaps({compressedFormatToStr->value(fourCC),
+                                                 size.width,
+                                                 size.height,
+                                                 {}});
+
+                // List all supported frame rates for the format.
+                for (AVFrameRateRange *fpsRange in format.videoSupportedFrameRateRanges) {
+                    videoCaps.setFps(AkFrac(qRound(1e3 * fpsRange.maxFrameRate), 1e3));
+                    devicesCaps[deviceId] << videoCaps;
+                }
             }
         }
     }
 
     if (devicesCaps.isEmpty()) {
+        cmioIDs.clear();
         devices.clear();
-        modelId.clear();
         descriptions.clear();
     }
 
-    this->d->m_modelId = modelId;
     this->d->m_descriptions = descriptions;
     this->d->m_devicesCaps = devicesCaps;
 
     if (this->d->m_devices != devices) {
+        this->d->m_cmioIDs = cmioIDs;
         this->d->m_devices = devices;
         emit this->webcamsChanged(devices);
     }
@@ -732,22 +1051,89 @@ bool CaptureAvFoundationPrivate::canUseC
 
     return true;
 }
-
-QString CaptureAvFoundationPrivate::fourccToStr(FourCharCode format)
+QVector<CMIODeviceID> CaptureAvFoundationPrivate::cmioDevices() const
 {
-    char fourcc[5];
-    memcpy(fourcc, &format, sizeof(FourCharCode));
-    fourcc[4] = 0;
+    CMIOObjectPropertyAddress devicesProperty {
+        kCMIOHardwarePropertyDevices,
+        0,
+        kCMIOObjectPropertyElementMaster
+    };
+    UInt32 devicesSize = 0;
+    auto status =
+        CMIOObjectGetPropertyDataSize(kCMIOObjectSystemObject,
+                                      &devicesProperty,
+                                      0,
+                                      nullptr,
+                                      &devicesSize);
+
+    if (status != kCMIOHardwareNoError)
+        return {};
+
+    QVector<CMIODeviceID> devices(devicesSize / sizeof(CMIODeviceID));
+    status =
+        CMIOObjectGetPropertyData(kCMIOObjectSystemObject,
+                                  &devicesProperty,
+                                  0,
+                                  nullptr,
+                                  devicesSize,
+                                  &devicesSize,
+                                  devices.data());
+
+    return status == kCMIOHardwareNoError? devices: QVector<CMIODeviceID>();
+}
+
+QString CaptureAvFoundationPrivate::deviceUID(CMIODeviceID deviceID) const
+{
+    CMIOObjectPropertyAddress deviceUIDProperty {
+        kCMIODevicePropertyDeviceUID,
+        0,
+        kCMIOObjectPropertyElementMaster
+    };
+    UInt32 deviceUIDSize = sizeof(CFStringRef);
+    CFStringRef deviceUID = nullptr;
+    auto status =
+        CMIOObjectGetPropertyData(deviceID,
+                                  &deviceUIDProperty,
+                                  0,
+                                  nullptr,
+                                  deviceUIDSize,
+                                  &deviceUIDSize,
+                                  &deviceUID);
+
+    if (status != kCMIOHardwareNoError)
+        return {};
+
+    auto uid = QString::fromCFString(deviceUID);
+    CFRelease(deviceUID);
 
-    return QString(fourcc);
+    return uid;
 }
 
-FourCharCode CaptureAvFoundationPrivate::strToFourCC(const QString &format)
+QString CaptureAvFoundationPrivate::objectName(CMIOObjectID objectID) const
 {
-    FourCharCode fourcc;
-    memcpy(&fourcc, format.toStdString().c_str(), sizeof(FourCharCode));
+    CMIOObjectPropertyAddress objectNameProperty {
+        kCMIOObjectPropertyName,
+        0,
+        kCMIOObjectPropertyElementMaster
+    };
+    UInt32 objectNameSize = sizeof(CFStringRef);
+    CFStringRef objectName = nullptr;
+    auto status =
+        CMIOObjectGetPropertyData(objectID,
+                                  &objectNameProperty,
+                                  0,
+                                  nullptr,
+                                  objectNameSize,
+                                  &objectNameSize,
+                                  &objectName);
+
+    if (status != kCMIOHardwareNoError)
+        return {};
+
+    auto name = QString::fromCFString(objectName);
+    CFRelease(objectName);
 
-    return fourcc;
+    return name;
 }
 
 AVCaptureDeviceFormat *CaptureAvFoundationPrivate::formatFromCaps(AVCaptureDevice *camera,
@@ -760,24 +1146,33 @@ AVCaptureDeviceFormat *CaptureAvFoundati
         auto fourCC = CMFormatDescriptionGetMediaSubType(format.formatDescription);
         CMVideoDimensions size =
                 CMVideoFormatDescriptionGetDimensions(format.formatDescription);
-        auto &map = CaptureAvFoundationPrivate::fourccToStrMap();
-        QString fourccStr =
-                map.value(fourCC,
-                           CaptureAvFoundationPrivate::fourccToStr(fourCC));
-
-        AkCaps videoCaps;
-        videoCaps.setMimeType("video/unknown");
-        videoCaps.setProperty("fourcc", fourccStr);
-        videoCaps.setProperty("width", size.width);
-        videoCaps.setProperty("height", size.height);
-
-        for (AVFrameRateRange *fpsRange in format.videoSupportedFrameRateRanges) {
-            videoCaps.setProperty("fps",
-                                  AkFrac(qRound(1e3 * fpsRange.maxFrameRate),
-                                         1e3).toString());
 
-            if (videoCaps == caps)
-                return format;
+        if (rawFmtToAkFmt->contains(fourCC)) {
+            AkVideoCaps videoCaps({rawFmtToAkFmt->value(fourCC),
+                                   size.width,
+                                   size.height,
+                                   {}});
+
+            // List all supported frame rates for the format.
+            for (AVFrameRateRange *fpsRange in format.videoSupportedFrameRateRanges) {
+                videoCaps.setFps(AkFrac(qRound(1e3 * fpsRange.maxFrameRate), 1e3));
+
+                if (videoCaps == caps)
+                    return format;
+            }
+        } else if (compressedFormatToStr->contains(fourCC)) {
+            AkCompressedVideoCaps videoCaps({compressedFormatToStr->value(fourCC),
+                                             size.width,
+                                             size.height,
+                                             {}});
+
+            // List all supported frame rates for the format.
+            for (AVFrameRateRange *fpsRange in format.videoSupportedFrameRateRanges) {
+                videoCaps.setFps(AkFrac(qRound(1e3 * fpsRange.maxFrameRate), 1e3));
+
+                if (videoCaps == caps)
+                    return format;
+            }
         }
     }
 
@@ -794,60 +1189,406 @@ AVFrameRateRange *CaptureAvFoundationPri
     return nil;
 }
 
-const FourCharCodeToStrMap &CaptureAvFoundationPrivate::fourccToStrMap()
+QVariantMap CaptureAvFoundationPrivate::controlStatus(const QVariantList &controls) const
 {
-    static const FourCharCodeToStrMap fourccToStrMap {
-        // Raw formats
-        {kCMPixelFormat_32ARGB         , "ARGB"    },
-        {kCMPixelFormat_32BGRA         , "BGRA"    },
-        {kCMPixelFormat_24RGB          , "RGB"     },
-        {kCMPixelFormat_16BE555        , "RGB555BE"},
-        {kCMPixelFormat_16BE565        , "RGB565BE"},
-        {kCMPixelFormat_16LE555        , "RGB555"  },
-        {kCMPixelFormat_16LE565        , "RGB565"  },
-        {kCMPixelFormat_16LE5551       , "ARGB555" },
-        {kCMPixelFormat_422YpCbCr8     , "UYVY"    },
-        {kCMPixelFormat_422YpCbCr8_yuvs, "YUY2"    },
-
-        // Compressed formats
-        {kCMVideoCodecType_422YpCbCr8  , "UYVY"},
-        {kCMVideoCodecType_JPEG        , "JPEG"},
-        {kCMVideoCodecType_JPEG_OpenDML, "MJPG"},
-        {kCMVideoCodecType_H263        , "H263"},
-        {kCMVideoCodecType_H264        , "H264"},
-        {kCMVideoCodecType_HEVC        , "HEVC"},
-        {kCMVideoCodecType_MPEG4Video  , "MPG4"},
-        {kCMVideoCodecType_MPEG2Video  , "MPG2"},
-        {kCMVideoCodecType_MPEG1Video  , "MPG1"}
-    };
+    QVariantMap controlStatus;
+
+    for (auto &control: controls) {
+        auto params = control.toList();
+        auto controlName = params[0].toString();
+        controlStatus[controlName] = params[6];
+    }
+
+    return controlStatus;
+}
+
+QVariantMap CaptureAvFoundationPrivate::mapDiff(const QVariantMap &map1,
+                                                const QVariantMap &map2) const
+{
+    QVariantMap map;
 
-    return fourccToStrMap;
+    for (auto it = map2.cbegin(); it != map2.cend(); it++)
+        if (!map1.contains(it.key())
+            || map1[it.key()] != it.value()) {
+            map[it.key()] = it.value();
+        }
+
+    return map;
 }
 
-AkCaps CaptureAvFoundationPrivate::capsFromFrameSampleBuffer(const CMSampleBufferRef sampleBuffer) const
+QVector<CMIOControlID> CaptureAvFoundationPrivate::deviceControls(CMIODeviceID deviceID) const
 {
-    auto formatDesc = CMSampleBufferGetFormatDescription(sampleBuffer);
+    CMIOObjectPropertyAddress ownedObjectsProperty {
+        kCMIOObjectPropertyOwnedObjects,
+        0,
+        kCMIOObjectPropertyElementMaster
+    };
+    QVector<CMIOClassID> controlClasses {
+        kCMIOFeatureControlClassID
+    };
+    UInt32 ownedObjectsSize = 0;
+    auto status =
+        CMIOObjectGetPropertyDataSize(deviceID,
+                                      &ownedObjectsProperty,
+                                      controlClasses.size() * sizeof(CMIOClassID),
+                                      controlClasses.data(),
+                                      &ownedObjectsSize);
 
-    if (!formatDesc)
+    if (status != kCMIOHardwareNoError)
         return {};
 
-    AkCaps videoCaps;
-    videoCaps.setMimeType("video/unknown");
+    QVector<CMIOControlID> deviceControls(ownedObjectsSize / sizeof(CMIOControlID));
+    status =
+        CMIOObjectGetPropertyData(deviceID,
+                                  &ownedObjectsProperty,
+                                  controlClasses.size() * sizeof(CMIOClassID),
+                                  controlClasses.data(),
+                                  ownedObjectsSize,
+                                  &ownedObjectsSize,
+                                  deviceControls.data());
+
+    return status == kCMIOHardwareNoError?
+                deviceControls:
+                QVector<CMIOControlID>();
+}
+
+ControlType CaptureAvFoundationPrivate::controlType(CMIOControlID controlID,
+                                                    Boolean *isSettable) const
+{
+    CMIOObjectPropertyAddress automaticManualProperty {
+        kCMIOFeatureControlPropertyAutomaticManual,
+        0,
+        kCMIOObjectPropertyElementMaster
+    };
+    UInt32 automaticManualSize = sizeof(UInt32);
+    UInt32 automaticManual = 0;
+    CMIOObjectGetPropertyData(controlID,
+                              &automaticManualProperty,
+                              0,
+                              nullptr,
+                              automaticManualSize,
+                              &automaticManualSize,
+                              &automaticManual);
+
+    if (isSettable) {
+        *isSettable = false;
+        CMIOObjectIsPropertySettable(controlID,
+                                     &automaticManualProperty,
+                                     isSettable);
+    }
 
-    auto fourCC = CMFormatDescriptionGetMediaSubType(formatDesc);
-    auto &map = CaptureAvFoundationPrivate::fourccToStrMap();
-    videoCaps.setProperty("fourcc",
-                          map.value(fourCC,
-                                    CaptureAvFoundationPrivate::fourccToStr(fourCC)));
-
-    auto size = CMVideoFormatDescriptionGetDimensions(formatDesc);
-    videoCaps.setProperty("width", size.width);
-    videoCaps.setProperty("height", size.height);
+    return automaticManual? ControlTypeAutomatic: ControlTypeManual;
+}
+
+void CaptureAvFoundationPrivate::setControlType(CMIOControlID controlID,
+                                                ControlType type) const
+{
+    CMIOObjectPropertyAddress automaticManualProperty {
+        kCMIOFeatureControlPropertyAutomaticManual,
+        0,
+        kCMIOObjectPropertyElementMaster
+    };
+    UInt32 automaticManualSize = sizeof(UInt32);
+    UInt32 automaticManual = type == ControlTypeAutomatic? 1: 0;
+    CMIOObjectSetPropertyData(controlID,
+                              &automaticManualProperty,
+                              0,
+                              nullptr,
+                              automaticManualSize,
+                              &automaticManual);
+}
+
+ControlStatus CaptureAvFoundationPrivate::controlStatus(CMIOControlID controlID,
+                                                        Boolean *isSettable) const
+{
+    CMIOObjectPropertyAddress onOffProperty {
+        kCMIOFeatureControlPropertyOnOff,
+        0,
+        kCMIOObjectPropertyElementMaster
+    };
+    UInt32 onOffSize = sizeof(UInt32);
+    UInt32 onOff = 0;
+    CMIOObjectGetPropertyData(controlID,
+                              &onOffProperty,
+                              0,
+                              nullptr,
+                              onOffSize,
+                              &onOffSize,
+                              &onOff);
+
+    if (isSettable) {
+        *isSettable = false;
+        CMIOObjectIsPropertySettable(controlID,
+                                     &onOffProperty,
+                                     isSettable);
+    }
+
+    return onOff? ControlStatusOn: ControlStatusOff;
+}
 
-    auto time = CMSampleBufferGetDuration(sampleBuffer);
-    videoCaps.setProperty("fps", AkFrac(time.timescale, time.value).toString());
+void CaptureAvFoundationPrivate::setControlStatus(CMIOControlID controlID,
+                                                  ControlStatus status) const
+{
+    CMIOObjectPropertyAddress onOffProperty {
+        kCMIOFeatureControlPropertyOnOff,
+        0,
+        kCMIOObjectPropertyElementMaster
+    };
+    UInt32 onOffSize = sizeof(UInt32);
+    UInt32 onOff = status == ControlStatusOn? 1: 0;
+    CMIOObjectSetPropertyData(controlID,
+                              &onOffProperty,
+                              0,
+                              nullptr,
+                              onOffSize,
+                              &onOff);
+}
+
+ControlValueType CaptureAvFoundationPrivate::controlValueType(CMIOControlID controlID) const
+{
+    CMIOObjectPropertyAddress absoluteNativeProperty {
+        kCMIOFeatureControlPropertyAbsoluteNative,
+        0,
+        kCMIOObjectPropertyElementMaster
+    };
+    UInt32 absoluteNativeSize = sizeof(UInt32);
+    UInt32 absoluteNative = 0;
+    CMIOObjectGetPropertyData(controlID,
+                              &absoluteNativeProperty,
+                              0,
+                              nullptr,
+                              absoluteNativeSize,
+                              &absoluteNativeSize,
+                              &absoluteNative);
+
+    return absoluteNative? ControlValueTypeAbsolute: ControlValueTypeNative;
+}
+
+void CaptureAvFoundationPrivate::controlRange(CMIOControlID controlID,
+                                              Float64 *min,
+                                              Float64 *max) const
+{
+    if (!min && !max)
+        return;
+
+    auto valueType = this->controlValueType(controlID);
+    CMIOObjectPropertyAddress rangeProperty {
+        valueType == ControlValueTypeAbsolute?
+            kCMIOFeatureControlPropertyAbsoluteRange:
+            kCMIOFeatureControlPropertyNativeRange,
+        0,
+        kCMIOObjectPropertyElementMaster
+    };
+    UInt32 rangeSize = sizeof(AudioValueRange);
+    AudioValueRange range;
+    auto status =
+        CMIOObjectGetPropertyData(controlID,
+                                  &rangeProperty,
+                                  0,
+                                  nullptr,
+                                  rangeSize,
+                                  &rangeSize,
+                                  &range);
+
+    if (status == kCMIOHardwareNoError) {
+        if (min)
+            *min = range.mMinimum;
+
+        if (max)
+            *max = range.mMaximum;
+    } else {
+        if (min)
+            *min = 0;
+
+        if (max)
+            *max = 0;
+    }
+}
+
+Float64 CaptureAvFoundationPrivate::controlValue(CMIOControlID controlID) const
+{
+    auto valueType = this->controlValueType(controlID);
+    CMIOObjectPropertyAddress valueProperty {
+        valueType == ControlValueTypeAbsolute?
+            kCMIOFeatureControlPropertyAbsoluteValue:
+            kCMIOFeatureControlPropertyNativeValue,
+        0,
+        kCMIOObjectPropertyElementMaster
+    };
+    UInt32 valueSize = sizeof(Float32);
+    Float32 value;
+    CMIOObjectGetPropertyData(controlID,
+                              &valueProperty,
+                              0,
+                              nullptr,
+                              valueSize,
+                              &valueSize,
+                              &value);
+
+    return value;
+}
+
+void CaptureAvFoundationPrivate::setControlValue(CMIOControlID controlID,
+                                                 Float64 value) const
+{
+    auto valueType = this->controlValueType(controlID);
+    CMIOObjectPropertyAddress valueProperty {
+        valueType == ControlValueTypeAbsolute?
+            kCMIOFeatureControlPropertyAbsoluteValue:
+            kCMIOFeatureControlPropertyNativeValue,
+        0,
+        kCMIOObjectPropertyElementMaster
+    };
+    UInt32 valueSize = sizeof(Float32);
+    Float32 val = value;
+    CMIOObjectSetPropertyData(controlID,
+                              &valueProperty,
+                              0,
+                              nullptr,
+                              valueSize,
+                              &val);
+}
+
+QVariantList CaptureAvFoundationPrivate::controls(CMIODeviceID deviceID) const
+{
+    QVariantList controls;
+
+    auto deviceControls = this->deviceControls(deviceID);
+
+    for (auto &control: deviceControls) {
+        Boolean isTypeSettable = false;
+        auto type = this->controlType(control, &isTypeSettable);
+        Boolean isStatusSettable = false;
+        auto status = this->controlStatus(control, &isStatusSettable);
+        Float64 min = 0;
+        Float64 max = 0;
+        this->controlRange(control, &min, &max);
+
+        if (!qIsFinite(min) || !qIsFinite(min))
+            continue;
+
+        auto value = this->controlValue(control);
+
+        if (isTypeSettable && !isStatusSettable) {
+            controls << QVariant(QVariantList {
+                this->objectName(control) + " (Auto)",
+                "boolean",
+                0,
+                1,
+                1,
+                1,
+                type == ControlTypeAutomatic,
+                {}
+            });
+        }
+
+        if (isStatusSettable) {
+            controls << QVariant(QVariantList {
+                (min != max? "Enable ": "")
+                + this->objectName(control),
+                "boolean",
+                0,
+                1,
+                1,
+                1,
+                status == ControlStatusOn,
+                {}
+            });
+
+            if (min != max)
+                controls << QVariant(QVariantList {
+                    this->objectName(control),
+                    "integer",
+                    qRound(min),
+                    qRound(max),
+                    1,             // step
+                    qRound(value), // default
+                    qRound(value),
+                    {}
+                });
+        } else {
+            controls << QVariant(QVariantList {
+                this->objectName(control),
+                "integer",
+                qRound(min),
+                qRound(max),
+                1,             // step
+                qRound(value), // default
+                qRound(value),
+                {}
+            });
+        }
+    }
+
+    return controls;
+}
+
+bool CaptureAvFoundationPrivate::setControls(CMIODeviceID deviceID,
+                                             const QVariantMap &controls) const
+{
+    bool set = false;
+    auto deviceControls = this->deviceControls(deviceID);
+
+    for (auto &control: deviceControls) {
+        Boolean isTypeSettable = false;
+        this->controlType(control, &isTypeSettable);
+        Boolean isStatusSettable = false;
+        this->controlStatus(control, &isStatusSettable);
+        Float64 min = 0;
+        Float64 max = 0;
+        this->controlRange(control, &min, &max);
+
+        if (!qIsFinite(min) || !qIsFinite(min))
+            continue;
+
+        if (isTypeSettable && !isStatusSettable) {
+            auto controlName = this->objectName(control) + " (Auto)";
+
+            if (controls.contains(controlName)) {
+                auto value = controls.value(controlName).toBool();
+                this->setControlType(control,
+                                     value?
+                                         ControlTypeAutomatic:
+                                         ControlTypeManual);
+                set |= true;
+            }
+        }
+
+        if (isStatusSettable) {
+            auto controlName =
+                    (min != max? "Enable ": "")
+                        + this->objectName(control);
+
+            if (controls.contains(controlName)) {
+                auto value = controls.value(controlName).toBool();
+                this->setControlStatus(control,
+                                       value?
+                                           ControlStatusOn:
+                                           ControlStatusOff);
+                set |= true;
+            }
+
+            if (min != max) {
+                auto controlName = this->objectName(control);
+
+                if (controls.contains(controlName)) {
+                    auto value = controls.value(controlName).toDouble();
+                    this->setControlValue(control, value);
+                    set |= true;
+                }
+            }
+        } else {
+            auto controlName = this->objectName(control);
+
+            if (controls.contains(controlName)) {
+                auto value = controls.value(controlName).toDouble();
+                this->setControlValue(control, value);
+                set |= true;
+            }
+        }
+    }
 
-    return videoCaps;
+    return set;
 }
 
 #include "moc_captureavfoundation.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/avfoundation/src/deviceobserver.mm
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/avfoundation/src/deviceobserver.mm
@@ -17,6 +17,7 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
+#include <QMutex>
 #include <QWaitCondition>
 
 #include "deviceobserver.h"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/cmio/CMakeLists.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-# Webcamoid, webcam capture application.
-# Copyright (C) 2021  Gonzalo Exequiel Pedone
-#
-# Webcamoid is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Webcamoid is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
-#
-# Web-Site: http://webcamoid.github.io/
-
-cmake_minimum_required(VERSION 3.16)
-
-project(VideoCapture_cmio LANGUAGES CXX)
-
-include(../../../../../cmake/ProjectCommons.cmake)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-set(CMAKE_AUTOUIC ON)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-
-set(QT_COMPONENTS
-    Core)
-find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS
-             ${QT_COMPONENTS}
-             REQUIRED)
-find_package(Qt${QT_VERSION_MAJOR} ${QT_MINIMUM_VERSION} COMPONENTS
-             ${QT_COMPONENTS}
-             REQUIRED)
-find_library(AVFOUNDATION NAMES AVFoundation)
-find_library(COREFOUNDATION NAMES CoreFoundation)
-find_library(COREMEDIA NAMES CoreMedia)
-find_library(COREMEDIAIO NAMES CoreMediaIO)
-find_library(COREVIDEO NAMES CoreVideo)
-find_library(FOUNDATION NAMES Foundation)
-
-set(SOURCES
-    ../../capture.cpp
-    ../../capture.h
-    src/capturecmio.h
-    src/capturecmio.mm
-    src/deviceobserver.h
-    src/deviceobserver.mm
-    src/plugin.cpp
-    src/plugin.h
-    pspec.json)
-
-if (NOT NOAVFOUNDATION
-    AND AVFOUNDATION
-    AND COREFOUNDATION
-    AND COREMEDIA
-    AND COREMEDIAIO
-    AND COREVIDEO
-    AND FOUNDATION)
-    add_library(VideoCapture_cmio SHARED ${SOURCES})
-else ()
-    add_library(VideoCapture_cmio SHARED EXCLUDE_FROM_ALL ${SOURCES})
-endif ()
-
-set_target_properties(VideoCapture_cmio PROPERTIES
-                      LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
-add_dependencies(VideoCapture_cmio avkys)
-target_include_directories(VideoCapture_cmio
-                           PRIVATE
-                           ../..
-                           ../../../../../Lib/src)
-target_compile_definitions(VideoCapture_cmio PRIVATE AVKYS_PLUGIN_VIDEOCAPTURE_CMIO)
-list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
-target_link_libraries(VideoCapture_cmio
-                      ${QT_LIBS}
-                      avkys)
-
-if (NOT NOAVFOUNDATION
-    AND AVFOUNDATION
-    AND COREFOUNDATION
-    AND COREMEDIA
-    AND COREMEDIAIO
-    AND COREVIDEO
-    AND FOUNDATION)
-    target_link_libraries(VideoCapture_cmio
-                          ${AVFOUNDATION}
-                          ${COREFOUNDATION}
-                          ${COREMEDIA}
-                          ${COREMEDIAIO}
-                          ${COREVIDEO}
-                          ${FOUNDATION})
-    install(TARGETS VideoCapture_cmio DESTINATION ${PLUGINSDIR})
-endif ()
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/cmio/pspec.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-    "type": "WebcamoidPluginsCollection",
-    "plugins": [
-        {
-            "name": "CoreMediaIO",
-            "description": "Capture video using CoreMediaIO",
-            "id": "VideoSource/CameraCapture/Impl/CoreMediaIO",
-            "implements": ["CameraCaptureImpl"],
-            "priority": 900,
-            "type": "qtplugin"
-        }
-    ]
-}
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/cmio/src/capturecmio.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2020  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef CAPTURECMIO_H
-#define CAPTURECMIO_H
-
-#include "capture.h"
-
-class CaptureCMIOPrivate;
-class QWaitCondition;
-class QMutex;
-
-class CaptureCMIO: public Capture
-{
-    Q_OBJECT
-
-    public:
-        CaptureCMIO(QObject *parent=nullptr);
-        ~CaptureCMIO();
-
-        Q_INVOKABLE QStringList webcams() const;
-        Q_INVOKABLE QString device() const;
-        Q_INVOKABLE QList<int> streams();
-        Q_INVOKABLE QList<int> listTracks(const QString &mimeType);
-        Q_INVOKABLE QString ioMethod() const;
-        Q_INVOKABLE int nBuffers() const;
-        Q_INVOKABLE QString description(const QString &webcam) const;
-        Q_INVOKABLE QVariantList caps(const QString &webcam) const;
-        Q_INVOKABLE QString capsDescription(const AkCaps &caps) const;
-        Q_INVOKABLE QVariantList imageControls() const;
-        Q_INVOKABLE bool setImageControls(const QVariantMap &imageControls);
-        Q_INVOKABLE bool resetImageControls();
-        Q_INVOKABLE QVariantList cameraControls() const;
-        Q_INVOKABLE bool setCameraControls(const QVariantMap &cameraControls);
-        Q_INVOKABLE bool resetCameraControls();
-        Q_INVOKABLE AkPacket readFrame();
-
-    private:
-        CaptureCMIOPrivate *d;
-
-        QVariantMap controlStatus(const QVariantList &controls) const;
-
-    public slots:
-        bool init();
-        void uninit();
-        void setDevice(const QString &device);
-        void setStreams(const QList<int> &streams);
-        void setIoMethod(const QString &ioMethod);
-        void setNBuffers(int nBuffers);
-        void resetDevice();
-        void resetStreams();
-        void resetIoMethod();
-        void resetNBuffers();
-        void reset();
-
-        void cameraConnected();
-        void cameraDisconnected();
-
-    private slots:
-        void updateDevices();
-};
-
-#endif // CAPTURECMIO_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/cmio/src/capturecmio.mm
+++ /dev/null
@@ -1,1563 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2020  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include <QCoreApplication>
-#include <QMap>
-#include <QVariant>
-#include <QWaitCondition>
-#include <QReadWriteLock>
-#include <ak.h>
-#include <akfrac.h>
-#include <akcaps.h>
-#include <akpacket.h>
-#include <sys/time.h>
-#import <AVFoundation/AVFoundation.h>
-#import <CoreMediaIO/CMIOHardwarePlugIn.h>
-
-#include "capturecmio.h"
-#include "deviceobserver.h"
-
-#define ENABLE_CONTROLS 0
-
-using FourCharCodeToStrMap = QMap<FourCharCode, QString>;
-
-enum StreamDirection
-{
-    StreamDirectionOutput,
-    StreamDirectionInput
-};
-
-enum ControlType
-{
-    ControlTypeAutomatic,
-    ControlTypeManual
-};
-
-enum ControlStatus
-{
-    ControlStatusOn,
-    ControlStatusOff
-};
-
-enum ControlValueType
-{
-    ControlValueTypeAbsolute,
-    ControlValueTypeNative,
-};
-
-class CaptureCMIOPrivate
-{
-    public:
-        id m_deviceObserver {nil};
-        CMSimpleQueueRef m_queue {nullptr};
-        CMSampleBufferRef m_curFrame {nil};
-        CMIODeviceID m_deviceID {kCMIODeviceUnknown};
-        CMIOStreamID m_streamID {kCMIOStreamUnknown};
-        QString m_device;
-        QList<int> m_streams;
-        QStringList m_devices;
-        QMap<QString, QString> m_descriptions;
-        QMap<QString, QVariantList> m_devicesCaps;
-        QMap<QString, CMIODeviceID> m_devicesID;
-        int m_nBuffers {32};
-        QReadWriteLock m_mutex;
-        QReadWriteLock m_controlsMutex;
-        QWaitCondition m_frameReady;
-        AkFrac m_fps;
-        AkFrac m_timeBase;
-        AkCaps m_caps;
-        qint64 m_id {-1};
-        QVariantList m_globalImageControls;
-        QVariantList m_globalCameraControls;
-        QVariantMap m_localImageControls;
-        QVariantMap m_localCameraControls;
-
-        CaptureCMIOPrivate();
-        static bool canUseCamera();
-        static inline QString fourccToStr(FourCharCode format);
-        static inline FourCharCode strToFourCC(const QString &format);
-        CMVideoFormatDescriptionRef formatFromCaps(CMIODeviceID deviceID,
-                                                   const AkCaps &caps,
-                                                   CMIOStreamID *streamID);
-        static inline const FourCharCodeToStrMap &fourccToStrMap();
-        AkCaps capsFromFrameSampleBuffer(const CMSampleBufferRef sampleBuffer) const;
-        QVariantMap controlStatus(const QVariantList &controls) const;
-        QVariantMap mapDiff(const QVariantMap &map1,
-                            const QVariantMap &map2) const;
-        QVector<CMIODeviceID> devices() const;
-        QString deviceUID(CMIODeviceID deviceID) const;
-        QString objectName(CMIOObjectID objectID) const;
-        QVector<CMIOStreamID> deviceStreams(CMIODeviceID deviceID) const;
-        QVector<Float64> streamFrameRates(CMIOStreamID streamID,
-                                          CMVideoFormatDescriptionRef formatDescription=nullptr) const;
-        AkCaps capsFromDescription(CMVideoFormatDescriptionRef formatDescription) const;
-        StreamDirection streamDirection(CMIOStreamID streamID) const;
-        CFArrayRef formatDescriptions(CMIOStreamID streamID) const;
-        CMIOClassID objectClassID(CMIOObjectID objectID) const;
-        QVector<CMIOControlID> deviceControls(CMIODeviceID deviceID) const;
-        ControlType controlType(CMIOControlID controlID, Boolean *isSettable) const;
-        void setControlType(CMIOControlID controlID, ControlType type) const;
-        ControlStatus controlStatus(CMIOControlID controlID, Boolean *isSettable) const;
-        void setControlStatus(CMIOControlID controlID, ControlStatus status) const;
-        ControlValueType controlValueType(CMIOControlID controlID) const;
-        void controlRange(CMIOControlID controlID,
-                          Float64 *min,
-                          Float64 *max) const;
-        Float64 controlValue(CMIOControlID controlID) const;
-        void setControlValue(CMIOControlID controlID, Float64 value) const;
-        void setFormatDescription(CMIOStreamID streamID,
-                                  CMVideoFormatDescriptionRef formatDescription);
-        void setFrameRate(CMIOStreamID streamID, Float64 frameRate);
-        static void streamQueueAltered(CMIOStreamID streamID,
-                                       void *token,
-                                       void *refCon);
-        QVariantList controls(CMIODeviceID deviceID) const;
-        bool setControls(CMIODeviceID deviceID, const QVariantMap &controls) const;
-};
-
-CaptureCMIO::CaptureCMIO(QObject *parent):
-    Capture(parent)
-{
-    this->d = new CaptureCMIOPrivate();
-    this->d->m_deviceObserver = [[DeviceObserverCMIO alloc]
-                                 initWithCaptureObject: this];
-
-    [[NSNotificationCenter defaultCenter]
-     addObserver: this->d->m_deviceObserver
-     selector: @selector(cameraConnected:)
-     name: AVCaptureDeviceWasConnectedNotification
-     object: nil];
-
-    [[NSNotificationCenter defaultCenter]
-     addObserver: this->d->m_deviceObserver
-     selector: @selector(cameraDisconnected:)
-     name: AVCaptureDeviceWasDisconnectedNotification
-     object: nil];
-
-    this->updateDevices();
-}
-
-CaptureCMIO::~CaptureCMIO()
-{
-    this->uninit();
-
-    [[NSNotificationCenter defaultCenter]
-     removeObserver: this->d->m_deviceObserver];
-
-    [this->d->m_deviceObserver disconnect];
-    [this->d->m_deviceObserver release];
-
-    delete this->d;
-}
-
-QStringList CaptureCMIO::webcams() const
-{
-    return this->d->m_devices;
-}
-
-QString CaptureCMIO::device() const
-{
-    return this->d->m_device;
-}
-
-QList<int> CaptureCMIO::streams()
-{
-    if (!this->d->m_streams.isEmpty())
-        return this->d->m_streams;
-
-    auto caps = this->caps(this->d->m_device);
-
-    if (caps.isEmpty())
-        return QList<int>();
-
-    return QList<int> {0};
-}
-
-QList<int> CaptureCMIO::listTracks(const QString &mimeType)
-{
-    if (mimeType != "video/x-raw"
-        && !mimeType.isEmpty())
-        return {};
-
-    auto caps = this->caps(this->d->m_device);
-    QList<int> streams;
-
-    for (int i = 0; i < caps.count(); i++)
-        streams << i;
-
-    return streams;
-}
-
-QString CaptureCMIO::ioMethod() const
-{
-    return {};
-}
-
-int CaptureCMIO::nBuffers() const
-{
-    return this->d->m_nBuffers;
-}
-
-QString CaptureCMIO::description(const QString &webcam) const
-{
-    return this->d->m_descriptions.value(webcam);
-}
-
-QVariantList CaptureCMIO::caps(const QString &webcam) const
-{
-    return this->d->m_devicesCaps.value(webcam);
-}
-
-QString CaptureCMIO::capsDescription(const AkCaps &caps) const
-{
-    if (caps.mimeType() != "video/unknown")
-        return QString();
-
-    AkFrac fps = caps.property("fps").toString();
-
-    return QString("%1, %2x%3, %4 FPS")
-                .arg(caps.property("fourcc").toString())
-                .arg(caps.property("width").toString())
-                .arg(caps.property("height").toString())
-                .arg(qRound(fps.value()));
-}
-
-QVariantList CaptureCMIO::imageControls() const
-{
-    return this->d->m_globalImageControls;
-}
-
-bool CaptureCMIO::setImageControls(const QVariantMap &imageControls)
-{
-    this->d->m_controlsMutex.lockForRead();
-    auto globalImageControls = this->d->m_globalImageControls;
-    this->d->m_controlsMutex.unlock();
-
-    for (int i = 0; i < globalImageControls.count(); i++) {
-        auto control = globalImageControls[i].toList();
-        auto controlName = control[0].toString();
-
-        if (imageControls.contains(controlName)) {
-            control[6] = imageControls[controlName];
-            globalImageControls[i] = control;
-        }
-    }
-
-    this->d->m_controlsMutex.lockForWrite();
-
-    if (this->d->m_globalImageControls == globalImageControls) {
-        this->d->m_controlsMutex.unlock();
-
-        return false;
-    }
-
-    this->d->m_globalImageControls = globalImageControls;
-    this->d->m_controlsMutex.unlock();
-
-    emit this->imageControlsChanged(imageControls);
-
-    return true;
-}
-
-bool CaptureCMIO::resetImageControls()
-{
-    QVariantMap controls;
-
-    for (auto &control: this->imageControls()) {
-        auto params = control.toList();
-        controls[params[0].toString()] = params[5].toInt();
-    }
-
-    return this->setImageControls(controls);
-}
-
-QVariantList CaptureCMIO::cameraControls() const
-{
-    return this->d->m_globalCameraControls;
-}
-
-bool CaptureCMIO::setCameraControls(const QVariantMap &cameraControls)
-{
-    this->d->m_controlsMutex.lockForRead();
-    auto globalCameraControls = this->d->m_globalCameraControls;
-    this->d->m_controlsMutex.unlock();
-
-    for (int i = 0; i < globalCameraControls.count(); i++) {
-        auto control = globalCameraControls[i].toList();
-        auto controlName = control[0].toString();
-
-        if (cameraControls.contains(controlName)) {
-            control[6] = cameraControls[controlName];
-            globalCameraControls[i] = control;
-        }
-    }
-
-    this->d->m_controlsMutex.lockForWrite();
-
-    if (this->d->m_globalCameraControls == globalCameraControls) {
-        this->d->m_controlsMutex.unlock();
-
-        return false;
-    }
-
-    this->d->m_globalCameraControls = globalCameraControls;
-    this->d->m_controlsMutex.unlock();
-
-    emit this->cameraControlsChanged(cameraControls);
-
-    return true;
-}
-
-bool CaptureCMIO::resetCameraControls()
-{
-    QVariantMap controls;
-
-    for (auto &control: this->cameraControls()) {
-        auto params = control.toList();
-        controls[params[0].toString()] = params[5].toInt();
-    }
-
-    return this->setCameraControls(controls);
-}
-
-AkPacket CaptureCMIO::readFrame()
-{
-    this->d->m_mutex.lockForWrite();
-
-#if defined(ENABLE_CONTROLS) && ENABLE_CONTROLS != 0
-    this->d->m_controlsMutex.lockForRead();
-    auto imageControls = this->d->controlStatus(this->d->m_globalImageControls);
-    this->d->m_controlsMutex.unlock();
-
-    if (this->d->m_localImageControls != imageControls) {
-        auto controls = this->d->mapDiff(this->d->m_localImageControls,
-                                         imageControls);
-        this->d->setControls(this->d->m_deviceID, controls);
-        this->d->m_localImageControls = imageControls;
-    }
-#endif
-
-    if (!this->d->m_curFrame)
-        if (!this->d->m_frameReady.wait(&this->d->m_mutex, 1000)) {
-            this->d->m_mutex.unlock();
-
-            return {};
-        }
-
-    // Read frame data.
-    QByteArray oBuffer;
-    auto imageBuffer = CMSampleBufferGetImageBuffer(this->d->m_curFrame);
-    auto dataBuffer = CMSampleBufferGetDataBuffer(this->d->m_curFrame);
-    auto caps = this->d->capsFromFrameSampleBuffer(this->d->m_curFrame);
-    caps.setProperty("fps", this->d->m_timeBase.invert().toString());
-
-    if (imageBuffer) {
-        size_t dataSize = CVPixelBufferGetDataSize(imageBuffer);
-        oBuffer.resize(int(dataSize));
-        CVPixelBufferLockBaseAddress(imageBuffer, 0);
-        void *data = CVPixelBufferGetBaseAddress(imageBuffer);
-        memcpy(oBuffer.data(), data, dataSize);
-        CVPixelBufferUnlockBaseAddress(imageBuffer, 0);
-    } else if (dataBuffer) {
-        size_t lengthAtOffset = 0;
-        size_t dataSize = 0;
-        char *data = nullptr;
-        CMBlockBufferGetDataPointer(dataBuffer,
-                                    0,
-                                    &lengthAtOffset,
-                                    &dataSize,
-                                    &data);
-        oBuffer.resize(int(dataSize));
-        memcpy(oBuffer.data(), data, dataSize);
-    }
-
-    // Read pts.
-    CMItemCount count = 0;
-    CMSampleTimingInfo timingInfo;
-    qint64 pts;
-    AkFrac timeBase;
-
-    if (CMSampleBufferGetOutputSampleTimingInfoArray(this->d->m_curFrame,
-                                                     1,
-                                                     &timingInfo,
-                                                     &count) == noErr) {
-        pts = timingInfo.presentationTimeStamp.value;
-        timeBase = AkFrac(1, timingInfo.presentationTimeStamp.timescale);
-    } else {
-        timeval timestamp;
-        gettimeofday(&timestamp, nullptr);
-        pts = qint64((timestamp.tv_sec
-                      + 1e-6 * timestamp.tv_usec)
-                     * this->d->m_timeBase.invert().value());
-        timeBase = this->d->m_timeBase;
-    }
-
-    CFRelease(this->d->m_curFrame);
-    this->d->m_curFrame = nil;
-
-    this->d->m_mutex.unlock();
-
-    // Create package.
-    AkPacket packet(caps);
-    packet.setBuffer(oBuffer);
-    packet.setPts(pts);
-    packet.setTimeBase(this->d->m_timeBase);
-    packet.setIndex(0);
-    packet.setId(this->d->m_id);
-
-    return packet;
-}
-
-QVariantMap CaptureCMIO::controlStatus(const QVariantList &controls) const
-{
-    QVariantMap controlStatus;
-
-    for (auto &control: controls) {
-        auto params = control.toList();
-        auto controlName = params[0].toString();
-        controlStatus[controlName] = params[0];
-    }
-
-    return controlStatus;
-}
-
-bool CaptureCMIO::init()
-{
-    this->d->m_localImageControls.clear();
-    this->d->m_localCameraControls.clear();
-
-    auto webcam = this->d->m_device;
-
-    if (webcam.isEmpty())
-        return false;
-
-    // Read selected caps.
-    auto streams = this->streams();
-
-    if (streams.isEmpty())
-        return false;
-
-    auto supportedCaps = this->caps(webcam);
-
-    if (supportedCaps.isEmpty())
-        return false;
-
-    auto deviceID = this->d->m_devicesID.value(webcam, kCMIODeviceUnknown);
-
-    if (deviceID == kCMIODeviceUnknown)
-        return false;
-
-    AkCaps caps = streams[0] < supportedCaps.size()?
-                    supportedCaps[streams[0]].value<AkCaps>():
-                    supportedCaps.first().value<AkCaps>();
-
-    // Configure camera format.
-    CMIOStreamID streamID = kCMIOStreamUnknown;
-    auto format = this->d->formatFromCaps(deviceID, caps, &streamID);
-
-    if (!format)
-        return false;
-
-    this->d->setFormatDescription(streamID, format);
-    CFRelease(format);
-    AkFrac fps = caps.property("fps").toString();
-    this->d->setFrameRate(streamID, fps.value());
-
-    // Start capturing from the camera.
-    this->d->m_queue = nullptr;
-    CMIOStreamCopyBufferQueue(streamID,
-                              CaptureCMIOPrivate::streamQueueAltered,
-                              this->d,
-                              &this->d->m_queue);
-    auto status = CMIODeviceStartStream(deviceID, streamID);
-
-    if (status != kCMIOHardwareNoError)
-        return false;
-
-    this->d->m_deviceID = deviceID;
-    this->d->m_streamID = streamID;
-    this->d->m_caps = caps;
-    this->d->m_timeBase = fps.invert();
-    this->d->m_id = Ak::id();
-
-    return true;
-}
-
-void CaptureCMIO::uninit()
-{
-    if (this->d->m_deviceID != kCMIODeviceUnknown
-        && this->d->m_streamID != kCMIOStreamUnknown) {
-        CMIODeviceStopStream(this->d->m_deviceID, this->d->m_streamID);
-    }
-
-    this->d->m_deviceID = kCMIODeviceUnknown;
-    this->d->m_streamID = kCMIOStreamUnknown;
-
-    if (this->d->m_queue) {
-        CFRelease(this->d->m_queue);
-        this->d->m_queue = nullptr;
-    }
-}
-
-void CaptureCMIO::setDevice(const QString &device)
-{
-    if (this->d->m_device == device)
-        return;
-
-    this->d->m_device = device;
-
-    if (device.isEmpty()) {
-        this->d->m_controlsMutex.lockForWrite();
-        this->d->m_globalImageControls.clear();
-        this->d->m_globalCameraControls.clear();
-        this->d->m_controlsMutex.unlock();
-    } else {
-        this->d->m_controlsMutex.lockForWrite();
-
-#if defined(ENABLE_CONTROLS) && ENABLE_CONTROLS != 0
-        auto deviceID = this->d->m_devicesID.value(device, kCMIODeviceUnknown);
-
-        if (deviceID != kCMIODeviceUnknown)
-            this->d->m_globalImageControls = this->d->controls(deviceID);
-#endif
-
-        this->d->m_controlsMutex.unlock();
-    }
-
-    this->d->m_controlsMutex.lockForRead();
-    auto imageStatus = this->d->controlStatus(this->d->m_globalImageControls);
-    auto cameraStatus = this->d->controlStatus(this->d->m_globalCameraControls);
-    this->d->m_controlsMutex.unlock();
-
-    emit this->deviceChanged(device);
-    emit this->imageControlsChanged(imageStatus);
-    emit this->cameraControlsChanged(cameraStatus);
-}
-
-void CaptureCMIO::setStreams(const QList<int> &streams)
-{
-    if (streams.isEmpty())
-        return;
-
-    int stream = streams[0];
-
-    if (stream < 0)
-        return;
-
-    auto supportedCaps = this->caps(this->d->m_device);
-
-    if (stream >= supportedCaps.length())
-        return;
-
-    QList<int> inputStreams;
-    inputStreams << stream;
-
-    if (this->streams() == inputStreams)
-        return;
-
-    this->d->m_streams = inputStreams;
-    emit this->streamsChanged(inputStreams);
-}
-
-void CaptureCMIO::setIoMethod(const QString &ioMethod)
-{
-    Q_UNUSED(ioMethod)
-}
-
-void CaptureCMIO::setNBuffers(int nBuffers)
-{
-    if (this->d->m_nBuffers == nBuffers)
-        return;
-
-    this->d->m_nBuffers = nBuffers;
-    emit this->nBuffersChanged(nBuffers);
-}
-
-void CaptureCMIO::resetDevice()
-{
-    this->setDevice(this->d->m_devices.value(0, ""));
-}
-
-void CaptureCMIO::resetStreams()
-{
-    QVariantList supportedCaps = this->caps(this->d->m_device);
-    QList<int> streams;
-
-    if (!supportedCaps.isEmpty())
-        streams << 0;
-
-    this->setStreams(streams);
-}
-
-void CaptureCMIO::resetIoMethod()
-{
-    this->setIoMethod("any");
-}
-
-void CaptureCMIO::resetNBuffers()
-{
-    this->setNBuffers(32);
-}
-
-void CaptureCMIO::reset()
-{
-    this->resetStreams();
-    this->resetImageControls();
-    this->resetCameraControls();
-}
-
-void CaptureCMIO::cameraConnected()
-{
-    this->updateDevices();
-}
-
-void CaptureCMIO::cameraDisconnected()
-{
-    this->updateDevices();
-}
-
-void CaptureCMIO::updateDevices()
-{
-    if (!CaptureCMIOPrivate::canUseCamera())
-        return;
-
-    decltype(this->d->m_devices) devices;
-    decltype(this->d->m_descriptions) descriptions;
-    decltype(this->d->m_devicesCaps) devicesCaps;
-    decltype(this->d->m_devicesID) devicesID;
-
-    if (this->d->m_devices != devices) {
-        this->d->m_devices = devices;
-        emit this->webcamsChanged(devices);
-    }
-
-    this->d->m_devices = devices;
-    this->d->m_descriptions = descriptions;
-    this->d->m_devicesCaps = devicesCaps;
-    this->d->m_devicesID = devicesID;
-
-    for (auto &id: this->d->devices()) {
-        auto deviceUID = this->d->deviceUID(id);
-        QVariantList caps;
-
-        for (auto &stream: this->d->deviceStreams(id)) {
-            if (this->d->streamDirection(stream) != StreamDirectionOutput)
-                continue;
-
-            auto formats = this->d->formatDescriptions(stream);
-
-            if (!formats)
-                continue;
-
-            for (CFIndex i = 0; i < CFArrayGetCount(formats); i++) {
-                auto format =
-                        reinterpret_cast<CMVideoFormatDescriptionRef>(CFArrayGetValueAtIndex(formats,
-                                                                                             i));
-                auto videoCaps = this->d->capsFromDescription(format);
-                auto frameRates = this->d->streamFrameRates(stream, format);
-
-                if (!videoCaps)
-                    continue;
-
-                for (auto &fpsRange: frameRates) {
-                    videoCaps.setProperty("fps",
-                                          AkFrac(qRound(1e3 * fpsRange),
-                                                 1e3).toString());
-                    caps << QVariant::fromValue(videoCaps);
-                }
-            }
-
-            CFRelease(formats);
-        }
-
-        if (!caps.isEmpty()) {
-            devices << deviceUID;
-            descriptions[deviceUID] = this->d->objectName(id);
-            devicesID[deviceUID] = id;
-            devicesCaps[deviceUID] = caps;
-        }
-    }
-
-    if (devicesCaps.isEmpty()) {
-        devices.clear();
-        descriptions.clear();
-        devicesID.clear();
-    }
-
-    this->d->m_descriptions = descriptions;
-    this->d->m_devicesCaps = devicesCaps;
-    this->d->m_devicesID = devicesID;
-
-    if (this->d->m_devices != devices) {
-        this->d->m_devices = devices;
-        emit this->webcamsChanged(devices);
-    }
-}
-
-CaptureCMIOPrivate::CaptureCMIOPrivate()
-{
-
-}
-
-bool CaptureCMIOPrivate::canUseCamera()
-{
-    if (@available(macOS 10.14, *)) {
-        auto status = [AVCaptureDevice authorizationStatusForMediaType: AVMediaTypeVideo];
-
-        if (status == AVAuthorizationStatusAuthorized)
-            return true;
-
-        static bool done;
-        static bool result = false;
-        done = false;
-
-        [AVCaptureDevice
-         requestAccessForMediaType: AVMediaTypeVideo
-         completionHandler: ^(BOOL granted) {
-            done = true;
-            result = granted;
-        }];
-
-        while (!done)
-            qApp->processEvents();
-
-        return result;
-    }
-
-    return true;
-}
-
-QString CaptureCMIOPrivate::fourccToStr(FourCharCode format)
-{
-    char fourcc[5];
-    memcpy(fourcc, &format, sizeof(FourCharCode));
-    fourcc[4] = 0;
-
-    return QString(fourcc);
-}
-
-FourCharCode CaptureCMIOPrivate::strToFourCC(const QString &format)
-{
-    FourCharCode fourcc;
-    memcpy(&fourcc, format.toStdString().c_str(), sizeof(FourCharCode));
-
-    return fourcc;
-}
-
-CMVideoFormatDescriptionRef CaptureCMIOPrivate::formatFromCaps(CMIODeviceID deviceID,
-                                                               const AkCaps &caps,
-                                                               CMIOStreamID *streamID)
-{
-    if (streamID)
-        *streamID = kCMIOStreamUnknown;
-
-    CMVideoFormatDescriptionRef formatDescription = nullptr;
-    bool exitLoop = false;
-    auto streams = this->deviceStreams(deviceID);
-
-    for (auto &stream: streams) {
-        if (this->streamDirection(stream) != StreamDirectionOutput)
-            continue;
-
-        auto formats = this->formatDescriptions(stream);
-
-        for (CFIndex i = 0; i < CFArrayGetCount(formats); i++) {
-            auto format =
-                    reinterpret_cast<CMVideoFormatDescriptionRef>(CFArrayGetValueAtIndex(formats,
-                                                                                         i));
-            auto videoCaps = this->capsFromDescription(format);
-            auto frameRates = this->streamFrameRates(stream);
-
-            if (!videoCaps)
-                continue;
-
-            for (auto &fpsRange: frameRates) {
-                videoCaps.setProperty("fps",
-                                      AkFrac(qRound(1e3 * fpsRange),
-                                             1e3).toString());
-
-                if (videoCaps == caps) {
-                    CFRetain(format);
-                    formatDescription = format;
-
-                    if (streamID)
-                        *streamID = stream;
-
-                    exitLoop = true;
-
-                    break;
-                }
-            }
-        }
-
-        CFRelease(formats);
-
-        if (exitLoop)
-            break;
-    }
-
-    return formatDescription;
-}
-
-const FourCharCodeToStrMap &CaptureCMIOPrivate::fourccToStrMap()
-{
-    static const FourCharCodeToStrMap fourccToStrMap {
-        // Raw formats
-        {kCMPixelFormat_32ARGB         , "ARGB"    },
-        {kCMPixelFormat_24RGB          , "RGB"     },
-        {kCMPixelFormat_16BE555        , "RGB555BE"},
-        {kCMPixelFormat_16BE565        , "RGB565BE"},
-        {kCMPixelFormat_16LE555        , "RGB555"  },
-        {kCMPixelFormat_16LE565        , "RGB565"  },
-        {kCMPixelFormat_16LE5551       , "ARGB555" },
-        {kCMPixelFormat_422YpCbCr8     , "UYVY"    },
-        {kCMPixelFormat_422YpCbCr8_yuvs, "YUY2"    },
-
-        // Compressed formats
-        {kCMVideoCodecType_422YpCbCr8  , "UYVY"},
-        {kCMVideoCodecType_JPEG        , "JPEG"},
-        {kCMVideoCodecType_JPEG_OpenDML, "MJPG"},
-        {kCMVideoCodecType_H263        , "H263"},
-        {kCMVideoCodecType_H264        , "H264"},
-        {kCMVideoCodecType_HEVC        , "HEVC"},
-        {kCMVideoCodecType_MPEG4Video  , "MPG4"},
-        {kCMVideoCodecType_MPEG2Video  , "MPG2"},
-        {kCMVideoCodecType_MPEG1Video  , "MPG1"}
-    };
-
-    return fourccToStrMap;
-}
-
-AkCaps CaptureCMIOPrivate::capsFromFrameSampleBuffer(const CMSampleBufferRef sampleBuffer) const
-{
-    auto formatDesc = CMSampleBufferGetFormatDescription(sampleBuffer);
-
-    AkCaps videoCaps;
-    videoCaps.setMimeType("video/unknown");
-
-    auto fourCC = CMFormatDescriptionGetMediaSubType(formatDesc);
-    auto &map = CaptureCMIOPrivate::fourccToStrMap();
-    videoCaps.setProperty("fourcc",
-                          map.value(fourCC,
-                                    CaptureCMIOPrivate::fourccToStr(fourCC)));
-
-    auto size = CMVideoFormatDescriptionGetDimensions(formatDesc);
-    videoCaps.setProperty("width", size.width);
-    videoCaps.setProperty("height", size.height);
-
-    return videoCaps;
-}
-
-QVariantMap CaptureCMIOPrivate::controlStatus(const QVariantList &controls) const
-{
-    QVariantMap controlStatus;
-
-    for (auto &control: controls) {
-        auto params = control.toList();
-        auto controlName = params[0].toString();
-        controlStatus[controlName] = params[6];
-    }
-
-    return controlStatus;
-}
-
-QVariantMap CaptureCMIOPrivate::mapDiff(const QVariantMap &map1,
-                                                const QVariantMap &map2) const
-{
-    QVariantMap map;
-
-    for (auto it = map2.cbegin(); it != map2.cend(); it++)
-        if (!map1.contains(it.key())
-            || map1[it.key()] != it.value()) {
-            map[it.key()] = it.value();
-        }
-
-    return map;
-}
-
-QVector<CMIODeviceID> CaptureCMIOPrivate::devices() const
-{
-    CMIOObjectPropertyAddress devicesProperty {
-        kCMIOHardwarePropertyDevices,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    UInt32 devicesSize = 0;
-    auto status =
-        CMIOObjectGetPropertyDataSize(kCMIOObjectSystemObject,
-                                      &devicesProperty,
-                                      0,
-                                      nullptr,
-                                      &devicesSize);
-
-    if (status != kCMIOHardwareNoError)
-        return {};
-
-    QVector<CMIODeviceID> devices(devicesSize / sizeof(CMIODeviceID));
-    status =
-        CMIOObjectGetPropertyData(kCMIOObjectSystemObject,
-                                  &devicesProperty,
-                                  0,
-                                  nullptr,
-                                  devicesSize,
-                                  &devicesSize,
-                                  devices.data());
-
-    return status == kCMIOHardwareNoError? devices: QVector<CMIODeviceID>();
-}
-
-QString CaptureCMIOPrivate::deviceUID(CMIODeviceID deviceID) const
-{
-    CMIOObjectPropertyAddress deviceUIDProperty {
-        kCMIODevicePropertyDeviceUID,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    UInt32 deviceUIDSize = sizeof(CFStringRef);
-    CFStringRef deviceUID = nullptr;
-    auto status =
-        CMIOObjectGetPropertyData(deviceID,
-                                  &deviceUIDProperty,
-                                  0,
-                                  nullptr,
-                                  deviceUIDSize,
-                                  &deviceUIDSize,
-                                  &deviceUID);
-
-    if (status != kCMIOHardwareNoError)
-        return {};
-
-    auto uid = QString::fromCFString(deviceUID);
-    CFRelease(deviceUID);
-
-    return uid;
-}
-
-QString CaptureCMIOPrivate::objectName(CMIOObjectID objectID) const
-{
-    CMIOObjectPropertyAddress objectNameProperty {
-        kCMIOObjectPropertyName,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    UInt32 objectNameSize = sizeof(CFStringRef);
-    CFStringRef objectName = nullptr;
-    auto status =
-        CMIOObjectGetPropertyData(objectID,
-                                  &objectNameProperty,
-                                  0,
-                                  nullptr,
-                                  objectNameSize,
-                                  &objectNameSize,
-                                  &objectName);
-
-    if (status != kCMIOHardwareNoError)
-        return {};
-
-    auto name = QString::fromCFString(objectName);
-    CFRelease(objectName);
-
-    return name;
-}
-
-QVector<CMIOStreamID> CaptureCMIOPrivate::deviceStreams(CMIODeviceID deviceID) const
-{
-    CMIOObjectPropertyAddress streamsProperty {
-        kCMIODevicePropertyStreams,
-        kCMIODevicePropertyScopeInput,
-        kCMIOObjectPropertyElementMaster
-    };
-    UInt32 deviceStreamsSize = 0;
-    auto status =
-        CMIOObjectGetPropertyDataSize(deviceID,
-                                      &streamsProperty,
-                                      0,
-                                      nullptr,
-                                      &deviceStreamsSize);
-
-    if (status != kCMIOHardwareNoError)
-        return {};
-
-    QVector<CMIOStreamID> streams(deviceStreamsSize / sizeof(CMIOStreamID));
-    status =
-        CMIOObjectGetPropertyData(deviceID,
-                                  &streamsProperty,
-                                  0,
-                                  nullptr,
-                                  deviceStreamsSize,
-                                  &deviceStreamsSize,
-                                  streams.data());
-
-    return status == kCMIOHardwareNoError? streams: QVector<CMIOStreamID>();
-}
-
-QVector<Float64> CaptureCMIOPrivate::streamFrameRates(CMIOStreamID streamID,
-                                                      CMVideoFormatDescriptionRef formatDescription) const
-{
-    UInt32 formatDescriptionSize =
-            formatDescription?
-                sizeof(CMVideoFormatDescriptionRef):
-                0;
-    CMIOObjectPropertyAddress frameRatesProperty {
-        kCMIOStreamPropertyFrameRates,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    UInt32 frameRatesSize = 0;
-    auto status =
-        CMIOObjectGetPropertyDataSize(streamID,
-                                      &frameRatesProperty,
-                                      formatDescriptionSize,
-                                      formatDescription?
-                                          &formatDescription:
-                                          nullptr,
-                                      &frameRatesSize);
-
-    if (status != kCMIOHardwareNoError)
-        return {};
-
-    QVector<Float64> frameRates(frameRatesSize / sizeof(Float64));
-    status =
-        CMIOObjectGetPropertyData(streamID,
-                                  &frameRatesProperty,
-                                  formatDescriptionSize,
-                                  formatDescription?
-                                      &formatDescription:
-                                      nullptr,
-                                  frameRatesSize,
-                                  &frameRatesSize,
-                                  frameRates.data());
-
-    return status == kCMIOHardwareNoError? frameRates: QVector<Float64>();
-}
-
-AkCaps CaptureCMIOPrivate::capsFromDescription(CMVideoFormatDescriptionRef formatDescription) const
-{
-    auto mediaType = CMFormatDescriptionGetMediaType(formatDescription);
-
-    if (mediaType != kCMMediaType_Video)
-        return {};
-
-    auto fourCC = CMFormatDescriptionGetMediaSubType(formatDescription);
-    auto size = CMVideoFormatDescriptionGetDimensions(formatDescription);
-    auto &map = CaptureCMIOPrivate::fourccToStrMap();
-    auto fourccStr = map.value(fourCC, CaptureCMIOPrivate::fourccToStr(fourCC));
-
-    // Ignore formats that can cause alignment problems when capturing.
-    if ((size.width % 32) != 0)
-        return {};
-
-    AkCaps videoCaps;
-    videoCaps.setMimeType("video/unknown");
-    videoCaps.setProperty("fourcc", fourccStr);
-    videoCaps.setProperty("width", size.width);
-    videoCaps.setProperty("height", size.height);
-
-    return videoCaps;
-}
-
-StreamDirection CaptureCMIOPrivate::streamDirection(CMIOStreamID streamID) const
-{
-    CMIOObjectPropertyAddress directionProperty {
-        kCMIOStreamPropertyDirection,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    UInt32 directionSize = sizeof(UInt32);
-    UInt32 direction = 0;
-    CMIOObjectGetPropertyData(streamID,
-                              &directionProperty,
-                              0,
-                              nullptr,
-                              directionSize,
-                              &directionSize,
-                              &direction);
-
-    return direction? StreamDirectionInput: StreamDirectionOutput;
-}
-
-CFArrayRef CaptureCMIOPrivate::formatDescriptions(CMIOStreamID streamID) const
-{
-    CMIOObjectPropertyAddress formatDescriptionsProperty {
-        kCMIOStreamPropertyFormatDescriptions,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    UInt32 formatDescriptionsSize = sizeof(CFArrayRef);
-    CFArrayRef formats = nullptr;
-    CMIOObjectGetPropertyData(streamID,
-                              &formatDescriptionsProperty,
-                              0,
-                              nullptr,
-                              formatDescriptionsSize,
-                              &formatDescriptionsSize,
-                              &formats);
-
-    return formats;
-}
-
-CMIOClassID CaptureCMIOPrivate::objectClassID(CMIOObjectID objectID) const
-{
-    CMIOObjectPropertyAddress classIDProperty {
-        kCMIOObjectPropertyClass,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    UInt32 classIDSize = sizeof(CMIOClassID);
-    CMIOClassID classID = 0;
-    CMIOObjectGetPropertyData(objectID,
-                              &classIDProperty,
-                              0,
-                              nullptr,
-                              classIDSize,
-                              &classIDSize,
-                              &classID);
-
-    return classID;
-}
-
-QVector<CMIOControlID> CaptureCMIOPrivate::deviceControls(CMIODeviceID deviceID) const
-{
-    CMIOObjectPropertyAddress ownedObjectsProperty {
-        kCMIOObjectPropertyOwnedObjects,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    QVector<CMIOClassID> controlClasses {
-        kCMIOFeatureControlClassID
-    };
-    UInt32 ownedObjectsSize = 0;
-    auto status =
-        CMIOObjectGetPropertyDataSize(deviceID,
-                                      &ownedObjectsProperty,
-                                      controlClasses.size() * sizeof(CMIOClassID),
-                                      controlClasses.data(),
-                                      &ownedObjectsSize);
-
-    if (status != kCMIOHardwareNoError)
-        return {};
-
-    QVector<CMIOControlID> deviceControls(ownedObjectsSize / sizeof(CMIOControlID));
-    status =
-        CMIOObjectGetPropertyData(deviceID,
-                                  &ownedObjectsProperty,
-                                  controlClasses.size() * sizeof(CMIOClassID),
-                                  controlClasses.data(),
-                                  ownedObjectsSize,
-                                  &ownedObjectsSize,
-                                  deviceControls.data());
-
-    return status == kCMIOHardwareNoError?
-                deviceControls:
-                QVector<CMIOControlID>();
-}
-
-ControlType CaptureCMIOPrivate::controlType(CMIOControlID controlID, Boolean *isSettable) const
-{
-    CMIOObjectPropertyAddress automaticManualProperty {
-        kCMIOFeatureControlPropertyAutomaticManual,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    UInt32 automaticManualSize = sizeof(UInt32);
-    UInt32 automaticManual = 0;
-    CMIOObjectGetPropertyData(controlID,
-                              &automaticManualProperty,
-                              0,
-                              nullptr,
-                              automaticManualSize,
-                              &automaticManualSize,
-                              &automaticManual);
-
-    if (isSettable) {
-        *isSettable = false;
-        CMIOObjectIsPropertySettable(controlID,
-                                     &automaticManualProperty,
-                                     isSettable);
-    }
-
-    return automaticManual? ControlTypeAutomatic: ControlTypeManual;
-}
-
-void CaptureCMIOPrivate::setControlType(CMIOControlID controlID, ControlType type) const
-{
-    CMIOObjectPropertyAddress automaticManualProperty {
-        kCMIOFeatureControlPropertyAutomaticManual,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    UInt32 automaticManualSize = sizeof(UInt32);
-    UInt32 automaticManual = type == ControlTypeAutomatic? 1: 0;
-    CMIOObjectSetPropertyData(controlID,
-                              &automaticManualProperty,
-                              0,
-                              nullptr,
-                              automaticManualSize,
-                              &automaticManual);
-}
-
-ControlStatus CaptureCMIOPrivate::controlStatus(CMIOControlID controlID, Boolean *isSettable) const
-{
-    CMIOObjectPropertyAddress onOffProperty {
-        kCMIOFeatureControlPropertyOnOff,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    UInt32 onOffSize = sizeof(UInt32);
-    UInt32 onOff = 0;
-    CMIOObjectGetPropertyData(controlID,
-                              &onOffProperty,
-                              0,
-                              nullptr,
-                              onOffSize,
-                              &onOffSize,
-                              &onOff);
-
-    if (isSettable) {
-        *isSettable = false;
-        CMIOObjectIsPropertySettable(controlID,
-                                     &onOffProperty,
-                                     isSettable);
-    }
-
-    return onOff? ControlStatusOn: ControlStatusOff;
-}
-
-void CaptureCMIOPrivate::setControlStatus(CMIOControlID controlID, ControlStatus status) const
-{
-    CMIOObjectPropertyAddress onOffProperty {
-        kCMIOFeatureControlPropertyOnOff,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    UInt32 onOffSize = sizeof(UInt32);
-    UInt32 onOff = status == ControlStatusOn? 1: 0;
-    CMIOObjectSetPropertyData(controlID,
-                              &onOffProperty,
-                              0,
-                              nullptr,
-                              onOffSize,
-                              &onOff);
-}
-
-ControlValueType CaptureCMIOPrivate::controlValueType(CMIOControlID controlID) const
-{
-    CMIOObjectPropertyAddress absoluteNativeProperty {
-        kCMIOFeatureControlPropertyAbsoluteNative,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    UInt32 absoluteNativeSize = sizeof(UInt32);
-    UInt32 absoluteNative = 0;
-    CMIOObjectGetPropertyData(controlID,
-                              &absoluteNativeProperty,
-                              0,
-                              nullptr,
-                              absoluteNativeSize,
-                              &absoluteNativeSize,
-                              &absoluteNative);
-
-    return absoluteNative? ControlValueTypeAbsolute: ControlValueTypeNative;
-}
-
-void CaptureCMIOPrivate::controlRange(CMIOControlID controlID,
-                                      Float64 *min,
-                                      Float64 *max) const
-{
-    if (!min && !max)
-        return;
-
-    auto valueType = this->controlValueType(controlID);
-    CMIOObjectPropertyAddress rangeProperty {
-        valueType == ControlValueTypeAbsolute?
-            kCMIOFeatureControlPropertyAbsoluteRange:
-            kCMIOFeatureControlPropertyNativeRange,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    UInt32 rangeSize = sizeof(AudioValueRange);
-    AudioValueRange range;
-    auto status =
-        CMIOObjectGetPropertyData(controlID,
-                                  &rangeProperty,
-                                  0,
-                                  nullptr,
-                                  rangeSize,
-                                  &rangeSize,
-                                  &range);
-
-    if (status == kCMIOHardwareNoError) {
-        if (min)
-            *min = range.mMinimum;
-
-        if (max)
-            *max = range.mMaximum;
-    } else {
-        if (min)
-            *min = 0;
-
-        if (max)
-            *max = 0;
-    }
-}
-
-Float64 CaptureCMIOPrivate::controlValue(CMIOControlID controlID) const
-{
-    auto valueType = this->controlValueType(controlID);
-    CMIOObjectPropertyAddress valueProperty {
-        valueType == ControlValueTypeAbsolute?
-            kCMIOFeatureControlPropertyAbsoluteValue:
-            kCMIOFeatureControlPropertyNativeValue,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    UInt32 valueSize = sizeof(Float32);
-    Float32 value;
-    CMIOObjectGetPropertyData(controlID,
-                              &valueProperty,
-                              0,
-                              nullptr,
-                              valueSize,
-                              &valueSize,
-                              &value);
-
-    return value;
-}
-
-void CaptureCMIOPrivate::setControlValue(CMIOControlID controlID,
-                                         Float64 value) const
-{
-    auto valueType = this->controlValueType(controlID);
-    CMIOObjectPropertyAddress valueProperty {
-        valueType == ControlValueTypeAbsolute?
-            kCMIOFeatureControlPropertyAbsoluteValue:
-            kCMIOFeatureControlPropertyNativeValue,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    UInt32 valueSize = sizeof(Float32);
-    Float32 val = value;
-    CMIOObjectSetPropertyData(controlID,
-                              &valueProperty,
-                              0,
-                              nullptr,
-                              valueSize,
-                              &val);
-}
-
-void CaptureCMIOPrivate::setFormatDescription(CMIOStreamID streamID,
-                                              CMVideoFormatDescriptionRef formatDescription)
-{
-    CMIOObjectPropertyAddress formatDescriptionProperty {
-        kCMIOStreamPropertyFormatDescription,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    CMIOObjectSetPropertyData(streamID,
-                              &formatDescriptionProperty,
-                              0,
-                              nullptr,
-                              sizeof(CMVideoFormatDescriptionRef),
-                              &formatDescription);
-}
-
-void CaptureCMIOPrivate::setFrameRate(CMIOStreamID streamID, Float64 frameRate)
-{
-    CMIOObjectPropertyAddress frameRateProperty {
-        kCMIOStreamPropertyFrameRate,
-        0,
-        kCMIOObjectPropertyElementMaster
-    };
-    CMIOObjectSetPropertyData(streamID,
-                              &frameRateProperty,
-                              0,
-                              nullptr,
-                              sizeof(Float64),
-                              &frameRate);
-}
-
-void CaptureCMIOPrivate::streamQueueAltered(CMIOStreamID streamID,
-                                            void *token,
-                                            void *refCon)
-{
-    Q_UNUSED(streamID)
-    Q_UNUSED(token)
-    auto self = reinterpret_cast<CaptureCMIOPrivate *>(refCon);
-
-    forever {
-        auto videoFrame = CMSampleBufferRef(CMSimpleQueueDequeue(self->m_queue));
-
-        if (!videoFrame)
-            break;
-
-        self->m_mutex.lockForWrite();
-
-        if (self->m_curFrame)
-            CFRelease(self->m_curFrame);
-
-        self->m_curFrame = videoFrame;
-        CFRetain(videoFrame);
-
-        self->m_mutex.unlock();
-    }
-}
-
-QVariantList CaptureCMIOPrivate::controls(CMIODeviceID deviceID) const
-{
-    QVariantList controls;
-
-    auto deviceControls = this->deviceControls(deviceID);
-
-    for (auto control: deviceControls) {
-        Boolean isTypeSettable = false;
-        auto type = this->controlType(control, &isTypeSettable);
-        Boolean isStatusSettable = false;
-        auto status = this->controlStatus(control, &isStatusSettable);
-        Float64 min = 0;
-        Float64 max = 0;
-        this->controlRange(control, &min, &max);
-
-        if (!qIsFinite(min) || !qIsFinite(min))
-            continue;
-
-        auto value = this->controlValue(control);
-
-        if (isTypeSettable && !isStatusSettable) {
-            controls << QVariant(QVariantList {
-                this->objectName(control) + " (Auto)",
-                "boolean",
-                0,
-                1,
-                1,
-                1,
-                type == ControlTypeAutomatic,
-                {}
-            });
-        }
-
-        if (isStatusSettable) {
-            controls << QVariant(QVariantList {
-                (min != max? "Enable ": "")
-                + this->objectName(control),
-                "boolean",
-                0,
-                1,
-                1,
-                1,
-                status == ControlStatusOn,
-                {}
-            });
-
-            if (min != max)
-                controls << QVariant(QVariantList {
-                    this->objectName(control),
-                    "integer",
-                    qRound(min),
-                    qRound(max),
-                    1,             // step
-                    qRound(value), // default
-                    qRound(value),
-                    {}
-                });
-        } else {
-            controls << QVariant(QVariantList {
-                this->objectName(control),
-                "integer",
-                qRound(min),
-                qRound(max),
-                1,             // step
-                qRound(value), // default
-                qRound(value),
-                {}
-            });
-        }
-    }
-
-    return controls;
-}
-
-bool CaptureCMIOPrivate::setControls(CMIODeviceID deviceID,
-                                     const QVariantMap &controls) const
-{
-    bool set = false;
-    auto deviceControls = this->deviceControls(deviceID);
-
-    for (auto control: deviceControls) {
-        Boolean isTypeSettable = false;
-        this->controlType(control, &isTypeSettable);
-        Boolean isStatusSettable = false;
-        this->controlStatus(control, &isStatusSettable);
-        Float64 min = 0;
-        Float64 max = 0;
-        this->controlRange(control, &min, &max);
-
-        if (!qIsFinite(min) || !qIsFinite(min))
-            continue;
-
-        if (isTypeSettable && !isStatusSettable) {
-            auto controlName = this->objectName(control) + " (Auto)";
-
-            if (controls.contains(controlName)) {
-                auto value = controls.value(controlName).toBool();
-                this->setControlType(control,
-                                     value?
-                                         ControlTypeAutomatic:
-                                         ControlTypeManual);
-                set |= true;
-            }
-        }
-
-        if (isStatusSettable) {
-            auto controlName =
-                    (min != max? "Enable ": "")
-                        + this->objectName(control);
-
-            if (controls.contains(controlName)) {
-                auto value = controls.value(controlName).toBool();
-                this->setControlStatus(control,
-                                       value?
-                                           ControlStatusOn:
-                                           ControlStatusOff);
-                set |= true;
-            }
-
-            if (min != max) {
-                auto controlName = this->objectName(control);
-
-                if (controls.contains(controlName)) {
-                    auto value = controls.value(controlName).toDouble();
-                    this->setControlValue(control, value);
-                    set |= true;
-                }
-            }
-        } else {
-            auto controlName = this->objectName(control);
-
-            if (controls.contains(controlName)) {
-                auto value = controls.value(controlName).toDouble();
-                this->setControlValue(control, value);
-                set |= true;
-            }
-        }
-    }
-
-    return set;
-}
-
-#include "moc_capturecmio.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/cmio/src/deviceobserver.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2020  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef DEVICEOBSERVER_H
-#define DEVICEOBSERVER_H
-
-#import <AVFoundation/AVFoundation.h>
-
-#include "capturecmio.h"
-
-@interface DeviceObserverCMIO: NSObject {
-    CaptureCMIO *m_capture;
-}
-
-- (id) initWithCaptureObject: (CaptureCMIO *) object;
-- (void) cameraConnected: (NSNotification *) notification;
-- (void) cameraDisconnected: (NSNotification *) notification;
-- (void) disconnect;
-@end
-
-#endif // DEVICEOBSERVER_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/cmio/src/deviceobserver.mm
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2020  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include <QWaitCondition>
-
-#include "deviceobserver.h"
-
-@implementation DeviceObserverCMIO
-
-- (id) initWithCaptureObject: (CaptureCMIO *) object
-{
-    self = [super init];
-
-    if (!self)
-        return nil;
-
-    m_capture = object;
-
-    return self;
-}
-
-- (void) cameraConnected: (NSNotification *) notification
-{
-    Q_UNUSED(notification)
-
-    if (!m_capture)
-        return;
-
-    dispatch_async(dispatch_get_main_queue(),
-                   ^{
-                       if (m_capture)
-                           m_capture->cameraConnected();
-                   });
-}
-
-- (void) cameraDisconnected: (NSNotification *) notification
-{
-    Q_UNUSED(notification)
-
-    if (!m_capture)
-        return;
-
-    dispatch_async(dispatch_get_main_queue(),
-                   ^{
-                       if (m_capture)
-                           m_capture->cameraDisconnected();
-                   });
-}
-
-- (void) disconnect
-{
-    [NSObject cancelPreviousPerformRequestsWithTarget: self];
-    m_capture = NULL;
-}
-
-@end
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/cmio/src/plugin.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2020  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include "plugin.h"
-#include "capturecmio.h"
-
-QObject *Plugin::create(const QString &key, const QString &specification)
-{
-    Q_UNUSED(key)
-    Q_UNUSED(specification)
-
-    return new CaptureCMIO();
-}
-
-QStringList Plugin::keys() const
-{
-    return {};
-}
-
-#include "moc_plugin.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/cmio/src/plugin.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2020  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef PLUGIN_H
-#define PLUGIN_H
-
-#include <akplugin.h>
-
-class Plugin: public QObject, public AkPlugin
-{
-    Q_OBJECT
-    Q_INTERFACES(AkPlugin)
-    Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
-
-    public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
-};
-
-#endif // PLUGIN_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/dshow/src/capturedshow.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/dshow/src/capturedshow.cpp
@@ -27,10 +27,17 @@
 #include <QWaitCondition>
 #include <ak.h>
 #include <akcaps.h>
+#include <akcompressedvideocaps.h>
+#include <akcompressedvideopacket.h>
 #include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideopacket.h>
 #include <dshow.h>
 #include <dbt.h>
+#include <dvdmedia.h>
+#include <aviriff.h>
+#include <mmsystem.h>
 #include <usbiodef.h>
 
 #include "capturedshow.h"
@@ -53,7 +60,7 @@ using VideoProcAmpPropertyMap = QMap<Vid
 
 inline VideoProcAmpPropertyMap initVideoProcAmpPropertyMap()
 {
-    VideoProcAmpPropertyMap vpapToStr = {
+    VideoProcAmpPropertyMap vpapToStr {
         {VideoProcAmp_Brightness           , "Brightness"            },
         {VideoProcAmp_Contrast             , "Contrast"              },
         {VideoProcAmp_Hue                  , "Hue"                   },
@@ -75,7 +82,7 @@ using CameraControlMap = QMap<CameraCont
 
 inline CameraControlMap initCameraControlMap()
 {
-    CameraControlMap ccToStr = {
+    CameraControlMap ccToStr {
         {CameraControl_Pan     , "Pan"     },
         {CameraControl_Tilt    , "Tilt"    },
         {CameraControl_Roll    , "Roll"    },
@@ -90,86 +97,73 @@ inline CameraControlMap initCameraContro
 
 Q_GLOBAL_STATIC_WITH_ARGS(CameraControlMap, ccToStr, (initCameraControlMap()))
 
-using GuidToStrMap = QMap<GUID, QString>;
+using RawFmtToAkFmtMap = QMap<GUID, AkVideoCaps::PixelFormat>;
 
-inline GuidToStrMap initGuidToStrMap()
+inline RawFmtToAkFmtMap initRawFmtToAkFmt()
 {
-    GuidToStrMap guidToStr = {
-        {MEDIASUBTYPE_CLPL               , "CLPL"    },
-        {MEDIASUBTYPE_YUYV               , "YUYV"    },
-        {MEDIASUBTYPE_IYUV               , "IYUV"    },
-        {MEDIASUBTYPE_YVU9               , "YVU9"    },
-        {MEDIASUBTYPE_Y411               , "Y411"    },
-        {MEDIASUBTYPE_Y41P               , "Y41P"    },
-        {MEDIASUBTYPE_YUY2               , "YUY2"    },
-        {MEDIASUBTYPE_YVYU               , "YVYU"    },
-        {MEDIASUBTYPE_UYVY               , "UYVY"    },
-        {MEDIASUBTYPE_Y211               , "Y211"    },
-        {MEDIASUBTYPE_CLJR               , "CLJR"    },
-        {MEDIASUBTYPE_IF09               , "IF09"    },
-        {MEDIASUBTYPE_CPLA               , "CPLA"    },
-        {MEDIASUBTYPE_MJPG               , "MJPG"    },
-        {MEDIASUBTYPE_TVMJ               , "TVMJ"    },
-        {MEDIASUBTYPE_WAKE               , "WAKE"    },
-        {MEDIASUBTYPE_CFCC               , "CFCC"    },
-        {MEDIASUBTYPE_IJPG               , "IJPG"    },
-        {MEDIASUBTYPE_Plum               , "Plum"    },
-        {MEDIASUBTYPE_DVCS               , "DVCS"    },
-        {MEDIASUBTYPE_DVSD               , "DVSD"    },
-        {MEDIASUBTYPE_MDVF               , "MDVF"    },
-        {MEDIASUBTYPE_RGB1               , "RGB1"    },
-        {MEDIASUBTYPE_RGB4               , "BGRX"    },
-        {MEDIASUBTYPE_RGB8               , "RGB8"    },
-        {MEDIASUBTYPE_RGB565             , "RGB565"  },
-        {MEDIASUBTYPE_RGB555             , "RGB555"  },
-        {MEDIASUBTYPE_RGB24              , "RGB"     },
-        {MEDIASUBTYPE_RGB32              , "BGRX"    },
-        {MEDIASUBTYPE_ARGB1555           , "ARGB555" },
-        {MEDIASUBTYPE_ARGB4444           , "ARGB4444"},
-        {MEDIASUBTYPE_ARGB32             , "ARGB"    },
-        {MEDIASUBTYPE_AYUV               , "AYUV"    },
-        {MEDIASUBTYPE_AI44               , "AI44"    },
-        {MEDIASUBTYPE_IA44               , "IA44"    },
-        {MEDIASUBTYPE_RGB32_D3D_DX7_RT   , "7R32"    },
-        {MEDIASUBTYPE_RGB16_D3D_DX7_RT   , "7R16"    },
-        {MEDIASUBTYPE_ARGB32_D3D_DX7_RT  , "7A88"    },
-        {MEDIASUBTYPE_ARGB4444_D3D_DX7_RT, "7A44"    },
-        {MEDIASUBTYPE_ARGB1555_D3D_DX7_RT, "7A15"    },
-        {MEDIASUBTYPE_RGB32_D3D_DX9_RT   , "9R32"    },
-        {MEDIASUBTYPE_RGB16_D3D_DX9_RT   , "9R16"    },
-        {MEDIASUBTYPE_ARGB32_D3D_DX9_RT  , "9A88"    },
-        {MEDIASUBTYPE_ARGB4444_D3D_DX9_RT, "9A44"    },
-        {MEDIASUBTYPE_ARGB1555_D3D_DX9_RT, "9A15"    },
-        {MEDIASUBTYPE_YV12               , "YV12"    },
-        {MEDIASUBTYPE_NV12               , "NV12"    },
-        {MEDIASUBTYPE_IMC1               , "IMC1"    },
-        {MEDIASUBTYPE_IMC2               , "IMC2"    },
-        {MEDIASUBTYPE_IMC3               , "IMC3"    },
-        {MEDIASUBTYPE_IMC4               , "IMC4"    },
-        {MEDIASUBTYPE_S340               , "S340"    },
-        {MEDIASUBTYPE_S342               , "S342"    },
-        {MEDIASUBTYPE_QTRpza             , "rpza"    },
-        {MEDIASUBTYPE_QTSmc              , "smc "    },
-        {MEDIASUBTYPE_QTRle              , "rle "    },
-        {MEDIASUBTYPE_QTJpeg             , "jpeg"    },
-        {MEDIASUBTYPE_dvsd               , "dvsd"    },
-        {MEDIASUBTYPE_dvhd               , "dvhd"    },
-        {MEDIASUBTYPE_dvsl               , "dvsl"    },
-        {MEDIASUBTYPE_dv25               , "dv25"    },
-        {MEDIASUBTYPE_dv50               , "dv50"    },
-        {MEDIASUBTYPE_dvh1               , "dvh1"    },
+    RawFmtToAkFmtMap rawFmtToAkFmt {
+        {MEDIASUBTYPE_ARGB1555, AkVideoCaps::Format_argb1555},
+        {MEDIASUBTYPE_ARGB32  , AkVideoCaps::Format_argbpack},
+        {MEDIASUBTYPE_ARGB4444, AkVideoCaps::Format_argb4444},
+        {MEDIASUBTYPE_AYUV    , AkVideoCaps::Format_ayuvpack},
+        {MEDIASUBTYPE_IF09    , AkVideoCaps::Format_yvu410p },
+        {MEDIASUBTYPE_IYUV    , AkVideoCaps::Format_yuv420p },
+        {MEDIASUBTYPE_NV12    , AkVideoCaps::Format_nv12    },
+        {MEDIASUBTYPE_RGB24   , AkVideoCaps::Format_rgb24   },
+        {MEDIASUBTYPE_RGB32   , AkVideoCaps::Format_0rgbpack},
+        {MEDIASUBTYPE_RGB555  , AkVideoCaps::Format_rgb555  },
+        {MEDIASUBTYPE_RGB565  , AkVideoCaps::Format_rgb565  },
+        {MEDIASUBTYPE_UYVY    , AkVideoCaps::Format_uyvy422 },
+        {MEDIASUBTYPE_Y211    , AkVideoCaps::Format_yuyv211 },
+        {MEDIASUBTYPE_Y41P    , AkVideoCaps::Format_uyvy411 },
+        {MEDIASUBTYPE_YUY2    , AkVideoCaps::Format_yuyv422 },
+        {MEDIASUBTYPE_YUYV    , AkVideoCaps::Format_yuyv422 },
+        {MEDIASUBTYPE_YV12    , AkVideoCaps::Format_yvu420p },
+        {MEDIASUBTYPE_YVU9    , AkVideoCaps::Format_yvu410p },
+        {MEDIASUBTYPE_YVYU    , AkVideoCaps::Format_yvyu422 },
     };
 
-    return guidToStr;
+    return rawFmtToAkFmt;
 }
 
-Q_GLOBAL_STATIC_WITH_ARGS(GuidToStrMap, guidToStr, (initGuidToStrMap()))
+Q_GLOBAL_STATIC_WITH_ARGS(RawFmtToAkFmtMap, rawFmtToAkFmt, (initRawFmtToAkFmt()))
+
+using CompressedFormatToStrMap = QMap<GUID, QString>;
+
+inline CompressedFormatToStrMap initCompressedFormatToStr()
+{
+    CompressedFormatToStrMap compressedFormatToStr {
+        {MEDIASUBTYPE_CFCC  , "mjpg"  },
+        {MEDIASUBTYPE_IJPG  , "jpeg"  },
+        {MEDIASUBTYPE_MDVF  , "dv"    },
+        {MEDIASUBTYPE_MJPG  , "mjpg"  },
+        {MEDIASUBTYPE_Plum  , "mjpg"  },
+        {MEDIASUBTYPE_QTJpeg, "jpeg"  },
+        {MEDIASUBTYPE_QTRle , "qtrle" },
+        {MEDIASUBTYPE_QTRpza, "qtrpza"},
+        {MEDIASUBTYPE_QTSmc , "qtsmc" },
+        {MEDIASUBTYPE_TVMJ  , "mjpg"  },
+        {MEDIASUBTYPE_WAKE  , "mjpg"  },
+        {MEDIASUBTYPE_dv25  , "dv25"  },
+        {MEDIASUBTYPE_dv50  , "dv50"  },
+        {MEDIASUBTYPE_dvh1  , "dvh1"  },
+        {MEDIASUBTYPE_dvhd  , "dvhd"  },
+        {MEDIASUBTYPE_dvsd  , "dvsd"  },
+        {MEDIASUBTYPE_dvsl  , "dvsl"  },
+    };
+
+    return compressedFormatToStr;
+}
+
+Q_GLOBAL_STATIC_WITH_ARGS(CompressedFormatToStrMap,
+                          compressedFormatToStr,
+                          (initCompressedFormatToStr()))
 
 using IoMethodMap = QMap<CaptureDShow::IoMethod, QString>;
 
 inline IoMethodMap initIoMethodMap()
 {
-    IoMethodMap ioMethodToStr = {
+    IoMethodMap ioMethodToStr {
         {CaptureDShow::IoMethodDirectRead, "directRead"},
         {CaptureDShow::IoMethodGrabSample, "grabSample"},
         {CaptureDShow::IoMethodGrabBuffer, "grabBuffer"}
@@ -197,7 +191,7 @@ class CaptureDShowPrivate
         QList<int> m_streams;
         QStringList m_devices;
         QMap<QString, QString> m_descriptions;
-        QMap<QString, QVariantList> m_devicesCaps;
+        QMap<QString, CaptureVideoCaps> m_devicesCaps;
         qint64 m_id {-1};
         AkFrac m_timeBase;
         CaptureDShow::IoMethod m_ioMethod {CaptureDShow::IoMethodGrabSample};
@@ -207,6 +201,7 @@ class CaptureDShowPrivate
         SampleGrabberPtr m_grabber;
         FrameGrabber m_frameGrabber;
         QByteArray m_curBuffer;
+        AM_MEDIA_TYPE *m_curMediaType {nullptr};
         QReadWriteLock m_mutex;
         QReadWriteLock m_controlsMutex;
         QWaitCondition m_waitCondition;
@@ -218,9 +213,16 @@ class CaptureDShowPrivate
         explicit CaptureDShowPrivate(CaptureDShow *self);
         QString devicePath(IPropertyBag *propertyBag) const;
         QString deviceDescription(IPropertyBag *propertyBag) const;
-        QVariantList caps(IBaseFilter *baseFilter) const;
-        AkCaps capsFromMediaType(const AM_MEDIA_TYPE *mediaType) const;
-        AkCaps capsFromMediaType(const MediaTypePtr &mediaType) const;
+        CaptureVideoCaps caps(IBaseFilter *baseFilter) const;
+        AkVideoCaps::PixelFormat nearestFormat(const BITMAPINFOHEADER *bitmapHeader) const;
+        AkCaps capsFromMediaType(const AM_MEDIA_TYPE *mediaType,
+                                 bool *isRaw=nullptr,
+                                 size_t *lineSize=nullptr,
+                                 bool *mirror=nullptr) const;
+        AkCaps capsFromMediaType(const MediaTypePtr &mediaType,
+                                 bool *isRaw=nullptr,
+                                 size_t *lineSize=nullptr,
+                                 bool *mirror=nullptr) const;
         HRESULT enumerateCameras(IEnumMoniker **ppEnum) const;
         MonikersMap listMonikers() const;
         MonikerPtr findMoniker(const QString &webcam) const;
@@ -248,6 +250,9 @@ class CaptureDShowPrivate
         QVariantMap mapDiff(const QVariantMap &map1,
                             const QVariantMap &map2) const;
         void frameReceived(qreal time, const QByteArray &buffer);
+        void sampleReceived(qreal time, IMediaSample *sample);
+        AkPacket processFrame(const AM_MEDIA_TYPE *mediaType,
+                              const QByteArray &buffer) const;
         void updateDevices();
 };
 
@@ -261,6 +266,11 @@ CaptureDShow::CaptureDShow(QObject *pare
                      [this] (qreal time, const QByteArray &packet) {
                         this->d->frameReceived(time, packet);
                      });
+    QObject::connect(&this->d->m_frameGrabber,
+                     &FrameGrabber::sampleReady,
+                     [this] (qreal time, IMediaSample *sample) {
+                        this->d->sampleReceived(time, sample);
+                     });
     qApp->installNativeEventFilter(this);
     this->d->updateDevices();
 }
@@ -268,6 +278,12 @@ CaptureDShow::CaptureDShow(QObject *pare
 CaptureDShow::~CaptureDShow()
 {
     qApp->removeNativeEventFilter(this);
+
+    if (this->d->m_curMediaType) {
+        this->d->freeMediaType(*this->d->m_curMediaType);
+        this->d->m_curMediaType = nullptr;
+    }
+
     delete this->d;
 }
 
@@ -294,10 +310,9 @@ QList<int> CaptureDShow::streams()
     return {0};
 }
 
-QList<int> CaptureDShow::listTracks(const QString &mimeType)
+QList<int> CaptureDShow::listTracks(AkCaps::CapsType type)
 {
-    if (mimeType != "video/x-raw"
-        && !mimeType.isEmpty())
+    if (type != AkCaps::CapsVideo && type != AkCaps::CapsUnknown)
         return {};
 
     auto caps = this->caps(this->d->m_device);
@@ -324,25 +339,11 @@ QString CaptureDShow::description(const
     return this->d->m_descriptions.value(webcam);
 }
 
-QVariantList CaptureDShow::caps(const QString &webcam) const
+CaptureVideoCaps CaptureDShow::caps(const QString &webcam) const
 {
     return this->d->m_devicesCaps.value(webcam);
 }
 
-QString CaptureDShow::capsDescription(const AkCaps &caps) const
-{
-    if (caps.mimeType() != "video/unknown")
-        return {};
-
-    AkFrac fps = caps.property("fps").toString();
-
-    return QString("%1, %2x%3, %4 FPS")
-                .arg(caps.property("fourcc").toString())
-                .arg(caps.property("width").toString())
-                .arg(caps.property("height").toString())
-                .arg(qRound(fps.value()));
-}
-
 QVariantList CaptureDShow::imageControls() const
 {
     return this->d->m_globalImageControls;
@@ -471,18 +472,7 @@ AkPacket CaptureDShow::readFrame()
         source->Release();
     }
 
-    AM_MEDIA_TYPE mediaType;
-    ZeroMemory(&mediaType, sizeof(AM_MEDIA_TYPE));
-    this->d->m_grabber->GetConnectedMediaType(&mediaType);
-    AkCaps caps = this->d->capsFromMediaType(&mediaType);
-    this->d->freeMediaType(mediaType);
-
     AkPacket packet;
-    auto timestamp = QDateTime::currentMSecsSinceEpoch();
-    auto pts =
-            qint64(timestamp
-                   * this->d->m_timeBase.invert().value()
-                   / 1e3);
 
     if (this->d->m_ioMethod != IoMethodDirectRead) {
         this->d->m_mutex.lockForWrite();
@@ -491,43 +481,50 @@ AkPacket CaptureDShow::readFrame()
             this->d->m_waitCondition.wait(&this->d->m_mutex, 1000);
 
         if (!this->d->m_curBuffer.isEmpty()) {
-            int bufferSize = this->d->m_curBuffer.size();
-            QByteArray oBuffer(bufferSize, 0);
-            memcpy(oBuffer.data(),
-                   this->d->m_curBuffer.constData(),
-                   size_t(bufferSize));
-
-            packet = AkPacket(caps);
-            packet.setBuffer(oBuffer);
-            packet.setPts(pts);
-            packet.setTimeBase(this->d->m_timeBase);
-            packet.setIndex(0);
-            packet.setId(this->d->m_id);
+            if (this->d->m_curMediaType) {
+                packet = this->d->processFrame(this->d->m_curMediaType,
+                                               this->d->m_curBuffer);
+            } else {
+                AM_MEDIA_TYPE mediaType;
+                ZeroMemory(&mediaType, sizeof(AM_MEDIA_TYPE));
+                this->d->m_grabber->GetConnectedMediaType(&mediaType);
+                packet = this->d->processFrame(&mediaType,
+                                               this->d->m_curBuffer);
+                this->d->freeMediaType(mediaType);
+            }
+
             this->d->m_curBuffer.clear();
         }
 
         this->d->m_mutex.unlock();
     } else {
-        long bufferSize;
-
-        HRESULT hr = this->d->m_grabber->GetCurrentBuffer(&bufferSize, nullptr);
+        IMediaSample *mediaSample = nullptr;
 
-        if (FAILED(hr))
-            return {};
+        if (SUCCEEDED(this->d->m_grabber->GetCurrentSample(&mediaSample))) {
+            BYTE *data = nullptr;
 
-        QByteArray oBuffer(bufferSize, 0);
-        hr = this->d->m_grabber->GetCurrentBuffer(&bufferSize,
-                                                  reinterpret_cast<long *>(oBuffer.data()));
+            if (SUCCEEDED(mediaSample->GetPointer(&data))){
+                AM_MEDIA_TYPE *sampleMediaType = nullptr;
 
-        if (FAILED(hr))
-            return {};
+                if (SUCCEEDED(mediaSample->GetMediaType(&sampleMediaType))) {
+                    QByteArray oBuffer(reinterpret_cast<char *>(data),
+                                       int(mediaSample->GetSize()));
+
+                    if (sampleMediaType) {
+                        packet = this->d->processFrame(sampleMediaType, oBuffer);
+                        CaptureDShowPrivate::deleteMediaType(sampleMediaType);
+                    } else {
+                        AM_MEDIA_TYPE mediaType;
+                        ZeroMemory(&mediaType, sizeof(AM_MEDIA_TYPE));
+                        this->d->m_grabber->GetConnectedMediaType(&mediaType);
+                        packet = this->d->processFrame(&mediaType, oBuffer);
+                        this->d->freeMediaType(mediaType);
+                    }
+                }
+            }
 
-        packet = AkPacket(caps);
-        packet.setBuffer(oBuffer);
-        packet.setPts(pts);
-        packet.setTimeBase(this->d->m_timeBase);
-        packet.setIndex(0);
-        packet.setId(this->d->m_id);
+            mediaSample->Release();
+        }
     }
 
     return packet;
@@ -605,10 +602,10 @@ QString CaptureDShowPrivate::deviceDescr
     return description;
 }
 
-QVariantList CaptureDShowPrivate::caps(IBaseFilter *baseFilter) const
+CaptureVideoCaps CaptureDShowPrivate::caps(IBaseFilter *baseFilter) const
 {
     auto pins = this->enumPins(baseFilter, PINDIR_OUTPUT);
-    QVariantList caps;
+    CaptureVideoCaps caps;
 
     for (auto &pin: pins) {
         IEnumMediaTypes *pEnum = nullptr;
@@ -622,12 +619,11 @@ QVariantList CaptureDShowPrivate::caps(I
         while (pEnum->Next(1, &mediaType, nullptr) == S_OK) {
             if (mediaType->formattype == FORMAT_VideoInfo
                 && mediaType->cbFormat >= sizeof(VIDEOINFOHEADER)
-                && mediaType->pbFormat != nullptr
-                && guidToStr->contains(mediaType->subtype)) {
+                && mediaType->pbFormat != nullptr) {
                 auto videoCaps = this->capsFromMediaType(mediaType);
 
                 if (videoCaps)
-                    caps << QVariant::fromValue(videoCaps);
+                    caps << videoCaps;
             }
 
             this->deleteMediaType(mediaType);
@@ -639,32 +635,143 @@ QVariantList CaptureDShowPrivate::caps(I
     return caps;
 }
 
-AkCaps CaptureDShowPrivate::capsFromMediaType(const AM_MEDIA_TYPE *mediaType) const
+AkVideoCaps::PixelFormat CaptureDShowPrivate::nearestFormat(const BITMAPINFOHEADER *bitmapHeader) const
+{
+    static const QMap<quint32, AkVideoCaps::PixelFormat> fourccToAk {
+        {MAKEFOURCC('A', 'Y', 'U', 'V'), AkVideoCaps::Format_ayuvpack},
+        {MAKEFOURCC('I', 'F', '0', '9'), AkVideoCaps::Format_yvu410p },
+        {MAKEFOURCC('I', 'Y', 'U', 'V'), AkVideoCaps::Format_yuv420p },
+        {MAKEFOURCC('N', 'V', '1', '2'), AkVideoCaps::Format_nv12    },
+        {MAKEFOURCC('U', 'Y', 'V', 'Y'), AkVideoCaps::Format_uyvy422 },
+        {MAKEFOURCC('Y', '2', '1', '1'), AkVideoCaps::Format_yuyv211 },
+        {MAKEFOURCC('Y', '4', '1', 'P'), AkVideoCaps::Format_uyvy411 },
+        {MAKEFOURCC('Y', 'U', 'Y', '2'), AkVideoCaps::Format_yuyv422 },
+        {MAKEFOURCC('Y', 'U', 'Y', 'V'), AkVideoCaps::Format_yuyv422 },
+        {MAKEFOURCC('Y', 'V', '1', '2'), AkVideoCaps::Format_yvu420p },
+        {MAKEFOURCC('Y', 'V', 'U', '9'), AkVideoCaps::Format_yvu410p },
+        {MAKEFOURCC('Y', 'V', 'Y', 'U'), AkVideoCaps::Format_yvyu422 },
+    };
+
+    if (bitmapHeader->biCompression != BI_RGB
+        && bitmapHeader->biCompression != BI_BITFIELDS) {
+        return fourccToAk.value(bitmapHeader->biCompression,
+                                AkVideoCaps::Format_none);
+    }
+
+    static const DWORD mask555[] = {0x007c00, 0x0003e0, 0x00001f};
+    static const DWORD mask565[] = {0x007c00, 0x0003e0, 0x00001f};
+
+    switch(bitmapHeader->biBitCount) {
+    case 16: {
+        if (bitmapHeader->biCompression == BI_RGB)
+            return AkVideoCaps::Format_rgb555;
+
+        auto bitmapInfo = reinterpret_cast<const BITMAPINFO *>(bitmapHeader);
+        auto mask = reinterpret_cast<const DWORD *>(bitmapInfo->bmiColors);
+
+        if (memcmp(mask, mask555, 3 * sizeof(DWORD)) == 0)
+            return AkVideoCaps::Format_rgb555;
+
+        if (memcmp(mask, mask565, 3 * sizeof(DWORD)) == 0)
+            return AkVideoCaps::Format_rgb565;
+    }
+    case 24:
+        return AkVideoCaps::Format_rgb24;
+    case 32:
+        return AkVideoCaps::Format_0rgbpack;
+    default:
+        break;
+    }
+
+    return AkVideoCaps::Format_none;
+}
+
+AkCaps CaptureDShowPrivate::capsFromMediaType(const AM_MEDIA_TYPE *mediaType,
+                                              bool *isRaw,
+                                              size_t *lineSize,
+                                              bool *mirror) const
 {
     if (!mediaType)
         return {};
 
-    VIDEOINFOHEADER *videoInfoHeader =
-            reinterpret_cast<VIDEOINFOHEADER *>(mediaType->pbFormat);
-    QString fourcc = guidToStr->value(mediaType->subtype);
-
-    if (fourcc.isEmpty())
+    AkVideoCaps::PixelFormat format = AkVideoCaps::Format_none;
+    DWORD biCompression = 0;
+    WORD biBitCount = 0;
+    LONG biWidth = 0;
+    LONG biHeight = 0;
+    RECT rcTarget;
+    memset(&rcTarget, 0, sizeof(RECT));
+    REFERENCE_TIME AvgTimePerFrame = 0;
+    bool isRawFmt = false;
+
+    if (IsEqualGUID(mediaType->formattype, FORMAT_VideoInfo)) {
+        auto videoInfoHeader =
+                reinterpret_cast<VIDEOINFOHEADER *>(mediaType->pbFormat);
+        biCompression = videoInfoHeader->bmiHeader.biCompression;
+        biBitCount = videoInfoHeader->bmiHeader.biBitCount;
+        biWidth = videoInfoHeader->bmiHeader.biWidth;
+        biHeight = videoInfoHeader->bmiHeader.biHeight;
+        memcpy(&rcTarget, &videoInfoHeader->rcTarget, sizeof(RECT));
+        AvgTimePerFrame = videoInfoHeader->AvgTimePerFrame;
+        format = this->nearestFormat(&videoInfoHeader->bmiHeader);
+        isRawFmt = format != AkVideoCaps::Format_none;
+    } else if (IsEqualGUID(mediaType->formattype, FORMAT_VideoInfo2)) {
+        auto videoInfoHeader =
+                reinterpret_cast<VIDEOINFOHEADER2 *>(mediaType->pbFormat);
+        biCompression = videoInfoHeader->bmiHeader.biCompression;
+        biBitCount = videoInfoHeader->bmiHeader.biBitCount;
+        biWidth = videoInfoHeader->bmiHeader.biWidth;
+        biHeight = videoInfoHeader->bmiHeader.biHeight;
+        memcpy(&rcTarget, &videoInfoHeader->rcTarget, sizeof(RECT));
+        AvgTimePerFrame = videoInfoHeader->AvgTimePerFrame;
+        isRawFmt = format != AkVideoCaps::Format_none;
+        format = this->nearestFormat(&videoInfoHeader->bmiHeader);
+        isRawFmt = format != AkVideoCaps::Format_none;
+    } else {
         return {};
+    }
+
+    if (isRaw)
+        *isRaw = isRawFmt;
+
+    if (lineSize)
+        *lineSize = ((((biWidth * biBitCount) + 31) & ~31) >> 3);
+
+    if (mirror)
+        *mirror =
+            (biCompression == BI_RGB || biCompression == BI_BITFIELDS)
+            && biHeight > 0;
 
-    AkCaps videoCaps;
-    videoCaps.setMimeType("video/unknown");
-    videoCaps.setProperty("fourcc", fourcc);
-    videoCaps.setProperty("width", int(videoInfoHeader->bmiHeader.biWidth));
-    videoCaps.setProperty("height", int(videoInfoHeader->bmiHeader.biHeight));
-    AkFrac fps(TIME_BASE, videoInfoHeader->AvgTimePerFrame);
-    videoCaps.setProperty("fps", fps.toString());
+    int width = rcTarget.right - rcTarget.left;
+
+    if (width < 1)
+        width = int(qAbs(biWidth));
+
+    int height = rcTarget.bottom - rcTarget.top;
+
+    if (height < 1)
+        height = int(qAbs(biHeight));
+
+    AkFrac fps(TIME_BASE, AvgTimePerFrame);
+
+    if (isRawFmt) {
+        return AkVideoCaps(format, width, height, fps);
+    } else if (compressedFormatToStr->contains(mediaType->subtype)) {
+        return AkCompressedVideoCaps(compressedFormatToStr->value(mediaType->subtype),
+                                     width,
+                                     height,
+                                     fps);
+    }
 
-    return videoCaps;
+    return {};
 }
 
-AkCaps CaptureDShowPrivate::capsFromMediaType(const MediaTypePtr &mediaType) const
+AkCaps CaptureDShowPrivate::capsFromMediaType(const MediaTypePtr &mediaType,
+                                              bool *isRaw,
+                                              size_t *lineSize,
+                                              bool *mirror) const
 {
-    return this->capsFromMediaType(mediaType.data());
+    return this->capsFromMediaType(mediaType.data(), isRaw, lineSize, mirror);
 }
 
 HRESULT CaptureDShowPrivate::enumerateCameras(IEnumMoniker **ppEnum) const
@@ -806,7 +913,8 @@ MediaTypesList CaptureDShowPrivate::list
             if (mediaType->formattype == FORMAT_VideoInfo
                 && mediaType->cbFormat >= sizeof(VIDEOINFOHEADER)
                 && mediaType->pbFormat != nullptr
-                && guidToStr->contains(mediaType->subtype)) {
+                && (rawFmtToAkFmt->contains(mediaType->subtype)
+                    || compressedFormatToStr->contains(mediaType->subtype))) {
                 mediaTypes << MediaTypePtr(mediaType, this->deleteMediaType);
             } else {
                 this->deleteMediaType(mediaType);
@@ -1241,13 +1349,105 @@ void CaptureDShowPrivate::frameReceived(
     this->m_mutex.unlock();
 }
 
+void CaptureDShowPrivate::sampleReceived(qreal time, IMediaSample *sample)
+{
+    Q_UNUSED(time)
+
+    this->m_mutex.lockForWrite();
+    BYTE *data = nullptr;
+
+    if (SUCCEEDED(sample->GetPointer(&data))) {
+        this->m_curBuffer = QByteArray(reinterpret_cast<char *>(data),
+                                       int(sample->GetSize()));
+
+        if (this->m_curMediaType) {
+            this->freeMediaType(*this->m_curMediaType);
+            this->m_curMediaType = nullptr;
+        }
+
+        AM_MEDIA_TYPE *mediaType = nullptr;
+
+        if (SUCCEEDED(sample->GetMediaType(&mediaType)))
+            this->m_curMediaType = mediaType;
+    }
+
+    this->m_waitCondition.wakeAll();
+    this->m_mutex.unlock();
+
+    sample->Release();
+}
+
+AkPacket CaptureDShowPrivate::processFrame(const AM_MEDIA_TYPE *mediaType,
+                                           const QByteArray &buffer) const
+{
+    bool isRaw = false;
+    size_t srcLineSize = 0;
+    bool mirror = false;
+    auto caps = this->capsFromMediaType(mediaType,
+                                        &isRaw,
+                                        &srcLineSize,
+                                        &mirror);
+    auto timestamp = QDateTime::currentMSecsSinceEpoch();
+    auto pts =
+            qint64(qreal(timestamp)
+                   * this->m_timeBase.invert().value()
+                   / 1e3);
+
+    if (isRaw) {
+        AkVideoPacket packet(caps);
+        auto iData = buffer.constData();
+
+        for (int plane = 0; plane < packet.planes(); ++plane) {
+            auto iLineSize = packet.planes() > 1?
+                        srcLineSize >> packet.widthDiv(plane):
+                        srcLineSize;
+            auto oLineSize = packet.lineSize(plane);
+            auto lineSize = qMin<size_t>(iLineSize, oLineSize);
+            auto heightDiv = packet.heightDiv(plane);
+
+            if (mirror) {
+                for (int y = 0; y < packet.caps().height(); ++y) {
+                    int ys = y >> heightDiv;
+                    memcpy(packet.line(plane, packet.caps().height() - y - 1),
+                           iData + ys * iLineSize,
+                           lineSize);
+                }
+            } else {
+                for (int y = 0; y < packet.caps().height(); ++y) {
+                    int ys = y >> heightDiv;
+                    memcpy(packet.line(plane, y),
+                           iData + ys * iLineSize,
+                           lineSize);
+                }
+            }
+
+            iData += (iLineSize * packet.caps().height()) >> heightDiv;
+        }
+
+        packet.setPts(pts);
+        packet.setTimeBase(this->m_timeBase);
+        packet.setIndex(0);
+        packet.setId(this->m_id);
+
+        return packet;
+    }
+
+    AkCompressedVideoPacket packet(caps, buffer.size());
+    memcpy(packet.data(), buffer.constData(), buffer.size());
+    packet.setPts(pts);
+    packet.setTimeBase(this->m_timeBase);
+    packet.setIndex(0);
+    packet.setId(this->m_id);
+
+    return packet;
+}
+
 void CaptureDShowPrivate::updateDevices()
 {
     decltype(this->m_devices) devices;
     decltype(this->m_descriptions) descriptions;
     decltype(this->m_devicesCaps) devicesCaps;
 
-    MonikersMap monikers;
     IEnumMoniker *pEnum = nullptr;
     HRESULT hr = this->enumerateCameras(&pEnum);
 
@@ -1327,8 +1527,11 @@ bool CaptureDShow::init()
                                 nullptr,
                                 CLSCTX_INPROC_SERVER,
                                 IID_IGraphBuilder,
-                                reinterpret_cast<void **>(&this->d->m_graph))))
+                                reinterpret_cast<void **>(&this->d->m_graph)))) {
+        qFatal("Error creating FilterGraph instance.");
+
         return false;
+    }
 
     // Create the webcam filter.
     this->d->m_webcamFilter = this->d->findFilter(this->d->m_device);
@@ -1336,6 +1539,7 @@ bool CaptureDShow::init()
     if (!this->d->m_webcamFilter) {
         this->d->m_graph->Release();
         this->d->m_graph = nullptr;
+        qFatal("Error creating camera filter.");
 
         return false;
     }
@@ -1345,6 +1549,7 @@ bool CaptureDShow::init()
         this->d->m_graph->Release();
         this->d->m_graph = nullptr;
         this->d->m_webcamFilter.clear();
+        qFatal("Error adding camera filter to the graph.");
 
         return false;
     }
@@ -1360,6 +1565,7 @@ bool CaptureDShow::init()
         this->d->m_graph->Release();
         this->d->m_graph = nullptr;
         this->d->m_webcamFilter.clear();
+        qFatal("Error creating SampleGrabber instance.");
 
         return false;
     }
@@ -1368,6 +1574,7 @@ bool CaptureDShow::init()
         this->d->m_graph->Release();
         this->d->m_graph = nullptr;
         this->d->m_webcamFilter.clear();
+        qFatal("Error adding sample grabber to the graph.");
 
         return false;
     }
@@ -1379,6 +1586,7 @@ bool CaptureDShow::init()
         this->d->m_graph->Release();
         this->d->m_graph = nullptr;
         this->d->m_webcamFilter.clear();
+        qFatal("Error querying SampleGrabber interface.");
 
         return false;
     }
@@ -1387,6 +1595,7 @@ bool CaptureDShow::init()
         this->d->m_graph->Release();
         this->d->m_graph = nullptr;
         this->d->m_webcamFilter.clear();
+        qFatal("Error setting sample grabber to one shot.");
 
         return false;
     }
@@ -1397,6 +1606,7 @@ bool CaptureDShow::init()
         this->d->m_graph->Release();
         this->d->m_graph = nullptr;
         this->d->m_webcamFilter.clear();
+        qFatal("Error setting sample grabber to sampling mode.");
 
         return false;
     }
@@ -1417,6 +1627,7 @@ bool CaptureDShow::init()
         this->d->m_graph->Release();
         this->d->m_graph = nullptr;
         this->d->m_webcamFilter.clear();
+        qFatal("Error connecting filters.");
 
         return false;
     }
@@ -1432,6 +1643,7 @@ bool CaptureDShow::init()
         this->d->m_graph->Release();
         this->d->m_graph = nullptr;
         this->d->m_webcamFilter.clear();
+        qFatal("Error creating NullRenderer instance.");
 
         return false;
     }
@@ -1440,6 +1652,7 @@ bool CaptureDShow::init()
         this->d->m_graph->Release();
         this->d->m_graph = nullptr;
         this->d->m_webcamFilter.clear();
+        qFatal("Error adding null filter to the graph.");
 
         return false;
     }
@@ -1450,6 +1663,7 @@ bool CaptureDShow::init()
         this->d->m_graph->Release();
         this->d->m_graph = nullptr;
         this->d->m_webcamFilter.clear();
+        qFatal("Error connecting null filter.");
 
         return false;
     }
@@ -1461,6 +1675,7 @@ bool CaptureDShow::init()
         this->d->m_graph->Release();
         this->d->m_graph = nullptr;
         this->d->m_webcamFilter.clear();
+        qFatal("Camera streams are empty.");
 
         return false;
     }
@@ -1471,6 +1686,7 @@ bool CaptureDShow::init()
         this->d->m_graph->Release();
         this->d->m_graph = nullptr;
         this->d->m_webcamFilter.clear();
+        qFatal("Can't get camera media types.");
 
         return false;
     }
@@ -1483,6 +1699,7 @@ bool CaptureDShow::init()
         this->d->m_graph->Release();
         this->d->m_graph = nullptr;
         this->d->m_webcamFilter.clear();
+        qFatal("Error setting grabber media type.");
 
         return false;
     }
@@ -1511,19 +1728,42 @@ bool CaptureDShow::init()
         this->d->m_graph->Release();
         this->d->m_graph = nullptr;
         this->d->m_webcamFilter.clear();
+        qFatal("Error querying MediaControl interface.");
 
         return false;
     }
 
     this->d->m_id = Ak::id();
-    AkCaps caps = this->d->capsFromMediaType(mediaType);
-    this->d->m_timeBase = AkFrac(caps.property("fps").toString()).invert();
+    auto caps = this->d->capsFromMediaType(mediaType);
+
+    switch (caps.type()) {
+    case AkCaps::CapsVideo: {
+        AkVideoCaps videoCaps(caps);
+        this->d->m_timeBase = videoCaps.fps().invert();
+
+        break;
+    }
+    case AkCaps::CapsVideoCompressed: {
+        AkCompressedVideoCaps videoCaps(caps);
+        this->d->m_timeBase = videoCaps.fps().invert();
+
+        break;
+    }
+    default:
+        break;
+    }
+
+    if (this->d->m_curMediaType) {
+        this->d->freeMediaType(*this->d->m_curMediaType);
+        this->d->m_curMediaType = nullptr;
+    }
 
     if (FAILED(control->Run())) {
         control->Release();
         this->d->m_graph->Release();
         this->d->m_graph = nullptr;
         this->d->m_webcamFilter.clear();
+        qFatal("Failed to run the graph.");
 
         return false;
     }
@@ -1631,7 +1871,7 @@ void CaptureDShow::resetDevice()
 
 void CaptureDShow::resetStreams()
 {
-    QVariantList supportedCaps = this->caps(this->d->m_device);
+    auto supportedCaps = this->caps(this->d->m_device);
     QList<int> streams;
 
     if (!supportedCaps.isEmpty())
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/dshow/src/capturedshow.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/dshow/src/capturedshow.h
@@ -26,7 +26,9 @@
 
 class CaptureDShowPrivate;
 
-class CaptureDShow: public Capture, QAbstractNativeEventFilter
+class CaptureDShow:
+        public Capture,
+        public QAbstractNativeEventFilter
 {
     Q_OBJECT
 
@@ -42,42 +44,41 @@ class CaptureDShow: public Capture, QAbs
         CaptureDShow(QObject *parent=nullptr);
         ~CaptureDShow();
 
-        Q_INVOKABLE QStringList webcams() const;
-        Q_INVOKABLE QString device() const;
-        Q_INVOKABLE QList<int> streams();
-        Q_INVOKABLE QList<int> listTracks(const QString &mimeType);
-        Q_INVOKABLE QString ioMethod() const;
-        Q_INVOKABLE int nBuffers() const;
-        Q_INVOKABLE QString description(const QString &webcam) const;
-        Q_INVOKABLE QVariantList caps(const QString &webcam) const;
-        Q_INVOKABLE QString capsDescription(const AkCaps &caps) const;
-        Q_INVOKABLE QVariantList imageControls() const;
-        Q_INVOKABLE bool setImageControls(const QVariantMap &imageControls);
-        Q_INVOKABLE bool resetImageControls();
-        Q_INVOKABLE QVariantList cameraControls() const;
-        Q_INVOKABLE bool setCameraControls(const QVariantMap &cameraControls);
-        Q_INVOKABLE bool resetCameraControls();
-        Q_INVOKABLE AkPacket readFrame();
+        Q_INVOKABLE QStringList webcams() const override;
+        Q_INVOKABLE QString device() const override;
+        Q_INVOKABLE QList<int> streams() override;
+        Q_INVOKABLE QList<int> listTracks(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString ioMethod() const override;
+        Q_INVOKABLE int nBuffers() const override;
+        Q_INVOKABLE QString description(const QString &webcam) const override;
+        Q_INVOKABLE CaptureVideoCaps caps(const QString &webcam) const override;
+        Q_INVOKABLE QVariantList imageControls() const override;
+        Q_INVOKABLE bool setImageControls(const QVariantMap &imageControls) override;
+        Q_INVOKABLE bool resetImageControls() override;
+        Q_INVOKABLE QVariantList cameraControls() const override;
+        Q_INVOKABLE bool setCameraControls(const QVariantMap &cameraControls) override;
+        Q_INVOKABLE bool resetCameraControls() override;
+        Q_INVOKABLE AkPacket readFrame() override;
 
         bool nativeEventFilter(const QByteArray &eventType,
                                void *message,
-                               long *result);
+                               long *result) override;
 
     private:
         CaptureDShowPrivate *d;
 
     public slots:
-        bool init();
-        void uninit();
-        void setDevice(const QString &device);
-        void setStreams(const QList<int> &streams);
-        void setIoMethod(const QString &ioMethod);
-        void setNBuffers(int nBuffers);
-        void resetDevice();
-        void resetStreams();
-        void resetIoMethod();
-        void resetNBuffers();
-        void reset();
+        bool init() override;
+        void uninit() override;
+        void setDevice(const QString &device) override;
+        void setStreams(const QList<int> &streams) override;
+        void setIoMethod(const QString &ioMethod) override;
+        void setNBuffers(int nBuffers) override;
+        void resetDevice() override;
+        void resetStreams() override;
+        void resetIoMethod() override;
+        void resetNBuffers() override;
+        void reset() override;
 };
 
 #endif // CAPTUREDSHOW_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/dshow/src/framegrabber.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/dshow/src/framegrabber.cpp
@@ -63,17 +63,8 @@ HRESULT FrameGrabber::SampleCB(double ti
     if (!sample)
         return S_FALSE;
 
-    BYTE *buffer = nullptr;
-    LONG bufferSize = sample->GetSize();
-
-    HRESULT hr = sample->GetPointer(&buffer);
-
-    if (FAILED(hr))
-        return S_FALSE;
-
-    QByteArray oBuffer(reinterpret_cast<char *>(buffer), bufferSize);
-
-    emit this->frameReady(time, oBuffer);
+    sample->AddRef();
+    emit this->sampleReady(time, sample);
 
     return S_OK;
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/dshow/src/framegrabber.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/dshow/src/framegrabber.h
@@ -31,14 +31,15 @@ class FrameGrabber: public QObject, publ
     public:
         FrameGrabber();
         virtual ~FrameGrabber();
-        STDMETHODIMP_(ULONG) AddRef();
-        STDMETHODIMP_(ULONG) Release();
-        STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject);
-        STDMETHODIMP SampleCB(double time, IMediaSample *sample);
-        STDMETHODIMP BufferCB(double time, BYTE *buffer, long bufferSize);
+        STDMETHODIMP_(ULONG) AddRef() override;
+        STDMETHODIMP_(ULONG) Release() override;
+        STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject) override;
+        STDMETHODIMP SampleCB(double time, IMediaSample *sample) override;
+        STDMETHODIMP BufferCB(double time, BYTE *buffer, long bufferSize) override;
 
     signals:
         void frameReady(qreal time, const QByteArray &packet);
+        void sampleReady(qreal time, IMediaSample *sample);
 };
 
 #endif // FRAMEGRABBER_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/libuvc/src/capturelibuvc.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/libuvc/src/capturelibuvc.cpp
@@ -20,9 +20,13 @@
 #include <QtConcurrent>
 #include <QReadWriteLock>
 #include <ak.h>
-#include <akfrac.h>
 #include <akcaps.h>
+#include <akcompressedvideocaps.h>
+#include <akcompressedvideopacket.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideopacket.h>
 #include <libuvc/libuvc.h>
 
 #include "capturelibuvc.h"
@@ -54,8 +58,145 @@ class UvcControl
 
 Q_GLOBAL_STATIC(UsbGlobals, usbGlobals)
 
-using PixFmtToStrMap = QMap<uvc_frame_format, QString>;
-using FourccToStrMap = QMap<QString, QString>;
+class RawUvcFormat;
+using RawUvcFormatMap = QVector<RawUvcFormat>;
+
+class RawUvcFormat
+{
+    public:
+        QString fourcc;
+        uvc_frame_format frameFormat;
+        AkVideoCaps::PixelFormat format {AkVideoCaps::Format_none};
+
+        RawUvcFormat(const QString &fourcc,
+                     uvc_frame_format frameFormat,
+                     AkVideoCaps::PixelFormat format):
+            fourcc(fourcc),
+            frameFormat(frameFormat),
+            format(format)
+        {
+
+        }
+
+        static const RawUvcFormatMap &formats()
+        {
+            static const RawUvcFormatMap formats {
+                {""                , UVC_FRAME_FORMAT_UNKNOWN, AkVideoCaps::Format_none   },
+                {"YUY2"            , UVC_FRAME_FORMAT_YUYV   , AkVideoCaps::Format_yuyv422},
+                {"UYVY"            , UVC_FRAME_FORMAT_UYVY   , AkVideoCaps::Format_uyvy422},
+                {"\x7e\xeb\x36\xe4", UVC_FRAME_FORMAT_RGB    , AkVideoCaps::Format_rgb24  },
+                {"\x7d\xeb\x36\xe4", UVC_FRAME_FORMAT_BGR    , AkVideoCaps::Format_bgr24  },
+                {"Y800"            , UVC_FRAME_FORMAT_GRAY8  , AkVideoCaps::Format_gray8  },
+                {"Y16 "            , UVC_FRAME_FORMAT_GRAY16 , AkVideoCaps::Format_gray16 },
+#if LIBUVC_VERSION_GTE(0, 0, 7)
+                {"NV12"            , UVC_FRAME_FORMAT_NV12   , AkVideoCaps::Format_nv12   },
+                {"P010"            , UVC_FRAME_FORMAT_P010   , AkVideoCaps::Format_p010   },
+#endif
+            };
+
+            return formats;
+        }
+
+        static inline const RawUvcFormat &byFoucc(const QString &fourcc)
+        {
+            auto &fmts = formats();
+
+            for (auto &fmt: fmts)
+                if (fmt.fourcc == fourcc)
+                    return fmt;
+
+            return fmts[0];
+        }
+
+        static inline const RawUvcFormat &byFrameFormat(uvc_frame_format frameFormat)
+        {
+            auto &fmts = formats();
+
+            for (auto &fmt: fmts)
+                if (fmt.frameFormat == frameFormat)
+                    return fmt;
+
+            return fmts[0];
+        }
+
+        static inline const RawUvcFormat &byFormat(AkVideoCaps::PixelFormat format)
+        {
+            auto &fmts = formats();
+
+            for (auto &fmt: fmts)
+                if (fmt.format == format)
+                    return fmt;
+
+            return fmts[0];
+        }
+};
+
+class CompressedUvcFormat;
+using CompressedUvcFormatMap = QVector<CompressedUvcFormat>;
+
+class CompressedUvcFormat
+{
+    public:
+        QString fourcc;
+        uvc_frame_format frameFormat;
+        QString format;
+
+        CompressedUvcFormat(const QString &fourcc,
+                            uvc_frame_format frameFormat,
+                            const QString &format):
+            fourcc(fourcc),
+            frameFormat(frameFormat),
+            format(format)
+        {
+
+        }
+
+        static const CompressedUvcFormatMap &formats()
+        {
+            static const CompressedUvcFormatMap formats {
+                {""    , UVC_FRAME_FORMAT_UNKNOWN, ""     },
+                {"MJPG", UVC_FRAME_FORMAT_MJPEG  , "mjpeg"},
+#if LIBUVC_VERSION_GTE(0, 0, 7)
+                {"H264", UVC_FRAME_FORMAT_H264   , "h264" },
+#endif
+            };
+
+            return formats;
+        }
+
+        static inline const CompressedUvcFormat &byFoucc(const QString &fourcc)
+        {
+            auto &fmts = formats();
+
+            for (auto &fmt: fmts)
+                if (fmt.fourcc == fourcc)
+                    return fmt;
+
+            return fmts[0];
+        }
+
+        static inline const CompressedUvcFormat &byFrameFormat(uvc_frame_format frameFormat)
+        {
+            auto &fmts = formats();
+
+            for (auto &fmt: fmts)
+                if (fmt.frameFormat == frameFormat)
+                    return fmt;
+
+            return fmts[0];
+        }
+
+        static inline const CompressedUvcFormat &byFormat(const QString &format)
+        {
+            auto &fmts = formats();
+
+            for (auto &fmt: fmts)
+                if (fmt.format == format)
+                    return fmt;
+
+            return fmts[0];
+        }
+};
 
 class CaptureLibUVCPrivate
 {
@@ -65,7 +206,7 @@ class CaptureLibUVCPrivate
         QList<int> m_streams;
         QMap<quint32, QString> m_devices;
         QMap<QString, QString> m_descriptions;
-        QMap<QString, QVariantList> m_devicesCaps;
+        QMap<QString, CaptureVideoCaps> m_devicesCaps;
         QMap<QString, QVariantList> m_imageControls;
         QMap<QString, QVariantList> m_cameraControls;
         QString m_curDevice;
@@ -79,6 +220,7 @@ class CaptureLibUVCPrivate
         AkFrac m_fps;
 
         explicit CaptureLibUVCPrivate(CaptureLibUVC *self);
+        inline QString uvcId(quint16 vendorId, quint16 productId) const;
         QVariantList controlsList(uvc_device_handle_t *deviceHnd,
                                   uint8_t unit,
                                   uint8_t control,
@@ -91,8 +233,6 @@ class CaptureLibUVCPrivate
         static void frameCallback(struct uvc_frame *frame, void *userData);
         QString fourccToStr(const uint8_t *format) const;
         void updateDevices();
-        inline static const PixFmtToStrMap &pixFmtToStr();
-        inline static const FourccToStrMap &v4l2FourccToStr();
 };
 
 CaptureLibUVC::CaptureLibUVC(QObject *parent):
@@ -109,6 +249,7 @@ CaptureLibUVC::CaptureLibUVC(QObject *pa
 
     QObject::connect(usbGlobals,
                      &UsbGlobals::devicesUpdated,
+                     this,
                      [this] () {
                         this->d->updateDevices();
                      });
@@ -138,7 +279,7 @@ QList<int> CaptureLibUVC::streams()
     if (!this->d->m_streams.isEmpty())
         return this->d->m_streams;
 
-    QVariantList caps = this->caps(this->d->m_device);
+    auto caps = this->caps(this->d->m_device);
 
     if (caps.isEmpty())
         return QList<int>();
@@ -146,13 +287,13 @@ QList<int> CaptureLibUVC::streams()
     return QList<int> {0};
 }
 
-QList<int> CaptureLibUVC::listTracks(const QString &mimeType)
+QList<int> CaptureLibUVC::listTracks(AkCaps::CapsType type)
 {
-    if (mimeType != "video/x-raw"
-        && !mimeType.isEmpty())
-        return QList<int>();
+    if (type != AkCaps::CapsVideo
+        && type != AkCaps::CapsUnknown)
+        return {};
 
-    QVariantList caps = this->caps(this->d->m_device);
+    auto caps = this->d->m_devicesCaps.value(this->d->m_device);
     QList<int> streams;
 
     for (int i = 0; i < caps.count(); i++)
@@ -176,25 +317,11 @@ QString CaptureLibUVC::description(const
     return this->d->m_descriptions.value(webcam);
 }
 
-QVariantList CaptureLibUVC::caps(const QString &webcam) const
+CaptureVideoCaps CaptureLibUVC::caps(const QString &webcam) const
 {
     return this->d->m_devicesCaps.value(webcam);
 }
 
-QString CaptureLibUVC::capsDescription(const AkCaps &caps) const
-{
-    if (caps.mimeType() != "video/unknown")
-        return QString();
-
-    AkFrac fps = caps.property("fps").toString();
-
-    return QString("%1, %2x%3, %4 FPS")
-                .arg(caps.property("fourcc").toString())
-                .arg(caps.property("width").toString())
-                .arg(caps.property("height").toString())
-                .arg(qRound(fps.value()));
-}
-
 QVariantList CaptureLibUVC::imageControls() const
 {
     return this->d->m_imageControls.value(this->d->m_device);
@@ -398,19 +525,19 @@ AkPacket CaptureLibUVC::readFrame()
     return packet;
 }
 
-QString CaptureLibUVC::uvcId(quint16 vendorId, quint16 productId) const
-{
-    return QString("USB\\VID_v%1&PID_d%2")
-            .arg(vendorId, 4, 16, QChar('0'))
-            .arg(productId, 4, 16, QChar('0'));
-}
-
 CaptureLibUVCPrivate::CaptureLibUVCPrivate(CaptureLibUVC *self):
     self(self)
 {
 
 }
 
+QString CaptureLibUVCPrivate::uvcId(quint16 vendorId, quint16 productId) const
+{
+    return QString("USB\\VID_v%1&PID_d%2")
+            .arg(vendorId, 4, 16, QChar('0'))
+            .arg(productId, 4, 16, QChar('0'));
+}
+
 QVariantList CaptureLibUVCPrivate::controlsList(uvc_device_handle_t *deviceHnd,
                                                 uint8_t unit,
                                                 uint8_t control,
@@ -557,26 +684,43 @@ void CaptureLibUVCPrivate::frameCallback
 
     self->m_mutex.lockForWrite();
 
-    AkCaps caps("video/unknown");
-    caps.setProperty("fourcc", CaptureLibUVCPrivate::pixFmtToStr().value(frame->frame_format));
-    caps.setProperty("width", frame->width);
-    caps.setProperty("height", frame->height);
-    caps.setProperty("fps", self->m_fps.toString());
-
-    QByteArray buffer(reinterpret_cast<const char *>(frame->data),
-                       int(frame->data_bytes));
-
     auto pts = qint64(QTime::currentTime().msecsSinceStartOfDay()
                       * self->m_fps.value() / 1e3);
 
-    AkPacket packet(caps);
-    packet.setBuffer(buffer);
-    packet.setPts(pts);
-    packet.setTimeBase(self->m_fps.invert());
-    packet.setIndex(0);
-    packet.setId(self->m_id);
+    if (RawUvcFormat::byFrameFormat(frame->frame_format).format != AkVideoCaps::Format_none) {
+        AkVideoCaps caps(RawUvcFormat::byFrameFormat(frame->frame_format).format,
+                         frame->width,
+                         frame->height,
+                         self->m_fps);
+        AkVideoPacket packet(caps);
+        auto iLineSize = frame->step;
+        auto oLineSize = packet.lineSize(0);
+        auto lineSize = qMin<size_t>(iLineSize, oLineSize);
+
+        for (int y = 0; y < frame->height; ++y)
+            memcpy(packet.line(0, y),
+                   reinterpret_cast<const quint8 *>(frame->data) + y * iLineSize,
+                   lineSize);
+
+        packet.setPts(pts);
+        packet.setTimeBase(self->m_fps.invert());
+        packet.setIndex(0);
+        packet.setId(self->m_id);
+        self->m_curPacket = packet;
+    } else {
+        AkCompressedVideoCaps caps(CompressedUvcFormat::byFrameFormat(frame->frame_format).format,
+                                   frame->width,
+                                   frame->height,
+                                   self->m_fps);
+        AkCompressedVideoPacket packet(caps, frame->data_bytes);
+        memcpy(packet.data(), frame->data, frame->data_bytes);
+        packet.setPts(pts);
+        packet.setTimeBase(self->m_fps.invert());
+        packet.setIndex(0);
+        packet.setId(self->m_id);
+        self->m_curPacket = packet;
+    }
 
-    self->m_curPacket = packet;
     self->m_packetNotReady.wakeAll();
     self->m_mutex.unlock();
 }
@@ -620,7 +764,7 @@ void CaptureLibUVCPrivate::updateDevices
             continue;
         }
 
-        auto deviceId = self->uvcId(descriptor->idVendor,
+        auto deviceId = this->uvcId(descriptor->idVendor,
                                     descriptor->idProduct);
         uvc_device_handle_t *deviceHnd = nullptr;
 
@@ -672,27 +816,30 @@ void CaptureLibUVCPrivate::updateDevices
         devicesList[quint32((descriptor->idVendor << 16)
                             | descriptor->idProduct)] = deviceId;
         descriptions[deviceId] = description;
-        devicesCaps[deviceId] = QVariantList();
-        AkCaps videoCaps;
-        videoCaps.setMimeType("video/unknown");
+        devicesCaps[deviceId] = {};
 
         for (; formatDescription; formatDescription = formatDescription->next) {
             auto fourCC = this->fourccToStr(formatDescription->fourccFormat);
-            fourCC = CaptureLibUVCPrivate::v4l2FourccToStr().value(fourCC,
-                                                                   fourCC);
+            bool isRaw = true;
+            AkVideoCaps::PixelFormat rawFormat = AkVideoCaps::Format_none;
+            QString compressedFormat;
+
+            if (RawUvcFormat::byFoucc(fourCC).format == AkVideoCaps::Format_none) {
+                if (CompressedUvcFormat::byFoucc(fourCC).format.isEmpty()) {
+                    qWarning() << "Format not supported:" << fourCC;
 
-            if (std::find(CaptureLibUVCPrivate::pixFmtToStr().cbegin(),
-                          CaptureLibUVCPrivate::pixFmtToStr().cend(),
-                          fourCC) == CaptureLibUVCPrivate::pixFmtToStr().cend())
-                continue;
+                    continue;
+                }
 
-            videoCaps.setProperty("fourcc", fourCC);
+                isRaw = false;
+                compressedFormat = CompressedUvcFormat::byFoucc(fourCC).format;
+            } else {
+                rawFormat = RawUvcFormat::byFoucc(fourCC).format;
+            }
 
             for (auto description = formatDescription->frame_descs;
                  description;
                  description = description->next) {
-                videoCaps.setProperty("width", description->wWidth);
-                videoCaps.setProperty("height", description->wHeight);
 
                 if (description->intervals) {
                     int prevInterval = 0;
@@ -702,8 +849,17 @@ void CaptureLibUVCPrivate::updateDevices
                         auto fpsValue = qRound(fps.value());
 
                         if (prevInterval != fpsValue) {
-                            videoCaps.setProperty("fps", fps.toString());
-                            devicesCaps[deviceId] << QVariant::fromValue(videoCaps);
+                            if (isRaw) {
+                                devicesCaps[deviceId] << AkVideoCaps(rawFormat,
+                                                                     description->wWidth,
+                                                                     description->wHeight,
+                                                                     fps);
+                            } else {
+                                devicesCaps[deviceId] << AkCompressedVideoCaps(compressedFormat,
+                                                                               description->wWidth,
+                                                                               description->wHeight,
+                                                                               fps);
+                            }
                         }
 
                         prevInterval = fpsValue;
@@ -719,16 +875,35 @@ void CaptureLibUVCPrivate::updateDevices
                         auto fpsValue = qRound(fps.value());
 
                         if (prevInterval != fpsValue) {
-                            videoCaps.setProperty("fps", fps.toString());
-                            devicesCaps[deviceId] << QVariant::fromValue(videoCaps);
+                            if (isRaw) {
+                                devicesCaps[deviceId] << AkVideoCaps(rawFormat,
+                                                                     description->wWidth,
+                                                                     description->wHeight,
+                                                                     fps);
+                            } else {
+                                devicesCaps[deviceId] << AkCompressedVideoCaps(compressedFormat,
+                                                                               description->wWidth,
+                                                                               description->wHeight,
+                                                                               fps);
+                            }
                         }
 
                         prevInterval = fpsValue;
                     }
                 } else {
                     auto fps = AkFrac(100e5, description->dwDefaultFrameInterval);
-                    videoCaps.setProperty("fps", fps.toString());
-                    devicesCaps[deviceId] << QVariant::fromValue(videoCaps);
+
+                    if (isRaw) {
+                        devicesCaps[deviceId] << AkVideoCaps(rawFormat,
+                                                             description->wWidth,
+                                                             description->wHeight,
+                                                             fps);
+                    } else {
+                        devicesCaps[deviceId] << AkCompressedVideoCaps(compressedFormat,
+                                                                       description->wWidth,
+                                                                       description->wHeight,
+                                                                       fps);
+                    }
                 }
             }
         }
@@ -796,44 +971,6 @@ updateDevices_failed:
     }
 }
 
-const PixFmtToStrMap &CaptureLibUVCPrivate::pixFmtToStr()
-{
-    static const PixFmtToStrMap &pixFmtToStr {
-        {UVC_FRAME_FORMAT_YUYV  , "YUY2"  },
-        {UVC_FRAME_FORMAT_UYVY  , "UYVY"  },
-        {UVC_FRAME_FORMAT_RGB  ,  "RGB"   },
-        {UVC_FRAME_FORMAT_BGR  ,  "BGR"   },
-        {UVC_FRAME_FORMAT_MJPEG , "MJPG"  },
-        {UVC_FRAME_FORMAT_GRAY8 , "GRAY8" },
-        {UVC_FRAME_FORMAT_GRAY16, "GRAY16"},
-        {UVC_FRAME_FORMAT_BY8   , "BY8"   },
-        {UVC_FRAME_FORMAT_BA81  , "SBGGR8"},
-        {UVC_FRAME_FORMAT_SGRBG8, "SGRBG8"},
-        {UVC_FRAME_FORMAT_SGBRG8, "SGBRG8"},
-        {UVC_FRAME_FORMAT_SRGGB8, "SRGGB8"},
-        {UVC_FRAME_FORMAT_SBGGR8, "SBGGR8"},
-    };
-
-    return pixFmtToStr;
-}
-
-const FourccToStrMap &CaptureLibUVCPrivate::v4l2FourccToStr()
-{
-    static const FourccToStrMap fourccToStr {
-        {"RGB3", "RGB24" },
-        {"BGR3", "BGR24" },
-        {"Y800", "GRAY8" },
-        {"Y16 ", "GRAY16"},
-        {"BA81", "SBGGR8"},
-        {"GRBG", "SGRBG8"},
-        {"GBRG", "SGBRG8"},
-        {"RGGB", "SRGGB8"},
-        {"BGGR", "SBGGR8"},
-    };
-
-    return fourccToStr;
-}
-
 bool CaptureLibUVC::init()
 {
     if (this->d->m_devices.isEmpty() || this->d->m_device.isEmpty())
@@ -873,17 +1010,30 @@ bool CaptureLibUVC::init()
         return false;
     }
 
-    QVariantList supportedCaps = this->caps(this->d->m_device);
-    AkCaps caps = supportedCaps[streams[0]].value<AkCaps>();
+    auto supportedCaps = this->d->m_devicesCaps.value(this->d->m_device);
+    auto caps = supportedCaps[streams[0]];
     int fps = qRound(AkFrac(caps.property("fps").toString()).value());
 
     uvc_stream_ctrl_t streamCtrl;
-    error = uvc_get_stream_ctrl_format_size(this->d->m_deviceHnd,
-                                            &streamCtrl,
-                                            CaptureLibUVCPrivate::pixFmtToStr().key(caps.property("fourcc").toString()),
-                                            caps.property("width").toInt(),
-                                            caps.property("height").toInt(),
-                                            fps);
+
+
+    if (caps.type() == AkCaps::CapsVideo) {
+        AkVideoCaps videoCaps(caps);
+        error = uvc_get_stream_ctrl_format_size(this->d->m_deviceHnd,
+                                                &streamCtrl,
+                                                RawUvcFormat::byFormat(videoCaps.format()).frameFormat,
+                                                videoCaps.width(),
+                                                videoCaps.height(),
+                                                fps);
+    } else {
+        AkCompressedVideoCaps videoCaps(caps);
+        error = uvc_get_stream_ctrl_format_size(this->d->m_deviceHnd,
+                                                &streamCtrl,
+                                                CompressedUvcFormat::byFormat(videoCaps.format()).frameFormat,
+                                                videoCaps.width(),
+                                                videoCaps.height(),
+                                                fps);
+    }
 
     if (error != UVC_SUCCESS) {
         qDebug() << "CaptureLibUVC:" << uvc_strerror(error);
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/libuvc/src/capturelibuvc.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/libuvc/src/capturelibuvc.h
@@ -55,39 +55,37 @@ class CaptureLibUVC: public Capture
         CaptureLibUVC(QObject *parent=nullptr);
         ~CaptureLibUVC();
 
-        Q_INVOKABLE QStringList webcams() const;
-        Q_INVOKABLE QString device() const;
-        Q_INVOKABLE QList<int> streams();
-        Q_INVOKABLE QList<int> listTracks(const QString &mimeType);
-        Q_INVOKABLE QString ioMethod() const;
-        Q_INVOKABLE int nBuffers() const;
-        Q_INVOKABLE QString description(const QString &webcam) const;
-        Q_INVOKABLE QVariantList caps(const QString &webcam) const;
-        Q_INVOKABLE QString capsDescription(const AkCaps &caps) const;
-        Q_INVOKABLE QVariantList imageControls() const;
-        Q_INVOKABLE bool setImageControls(const QVariantMap &imageControls);
-        Q_INVOKABLE bool resetImageControls();
-        Q_INVOKABLE QVariantList cameraControls() const;
-        Q_INVOKABLE bool setCameraControls(const QVariantMap &cameraControls);
-        Q_INVOKABLE bool resetCameraControls();
-        Q_INVOKABLE AkPacket readFrame();
-        Q_INVOKABLE QString uvcId(quint16 vendorId, quint16 productId) const;
+        Q_INVOKABLE QStringList webcams() const override;
+        Q_INVOKABLE QString device() const override;
+        Q_INVOKABLE QList<int> streams() override;
+        Q_INVOKABLE QList<int> listTracks(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString ioMethod() const override;
+        Q_INVOKABLE int nBuffers() const override;
+        Q_INVOKABLE QString description(const QString &webcam) const override;
+        Q_INVOKABLE CaptureVideoCaps caps(const QString &webcam) const override;
+        Q_INVOKABLE QVariantList imageControls() const override;
+        Q_INVOKABLE bool setImageControls(const QVariantMap &imageControls) override;
+        Q_INVOKABLE bool resetImageControls() override;
+        Q_INVOKABLE QVariantList cameraControls() const override;
+        Q_INVOKABLE bool setCameraControls(const QVariantMap &cameraControls) override;
+        Q_INVOKABLE bool resetCameraControls() override;
+        Q_INVOKABLE AkPacket readFrame() override;
 
     private:
         CaptureLibUVCPrivate *d;
 
     public slots:
-        bool init();
-        void uninit();
-        void setDevice(const QString &device);
-        void setStreams(const QList<int> &streams);
-        void setIoMethod(const QString &ioMethod);
-        void setNBuffers(int nBuffers);
-        void resetDevice();
-        void resetStreams();
-        void resetIoMethod();
-        void resetNBuffers();
-        void reset();
+        bool init() override;
+        void uninit() override;
+        void setDevice(const QString &device) override;
+        void setStreams(const QList<int> &streams) override;
+        void setIoMethod(const QString &ioMethod) override;
+        void setNBuffers(int nBuffers) override;
+        void resetDevice() override;
+        void resetStreams() override;
+        void resetIoMethod() override;
+        void resetNBuffers() override;
+        void reset() override;
 };
 
 #endif // CAPTURELIBUVC_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/mediafoundation/src/capturemmf.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/mediafoundation/src/capturemmf.cpp
@@ -28,8 +28,12 @@
 #include <QtDebug>
 #include <ak.h>
 #include <akcaps.h>
+#include <akcompressedvideocaps.h>
+#include <akcompressedvideopacket.h>
 #include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideopacket.h>
 #include <mfapi.h>
 #include <mfidl.h>
 #include <mfreadwrite.h>
@@ -89,80 +93,67 @@ inline CameraControlMap initCameraContro
 
 Q_GLOBAL_STATIC_WITH_ARGS(CameraControlMap, ccToStr, (initCameraControlMap()))
 
-using GuidToStrMap = QMap<GUID, QString>;
+using RawFmtToAkFmtMap = QMap<GUID, AkVideoCaps::PixelFormat>;
 
-inline GuidToStrMap initGuidToStrMap()
+inline RawFmtToAkFmtMap initRawFmtToAkFmt()
 {
-    GuidToStrMap guidToStr {
-        {MEDIASUBTYPE_CLPL               , "CLPL"},
-        {MEDIASUBTYPE_YUYV               , "YUYV"},
-        {MEDIASUBTYPE_IYUV               , "IYUV"},
-        {MEDIASUBTYPE_YVU9               , "YVU9"},
-        {MEDIASUBTYPE_Y411               , "Y411"},
-        {MEDIASUBTYPE_Y41P               , "Y41P"},
-        {MEDIASUBTYPE_YUY2               , "YUY2"},
-        {MEDIASUBTYPE_YVYU               , "YVYU"},
-        {MEDIASUBTYPE_UYVY               , "UYVY"},
-        {MEDIASUBTYPE_Y211               , "Y211"},
-        {MEDIASUBTYPE_CLJR               , "CLJR"},
-        {MEDIASUBTYPE_IF09               , "IF09"},
-        {MEDIASUBTYPE_CPLA               , "CPLA"},
-        {MEDIASUBTYPE_MJPG               , "MJPG"},
-        {MEDIASUBTYPE_TVMJ               , "TVMJ"},
-        {MEDIASUBTYPE_WAKE               , "WAKE"},
-        {MEDIASUBTYPE_CFCC               , "CFCC"},
-        {MEDIASUBTYPE_IJPG               , "IJPG"},
-        {MEDIASUBTYPE_Plum               , "Plum"},
-        {MEDIASUBTYPE_DVCS               , "DVCS"},
-        {MEDIASUBTYPE_DVSD               , "DVSD"},
-        {MEDIASUBTYPE_MDVF               , "MDVF"},
-        {MEDIASUBTYPE_RGB1               , "RGB1"},
-        {MEDIASUBTYPE_RGB4               , "RGB4"},
-        {MEDIASUBTYPE_RGB8               , "RGB8"},
-        {MEDIASUBTYPE_RGB565             , "RGBP"},
-        {MEDIASUBTYPE_RGB555             , "RGBO"},
-        {MEDIASUBTYPE_RGB24              , "RGB3"},
-        {MEDIASUBTYPE_RGB32              , "RGB4"},
-        {MEDIASUBTYPE_ARGB1555           , "AR15"},
-        {MEDIASUBTYPE_ARGB4444           , "AR12"},
-        {MEDIASUBTYPE_ARGB32             , "BA24"},
-        {MEDIASUBTYPE_AYUV               , "AYUV"},
-        {MEDIASUBTYPE_AI44               , "AI44"},
-        {MEDIASUBTYPE_IA44               , "IA44"},
-        {MEDIASUBTYPE_RGB32_D3D_DX7_RT   , "7R32"},
-        {MEDIASUBTYPE_RGB16_D3D_DX7_RT   , "7R16"},
-        {MEDIASUBTYPE_ARGB32_D3D_DX7_RT  , "7A88"},
-        {MEDIASUBTYPE_ARGB4444_D3D_DX7_RT, "7A44"},
-        {MEDIASUBTYPE_ARGB1555_D3D_DX7_RT, "7A15"},
-        {MEDIASUBTYPE_RGB32_D3D_DX9_RT   , "9R32"},
-        {MEDIASUBTYPE_RGB16_D3D_DX9_RT   , "9R16"},
-        {MEDIASUBTYPE_ARGB32_D3D_DX9_RT  , "9A88"},
-        {MEDIASUBTYPE_ARGB4444_D3D_DX9_RT, "9A44"},
-        {MEDIASUBTYPE_ARGB1555_D3D_DX9_RT, "9A15"},
-        {MEDIASUBTYPE_YV12               , "YV12"},
-        {MEDIASUBTYPE_NV12               , "NV12"},
-        {MEDIASUBTYPE_IMC1               , "IMC1"},
-        {MEDIASUBTYPE_IMC2               , "IMC2"},
-        {MEDIASUBTYPE_IMC3               , "IMC3"},
-        {MEDIASUBTYPE_IMC4               , "IMC4"},
-        {MEDIASUBTYPE_S340               , "S340"},
-        {MEDIASUBTYPE_S342               , "S342"},
-        {MEDIASUBTYPE_QTRpza             , "rpza"},
-        {MEDIASUBTYPE_QTSmc              , "smc "},
-        {MEDIASUBTYPE_QTRle              , "rle "},
-        {MEDIASUBTYPE_QTJpeg             , "jpeg"},
-        {MEDIASUBTYPE_dvsd               , "dvsd"},
-        {MEDIASUBTYPE_dvhd               , "dvhd"},
-        {MEDIASUBTYPE_dvsl               , "dvsl"},
-        {MEDIASUBTYPE_dv25               , "dv25"},
-        {MEDIASUBTYPE_dv50               , "dv50"},
-        {MEDIASUBTYPE_dvh1               , "dvh1"}
+    RawFmtToAkFmtMap rawFmtToAkFmt {
+        {MEDIASUBTYPE_ARGB1555, AkVideoCaps::Format_argb1555},
+        {MEDIASUBTYPE_ARGB32  , AkVideoCaps::Format_argbpack},
+        {MEDIASUBTYPE_ARGB4444, AkVideoCaps::Format_argb4444},
+        {MEDIASUBTYPE_AYUV    , AkVideoCaps::Format_ayuvpack},
+        {MEDIASUBTYPE_IF09    , AkVideoCaps::Format_yvu410p },
+        {MEDIASUBTYPE_IYUV    , AkVideoCaps::Format_yuv420p },
+        {MEDIASUBTYPE_NV12    , AkVideoCaps::Format_nv12    },
+        {MEDIASUBTYPE_RGB24   , AkVideoCaps::Format_rgb24   },
+        {MEDIASUBTYPE_RGB32   , AkVideoCaps::Format_0rgbpack},
+        {MEDIASUBTYPE_RGB555  , AkVideoCaps::Format_rgb555  },
+        {MEDIASUBTYPE_RGB565  , AkVideoCaps::Format_rgb565  },
+        {MEDIASUBTYPE_UYVY    , AkVideoCaps::Format_uyvy422 },
+        {MEDIASUBTYPE_Y211    , AkVideoCaps::Format_yuyv211 },
+        {MEDIASUBTYPE_Y41P    , AkVideoCaps::Format_uyvy411 },
+        {MEDIASUBTYPE_YUY2    , AkVideoCaps::Format_yuyv422 },
+        {MEDIASUBTYPE_YUYV    , AkVideoCaps::Format_yuyv422 },
+        {MEDIASUBTYPE_YV12    , AkVideoCaps::Format_yvu420p },
+        {MEDIASUBTYPE_YVU9    , AkVideoCaps::Format_yvu410p },
+        {MEDIASUBTYPE_YVYU    , AkVideoCaps::Format_yvyu422 },
     };
 
-    return guidToStr;
+    return rawFmtToAkFmt;
 }
 
-Q_GLOBAL_STATIC_WITH_ARGS(GuidToStrMap, guidToStr, (initGuidToStrMap()))
+Q_GLOBAL_STATIC_WITH_ARGS(RawFmtToAkFmtMap, rawFmtToAkFmt, (initRawFmtToAkFmt()))
+
+using CompressedFormatToStrMap = QMap<GUID, QString>;
+
+inline CompressedFormatToStrMap initCompressedFormatToStr()
+{
+    CompressedFormatToStrMap compressedFormatToStr {
+        {MEDIASUBTYPE_CFCC  , "mjpg"  },
+        {MEDIASUBTYPE_IJPG  , "jpeg"  },
+        {MEDIASUBTYPE_MDVF  , "dv"    },
+        {MEDIASUBTYPE_MJPG  , "mjpg"  },
+        {MEDIASUBTYPE_Plum  , "mjpg"  },
+        {MEDIASUBTYPE_QTJpeg, "jpeg"  },
+        {MEDIASUBTYPE_QTRle , "qtrle" },
+        {MEDIASUBTYPE_QTRpza, "qtrpza"},
+        {MEDIASUBTYPE_QTSmc , "qtsmc" },
+        {MEDIASUBTYPE_TVMJ  , "mjpg"  },
+        {MEDIASUBTYPE_WAKE  , "mjpg"  },
+        {MEDIASUBTYPE_dv25  , "dv25"  },
+        {MEDIASUBTYPE_dv50  , "dv50"  },
+        {MEDIASUBTYPE_dvh1  , "dvh1"  },
+        {MEDIASUBTYPE_dvhd  , "dvhd"  },
+        {MEDIASUBTYPE_dvsd  , "dvsd"  },
+        {MEDIASUBTYPE_dvsl  , "dvsl"  },
+    };
+
+    return compressedFormatToStr;
+}
+
+Q_GLOBAL_STATIC_WITH_ARGS(CompressedFormatToStrMap,
+                          compressedFormatToStr,
+                          (initCompressedFormatToStr()))
 
 using IoMethodMap = QMap<CaptureMMF::IoMethod, QString>;
 
@@ -192,7 +183,7 @@ class CaptureMMFPrivate
         QList<int> m_streams;
         QStringList m_devices;
         QMap<QString, QString> m_descriptions;
-        QMap<QString, QVariantList> m_devicesCaps;
+        QMap<QString, CaptureVideoCaps> m_devicesCaps;
         qint64 m_id {-1};
         DWORD m_streamIndex {DWORD(MF_SOURCE_READER_FIRST_VIDEO_STREAM)};
         CaptureMMF::IoMethod m_ioMethod {CaptureMMF::IoMethodSync};
@@ -224,7 +215,10 @@ class CaptureMMFPrivate
         static void deleteSourceReader(IMFSourceReader *sourceReader);
         static void deleteMediaTypeHandler(IMFMediaTypeHandler *mediaTypeHandler);
         static void deleteMediaType(IMFMediaType *mediaType);
-        AkCaps capsFromMediaType(IMFMediaType *mediaType) const;
+        AkCaps capsFromMediaType(IMFMediaType *mediaType,
+                                 bool *isRaw=nullptr,
+                                 size_t *lineSize=nullptr,
+                                 bool *mirror=nullptr) const;
         QVariantList imageControls(IUnknown *device) const;
         bool setImageControls(IUnknown *device,
                               const QVariantMap &imageControls) const;
@@ -275,11 +269,10 @@ QList<int> CaptureMMF::streams()
     return {0};
 }
 
-QList<int> CaptureMMF::listTracks(const QString &mimeType)
+QList<int> CaptureMMF::listTracks(AkCaps::CapsType type)
 {
-    if (mimeType != "video/x-raw"
-        && !mimeType.isEmpty())
-        return QList<int>();
+    if (type != AkCaps::CapsVideo && type != AkCaps::CapsUnknown)
+        return {};
 
     auto caps = this->caps(this->d->m_device);
     QList<int> streams;
@@ -305,25 +298,11 @@ QString CaptureMMF::description(const QS
     return this->d->m_descriptions.value(webcam);
 }
 
-QVariantList CaptureMMF::caps(const QString &webcam) const
+CaptureVideoCaps CaptureMMF::caps(const QString &webcam) const
 {
     return this->d->m_devicesCaps.value(webcam);
 }
 
-QString CaptureMMF::capsDescription(const AkCaps &caps) const
-{
-    if (caps.mimeType() != "video/unknown")
-        return QString();
-
-    AkFrac fps = caps.property("fps").toString();
-
-    return QString("%1, %2x%3, %4 FPS")
-                .arg(caps.property("fourcc").toString())
-                .arg(caps.property("width").toString())
-                .arg(caps.property("height").toString())
-                .arg(qRound(fps.value()));
-}
-
 QVariantList CaptureMMF::imageControls() const
 {
     return this->d->m_globalImageControls;
@@ -336,8 +315,8 @@ bool CaptureMMF::setImageControls(const
     this->d->m_controlsMutex.unlock();
 
     for (int i = 0; i < globalImageControls.count(); i++) {
-        QVariantList control = globalImageControls[i].toList();
-        QString controlName = control[0].toString();
+        auto control = globalImageControls[i].toList();
+        auto controlName = control[0].toString();
 
         if (imageControls.contains(controlName)) {
             control[6] = imageControls[controlName];
@@ -366,7 +345,7 @@ bool CaptureMMF::resetImageControls()
     QVariantMap controls;
 
     for (auto &control: this->imageControls()) {
-        QVariantList params = control.toList();
+        auto params = control.toList();
         controls[params[0].toString()] = params[5].toInt();
     }
 
@@ -385,8 +364,8 @@ bool CaptureMMF::setCameraControls(const
     this->d->m_controlsMutex.unlock();
 
     for (int i = 0; i < globalCameraControls.count(); i++) {
-        QVariantList control = globalCameraControls[i].toList();
-        QString controlName = control[0].toString();
+        auto control = globalCameraControls[i].toList();
+        auto controlName = control[0].toString();
 
         if (cameraControls.contains(controlName)) {
             control[6] = cameraControls[controlName];
@@ -414,7 +393,7 @@ bool CaptureMMF::resetCameraControls()
     QVariantMap controls;
 
     for (auto &control: this->cameraControls()) {
-        QVariantList params = control.toList();
+        auto params = control.toList();
         controls[params[0].toString()] = params[5].toInt();
     }
 
@@ -479,7 +458,13 @@ AkPacket CaptureMMF::readFrame()
                                   actualStreamIndex);
     IMFMediaType *mediaType = nullptr;
     stream->GetCurrentMediaType(&mediaType);
-    AkCaps caps = this->d->capsFromMediaType(mediaType);
+    bool isRaw = false;
+    size_t srcLineSize = 0;
+    bool mirror = false;
+    auto caps = this->d->capsFromMediaType(mediaType,
+                                           &isRaw,
+                                           &srcLineSize,
+                                           &mirror);
     mediaType->Release();
 
     // Read buffer.
@@ -489,31 +474,131 @@ AkPacket CaptureMMF::readFrame()
     DWORD bufferLength = 0;
     buffer->GetMaxLength(&bufferLength);
 
-    QByteArray oBuffer(int(bufferLength), 0);
-    BYTE  *data = nullptr;
-    DWORD maxLength = 0;
+    // Read pts.
+    LONGLONG sampleTime = 0;
+    sample->GetSampleTime(&sampleTime);
+
+    if (isRaw) {
+        IMF2DBuffer *d2Buffer = nullptr;
+
+        if (SUCCEEDED(buffer->QueryInterface(IID_IMF2DBuffer,
+                                             reinterpret_cast<void **>(&d2Buffer)))) {
+            // Send packet.
+            AkVideoPacket packet(caps);
+            BYTE *data = nullptr;
+            LONG stride = 0;
+
+            d2Buffer->Lock2D(&data, &stride);
+            auto iData = data;
+
+            for (int plane = 0; plane < packet.planes(); ++plane) {
+                auto iLineSize = stride
+                               * packet.lineSize(plane)
+                               / packet.lineSize(0);
+                auto oLineSize = packet.lineSize(plane);
+                auto lineSize = qMin<size_t>(iLineSize, oLineSize);
+                auto heightDiv = packet.heightDiv(plane);
+
+                if (mirror) {
+                    for (int y = 0; y < packet.caps().height(); ++y) {
+                        int ys = y >> heightDiv;
+                        memcpy(packet.line(plane, packet.caps().height() - y - 1),
+                               iData + ys * iLineSize,
+                               lineSize);
+                    }
+                } else {
+                    for (int y = 0; y < packet.caps().height(); ++y) {
+                        int ys = y >> heightDiv;
+                        memcpy(packet.line(plane, y),
+                               iData + ys * iLineSize,
+                               lineSize);
+                    }
+                }
+
+                iData += (iLineSize * packet.caps().height()) >> heightDiv;
+            }
+
+            d2Buffer->Unlock2D();
+
+            packet.setPts(sampleTime);
+            packet.setTimeBase(AkFrac(1, TIME_BASE));
+            packet.setIndex(0);
+            packet.setId(this->d->m_id);
+
+            d2Buffer->Release();
+            buffer->Release();
+            sample->Release();
+
+            return packet;
+        }
+
+        // Send packet.
+        AkVideoPacket packet(caps);
+        BYTE *data = nullptr;
+        DWORD currentLength = 0;
+
+        buffer->Lock(&data, &bufferLength, &currentLength);
+        auto iData = data;
+
+        for (int plane = 0; plane < packet.planes(); ++plane) {
+            auto iLineSize = srcLineSize
+                           * packet.lineSize(plane)
+                           / packet.lineSize(0);
+            auto oLineSize = packet.lineSize(plane);
+            auto lineSize = qMin<size_t>(iLineSize, oLineSize);
+            auto heightDiv = packet.heightDiv(plane);
+
+            if (mirror) {
+                for (int y = 0; y < packet.caps().height(); ++y) {
+                    int ys = y >> heightDiv;
+                    memcpy(packet.line(plane, packet.caps().height() - y - 1),
+                           iData + ys * iLineSize,
+                           lineSize);
+                }
+            } else {
+                for (int y = 0; y < packet.caps().height(); ++y) {
+                    int ys = y >> heightDiv;
+                    memcpy(packet.line(plane, y),
+                           iData + ys * iLineSize,
+                           lineSize);
+                }
+            }
+
+            iData += (iLineSize * packet.caps().height()) >> heightDiv;
+        }
+
+        buffer->Unlock();
+
+        packet.setPts(sampleTime);
+        packet.setTimeBase(AkFrac(1, TIME_BASE));
+        packet.setIndex(0);
+        packet.setId(this->d->m_id);
+
+        buffer->Release();
+        sample->Release();
+
+        return packet;
+    }
+
+    // Send compressed packet.
+    AkCompressedVideoPacket packet(caps, bufferLength);
+    BYTE *data = nullptr;
     DWORD currentLength = 0;
 
-    buffer->Lock(&data, &maxLength, &currentLength);
-    memcpy(oBuffer.data(),
+    buffer->Lock(&data, &bufferLength, &currentLength);
+    memcpy(packet.data(),
            data,
-           size_t(maxLength));
+           qMin<size_t>(bufferLength, currentLength));
     buffer->Unlock();
-    buffer->Release();
 
-    // Read pts.
-    LONGLONG sampleTime = 0;
-    sample->GetSampleTime(&sampleTime);
-    sample->Release();
-
-    // Send packet.
-    AkPacket packet(caps);
-    packet.setBuffer(oBuffer);
     packet.setPts(sampleTime);
     packet.setTimeBase(AkFrac(1, TIME_BASE));
     packet.setIndex(0);
     packet.setId(this->d->m_id);
 
+    buffer->Release();
+    sample->Release();
+
     return packet;
 }
 
@@ -719,7 +804,7 @@ void CaptureMMF::resetDevice()
 
 void CaptureMMF::resetStreams()
 {
-    QVariantList supportedCaps = this->caps(this->d->m_device);
+    auto supportedCaps = this->caps(this->d->m_device);
     QList<int> streams;
 
     if (!supportedCaps.isEmpty())
@@ -1028,7 +1113,10 @@ void CaptureMMFPrivate::deleteMediaType(
     mediaType->Release();
 }
 
-AkCaps CaptureMMFPrivate::capsFromMediaType(IMFMediaType *mediaType) const
+AkCaps CaptureMMFPrivate::capsFromMediaType(IMFMediaType *mediaType,
+                                            bool *isRaw,
+                                            size_t *lineSize,
+                                            bool *mirror) const
 {
     if (!mediaType)
         return AkCaps();
@@ -1046,11 +1134,6 @@ AkCaps CaptureMMFPrivate::capsFromMediaT
     memset(&subtype, 0, sizeof(GUID));
     mediaType->GetGUID(MF_MT_SUBTYPE, &subtype);
 
-    QString fourcc = guidToStr->value(subtype);
-
-    if (fourcc.isEmpty())
-        return AkCaps();
-
     UINT32 width = 0;
     UINT32 height = 0;
     MFGetAttributeSize(mediaType, MF_MT_FRAME_SIZE, &width, &height);
@@ -1058,16 +1141,48 @@ AkCaps CaptureMMFPrivate::capsFromMediaT
     UINT32 fpsNum = 0;
     UINT32 fpsDen = 0;
     MFGetAttributeRatio(mediaType, MF_MT_FRAME_RATE, &fpsNum, &fpsDen);
-
-    AkCaps videoCaps;
-    videoCaps.setMimeType("video/unknown");
-    videoCaps.setProperty("fourcc", fourcc);
-    videoCaps.setProperty("width", int(width));
-    videoCaps.setProperty("height", int(height));
     AkFrac fps(fpsNum, fpsDen);
-    videoCaps.setProperty("fps", fps.toString());
 
-    return videoCaps;
+    auto srcLineSize =
+            INT32(MFGetAttributeUINT32(mediaType, MF_MT_DEFAULT_STRIDE, 0));
+
+    if (srcLineSize == 0) {
+        GUID subtype = GUID_NULL;
+        LONG stride = 0;
+
+        if (SUCCEEDED(mediaType->GetGUID(MF_MT_SUBTYPE, &subtype)))
+            MFGetStrideForBitmapInfoHeader(subtype.Data1,
+                                           width,
+                                           &stride);
+
+        srcLineSize = INT32(stride);
+    }
+
+    if (lineSize)
+        *lineSize = qAbs(srcLineSize);
+
+    if (mirror)
+        *mirror = srcLineSize < 0;
+
+    WINBOOL isCompressed = FALSE;
+    mediaType->IsCompressedFormat(&isCompressed);
+
+    if (isRaw)
+        *isRaw = !isCompressed;
+
+    if (!isCompressed && rawFmtToAkFmt->contains(subtype)) {
+        return AkVideoCaps(rawFmtToAkFmt->value(subtype),
+                           width,
+                           height,
+                           fps);
+    } else if (isCompressed && compressedFormatToStr->contains(subtype)) {
+        return AkCompressedVideoCaps(compressedFormatToStr->value(subtype),
+                                     width,
+                                     height,
+                                     fps);
+    }
+
+    return {};
 }
 
 QVariantList CaptureMMFPrivate::imageControls(IUnknown *device) const
@@ -1317,8 +1432,8 @@ QVariantMap CaptureMMFPrivate::controlSt
     QVariantMap controlStatus;
 
     for (auto &control: controls) {
-        QVariantList params = control.toList();
-        QString controlName = params[0].toString();
+        auto params = control.toList();
+        auto controlName = params[0].toString();
         controlStatus[controlName] = params[6];
     }
 
@@ -1368,14 +1483,14 @@ void CaptureMMFPrivate::updateDevices()
             CoTaskMemFree(friendlyName);
         }
 
-        QVariantList caps;
+        CaptureVideoCaps caps;
 
         for (auto &stream: this->streams(source))
             for (auto &mediaType: this->mediaTypes(stream.data())) {
                 auto videoCaps = this->capsFromMediaType(mediaType.data());
 
                 if (videoCaps)
-                    caps << QVariant::fromValue(videoCaps);
+                    caps << videoCaps;
             }
 
         if (!caps.isEmpty()) {
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/mediafoundation/src/capturemmf.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/mediafoundation/src/capturemmf.h
@@ -43,42 +43,41 @@ class CaptureMMF:
         CaptureMMF(QObject *parent=nullptr);
         ~CaptureMMF();
 
-        Q_INVOKABLE QStringList webcams() const;
-        Q_INVOKABLE QString device() const;
-        Q_INVOKABLE QList<int> streams();
-        Q_INVOKABLE QList<int> listTracks(const QString &mimeType);
-        Q_INVOKABLE QString ioMethod() const;
-        Q_INVOKABLE int nBuffers() const;
-        Q_INVOKABLE QString description(const QString &webcam) const;
-        Q_INVOKABLE QVariantList caps(const QString &webcam) const;
-        Q_INVOKABLE QString capsDescription(const AkCaps &caps) const;
-        Q_INVOKABLE QVariantList imageControls() const;
-        Q_INVOKABLE bool setImageControls(const QVariantMap &imageControls);
-        Q_INVOKABLE bool resetImageControls();
-        Q_INVOKABLE QVariantList cameraControls() const;
-        Q_INVOKABLE bool setCameraControls(const QVariantMap &cameraControls);
-        Q_INVOKABLE bool resetCameraControls();
-        Q_INVOKABLE AkPacket readFrame();
+        Q_INVOKABLE QStringList webcams() const override;
+        Q_INVOKABLE QString device() const override;
+        Q_INVOKABLE QList<int> streams() override;
+        Q_INVOKABLE QList<int> listTracks(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString ioMethod() const override;
+        Q_INVOKABLE int nBuffers() const override;
+        Q_INVOKABLE QString description(const QString &webcam) const override;
+        Q_INVOKABLE CaptureVideoCaps caps(const QString &webcam) const override;
+        Q_INVOKABLE QVariantList imageControls() const override;
+        Q_INVOKABLE bool setImageControls(const QVariantMap &imageControls) override;
+        Q_INVOKABLE bool resetImageControls() override;
+        Q_INVOKABLE QVariantList cameraControls() const override;
+        Q_INVOKABLE bool setCameraControls(const QVariantMap &cameraControls) override;
+        Q_INVOKABLE bool resetCameraControls() override;
+        Q_INVOKABLE AkPacket readFrame() override;
 
         bool nativeEventFilter(const QByteArray &eventType,
                                void *message,
-                               long *result);
+                               long *result) override;
 
     private:
         CaptureMMFPrivate *d;
 
     public slots:
-        bool init();
-        void uninit();
-        void setDevice(const QString &device);
-        void setStreams(const QList<int> &streams);
-        void setIoMethod(const QString &ioMethod);
-        void setNBuffers(int nBuffers);
-        void resetDevice();
-        void resetStreams();
-        void resetIoMethod();
-        void resetNBuffers();
-        void reset();
+        bool init() override;
+        void uninit() override;
+        void setDevice(const QString &device) override;
+        void setStreams(const QList<int> &streams) override;
+        void setIoMethod(const QString &ioMethod) override;
+        void setNBuffers(int nBuffers) override;
+        void resetDevice() override;
+        void resetStreams() override;
+        void resetIoMethod() override;
+        void resetNBuffers() override;
+        void reset() override;
 };
 
 #endif // CAPTUREMMF_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/ndkcamera/src/capturendkcamera.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/ndkcamera/src/capturendkcamera.cpp
@@ -26,6 +26,7 @@
 #include <QtAndroid>
 #include <ak.h>
 #include <akcaps.h>
+#include <akcompressedvideocaps.h>
 #include <akfrac.h>
 #include <akpacket.h>
 #include <akvideopacket.h>
@@ -34,31 +35,278 @@
 
 #include "capturendkcamera.h"
 
-using ImageFormatToStrMap = QMap<AIMAGE_FORMATS, QString>;
+using RawFmtToAkMap = QMap<AIMAGE_FORMATS, AkVideoCaps::PixelFormat>;
 
-inline const ImageFormatToStrMap initImageFormatToStrMap()
+inline const RawFmtToAkMap initRawFmtToAkMap()
 {
-    const ImageFormatToStrMap imgFmtToStrMap = {
-        {AIMAGE_FORMAT_RGBA_8888        , "RGBA"             },
-        {AIMAGE_FORMAT_RGBX_8888        , "RGBX"             },
-        {AIMAGE_FORMAT_RGB_888          , "RGB"              },
-        {AIMAGE_FORMAT_RGB_565          , "RGB565"           },
-        {AIMAGE_FORMAT_RGBA_FP16        , "RGBA_FP16"        },
-        {AIMAGE_FORMAT_YUV_420_888      , "YU12"             },
-        {AIMAGE_FORMAT_JPEG             , "JPEG"             },
-        {AIMAGE_FORMAT_RAW16            , "SGRBG16"          },
-        {AIMAGE_FORMAT_RAW_PRIVATE      , "RAW_PRIVATE"      },
-        {AIMAGE_FORMAT_RAW10            , "SGRBG10"          },
-        {AIMAGE_FORMAT_RAW12            , "SGRBG12"          },
-        {AIMAGE_FORMAT_DEPTH16          , "DEPTH16"          },
-        {AIMAGE_FORMAT_DEPTH_POINT_CLOUD, "DEPTH_POINT_CLOUD"},
-        {AIMAGE_FORMAT_PRIVATE          , "PRIVATE"          },
+    const RawFmtToAkMap rawFmtToAkMap {
+        {AIMAGE_FORMAT_RGBA_8888  , AkVideoCaps::Format_rgba   },
+        {AIMAGE_FORMAT_RGBX_8888  , AkVideoCaps::Format_rgb0   },
+        {AIMAGE_FORMAT_RGB_888    , AkVideoCaps::Format_rgb24  },
+        {AIMAGE_FORMAT_RGB_565    , AkVideoCaps::Format_rgb565 },
+        {AIMAGE_FORMAT_YUV_420_888, AkVideoCaps::Format_yuv420p},
+        {AIMAGE_FORMAT_Y8         , AkVideoCaps::Format_gray8  },
     };
 
-    return imgFmtToStrMap;
+    return rawFmtToAkMap;
 }
 
-Q_GLOBAL_STATIC_WITH_ARGS(ImageFormatToStrMap, imgFmtToStrMap, (initImageFormatToStrMap()))
+Q_GLOBAL_STATIC_WITH_ARGS(RawFmtToAkMap,
+                          rawFmtToAkMap,
+                          (initRawFmtToAkMap()))
+
+using CompressedFmtToAkMap = QMap<AIMAGE_FORMATS, QString>;
+
+inline const CompressedFmtToAkMap initCompressedFmtToAkMap()
+{
+    const CompressedFmtToAkMap compressedFmtToAkMap {
+        {AIMAGE_FORMAT_JPEG, "jpeg"},
+        {AIMAGE_FORMAT_HEIC, "heic"},
+    };
+
+    return compressedFmtToAkMap;
+}
+
+Q_GLOBAL_STATIC_WITH_ARGS(CompressedFmtToAkMap,
+                          compressedFmtToAkMap,
+                          (initCompressedFmtToAkMap()))
+
+enum ControlType
+{
+    Integer,
+    Boolean,
+    Menu,
+    Float,
+    Frac,
+};
+
+using MenuOptions = QMap<int, QString>;
+
+inline const MenuOptions &initAntibandingOptions()
+{
+    static const MenuOptions options {
+        {ACAMERA_CONTROL_AE_ANTIBANDING_MODE_OFF , "Off"  },
+        {ACAMERA_CONTROL_AE_ANTIBANDING_MODE_50HZ, "50 Hz"},
+        {ACAMERA_CONTROL_AE_ANTIBANDING_MODE_60HZ, "60 Hz"},
+        {ACAMERA_CONTROL_AE_ANTIBANDING_MODE_AUTO, "Auto" },
+    };
+
+    return options;
+}
+
+inline const MenuOptions &initAutoExposureOptions()
+{
+    static const MenuOptions options {
+        {ACAMERA_CONTROL_AE_MODE_OFF                 , "Off"              },
+        {ACAMERA_CONTROL_AE_MODE_ON                  , "On"               },
+        {ACAMERA_CONTROL_AE_MODE_ON_AUTO_FLASH       , "Auto Flash"       },
+        {ACAMERA_CONTROL_AE_MODE_ON_ALWAYS_FLASH     , "Always Flash"     },
+        {ACAMERA_CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE, "Auto Flash Redeye"},
+        {ACAMERA_CONTROL_AE_MODE_ON_EXTERNAL_FLASH   , "External Flash"   },
+    };
+
+    return options;
+}
+
+inline const MenuOptions &initAutoFocusOptions()
+{
+    static const MenuOptions options {
+        {ACAMERA_CONTROL_AF_MODE_OFF               , "Off"                    },
+        {ACAMERA_CONTROL_AF_MODE_AUTO              , "Auto"                   },
+        {ACAMERA_CONTROL_AF_MODE_MACRO             , "Close-up"               },
+        {ACAMERA_CONTROL_AF_MODE_CONTINUOUS_VIDEO  , "Continuous Video"       },
+        {ACAMERA_CONTROL_AF_MODE_CONTINUOUS_PICTURE, "Continuous Picture"     },
+        {ACAMERA_CONTROL_AF_MODE_EDOF              , "Extended Depth of Field"},
+    };
+
+    return options;
+}
+
+inline const MenuOptions &initAwbOptions()
+{
+    static const MenuOptions options {
+        {ACAMERA_CONTROL_AWB_MODE_OFF             , "Off"             },
+        {ACAMERA_CONTROL_AWB_MODE_AUTO            , "Auto"            },
+        {ACAMERA_CONTROL_AWB_MODE_INCANDESCENT    , "Incandescent"    },
+        {ACAMERA_CONTROL_AWB_MODE_FLUORESCENT     , "Fluorescent"     },
+        {ACAMERA_CONTROL_AWB_MODE_WARM_FLUORESCENT, "Warm Fluorescent"},
+        {ACAMERA_CONTROL_AWB_MODE_DAYLIGHT        , "Daylight"        },
+        {ACAMERA_CONTROL_AWB_MODE_CLOUDY_DAYLIGHT , "Cloudy Daylight" },
+        {ACAMERA_CONTROL_AWB_MODE_TWILIGHT        , "Twilight"        },
+        {ACAMERA_CONTROL_AWB_MODE_SHADE           , "Shade"           },
+    };
+
+    return options;
+}
+
+inline const MenuOptions &initEffectOptions()
+{
+    static const MenuOptions options {
+        {ACAMERA_CONTROL_EFFECT_MODE_OFF       , "Off"       },
+        {ACAMERA_CONTROL_EFFECT_MODE_MONO      , "Mono"      },
+        {ACAMERA_CONTROL_EFFECT_MODE_NEGATIVE  , "Negative"  },
+        {ACAMERA_CONTROL_EFFECT_MODE_SOLARIZE  , "Solarize"  },
+        {ACAMERA_CONTROL_EFFECT_MODE_SEPIA     , "Sepia"     },
+        {ACAMERA_CONTROL_EFFECT_MODE_POSTERIZE , "Posterize" },
+        {ACAMERA_CONTROL_EFFECT_MODE_WHITEBOARD, "Whiteboard"},
+        {ACAMERA_CONTROL_EFFECT_MODE_BLACKBOARD, "Blackboard"},
+        {ACAMERA_CONTROL_EFFECT_MODE_AQUA      , "Aqua"      },
+    };
+
+    return options;
+}
+
+inline const MenuOptions &initControlModeOptions()
+{
+    static const MenuOptions options {
+        {ACAMERA_CONTROL_MODE_OFF                    , "Off"                },
+        {ACAMERA_CONTROL_MODE_AUTO                   , "Auto"               },
+        {ACAMERA_CONTROL_MODE_USE_SCENE_MODE         , "Scene Mode"         },
+        {ACAMERA_CONTROL_MODE_OFF_KEEP_STATE         , "Keep State"         },
+        {ACAMERA_CONTROL_MODE_USE_EXTENDED_SCENE_MODE, "Extended Scene Mode"},
+    };
+
+    return options;
+}
+
+inline const MenuOptions &initSceneModeOptions()
+{
+    static const MenuOptions options {
+        {ACAMERA_CONTROL_SCENE_MODE_DISABLED      , "Disabled"      },
+        {ACAMERA_CONTROL_SCENE_MODE_FACE_PRIORITY , "Face Priority" },
+        {ACAMERA_CONTROL_SCENE_MODE_ACTION        , "Action"        },
+        {ACAMERA_CONTROL_SCENE_MODE_PORTRAIT      , "Portrait"      },
+        {ACAMERA_CONTROL_SCENE_MODE_LANDSCAPE     , "Landscape"     },
+        {ACAMERA_CONTROL_SCENE_MODE_NIGHT         , "Night"         },
+        {ACAMERA_CONTROL_SCENE_MODE_NIGHT_PORTRAIT, "Night Portrait"},
+        {ACAMERA_CONTROL_SCENE_MODE_THEATRE       , "Theatre"       },
+        {ACAMERA_CONTROL_SCENE_MODE_BEACH         , "Beach"         },
+        {ACAMERA_CONTROL_SCENE_MODE_SNOW          , "Snow"          },
+        {ACAMERA_CONTROL_SCENE_MODE_SUNSET        , "Sunset"        },
+        {ACAMERA_CONTROL_SCENE_MODE_STEADYPHOTO   , "Steadyphoto"   },
+        {ACAMERA_CONTROL_SCENE_MODE_FIREWORKS     , "Fireworks"     },
+        {ACAMERA_CONTROL_SCENE_MODE_SPORTS        , "Sports"        },
+        {ACAMERA_CONTROL_SCENE_MODE_PARTY         , "Party"         },
+        {ACAMERA_CONTROL_SCENE_MODE_CANDLELIGHT   , "Candlelight"   },
+        {ACAMERA_CONTROL_SCENE_MODE_BARCODE       , "Barcode"       },
+        {ACAMERA_CONTROL_SCENE_MODE_HDR           , "Hdr"           },
+    };
+
+    return options;
+}
+
+inline const MenuOptions &initVideoStabilizationOptions()
+{
+    static const MenuOptions options {
+        {ACAMERA_CONTROL_VIDEO_STABILIZATION_MODE_OFF, "Off"},
+        {ACAMERA_CONTROL_VIDEO_STABILIZATION_MODE_ON , "On" },
+    };
+
+    return options;
+}
+
+inline const MenuOptions &initNoiseReductionOptions()
+{
+    static const MenuOptions options {
+        {ACAMERA_NOISE_REDUCTION_MODE_OFF             , "Off"             },
+        {ACAMERA_NOISE_REDUCTION_MODE_FAST            , "Fast"            },
+        {ACAMERA_NOISE_REDUCTION_MODE_HIGH_QUALITY    , "High Quality"    },
+        {ACAMERA_NOISE_REDUCTION_MODE_MINIMAL         , "Minimal"         },
+        {ACAMERA_NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG, "Zero Shutter Lag"},
+    };
+
+    return options;
+}
+
+inline const MenuOptions &initEdgeModeOptions()
+{
+    static const MenuOptions options {
+        {ACAMERA_EDGE_MODE_OFF             , "Off"             },
+        {ACAMERA_EDGE_MODE_FAST            , "Fast"            },
+        {ACAMERA_EDGE_MODE_HIGH_QUALITY    , "High Quality"    },
+        {ACAMERA_EDGE_MODE_ZERO_SHUTTER_LAG, "Zero Shutter Lag"},
+    };
+
+    return options;
+}
+
+inline const MenuOptions &initColorCorrectionOptions()
+{
+    static const MenuOptions options {
+        {ACAMERA_COLOR_CORRECTION_MODE_TRANSFORM_MATRIX, "Transform Matrix"},
+        {ACAMERA_COLOR_CORRECTION_MODE_FAST            , "Fast"            },
+        {ACAMERA_COLOR_CORRECTION_MODE_HIGH_QUALITY    , "High Quality"    },
+    };
+
+    return options;
+}
+
+inline const MenuOptions &initTonemapOptions()
+{
+    static const MenuOptions options {
+        {ACAMERA_TONEMAP_MODE_CONTRAST_CURVE, "Contrast Curve"},
+        {ACAMERA_TONEMAP_MODE_FAST          , "Fast"          },
+        {ACAMERA_TONEMAP_MODE_HIGH_QUALITY  , "High Quality"  },
+        {ACAMERA_TONEMAP_MODE_GAMMA_VALUE   , "Gamma Value"   },
+        {ACAMERA_TONEMAP_MODE_PRESET_CURVE  , "Preset Curve"  },
+    };
+
+    return options;
+}
+
+struct Control
+{
+    ControlType type;
+    acamera_metadata_tag tag;
+    QVector<acamera_metadata_tag> relTags;
+    QString description;
+    QVariant defaultValue;
+    MenuOptions menuOptions;
+};
+
+using ControlVector = QVector<Control>;
+
+inline const ControlVector &initImageControls()
+{
+    static const ControlVector controls {
+        {ControlType::Menu   , ACAMERA_NOISE_REDUCTION_MODE              , {ACAMERA_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES}, "Noise Reduction"           , "Off"     , initNoiseReductionOptions()    },
+        {ControlType::Menu   , ACAMERA_EDGE_MODE                         , {ACAMERA_EDGE_AVAILABLE_EDGE_MODES}                      , "Edge Mode"                 , "Off"     , initEdgeModeOptions()          },
+        {ControlType::Menu   , ACAMERA_COLOR_CORRECTION_ABERRATION_MODE  , {ACAMERA_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES}    , "Color Correction"          , "Off"     , initColorCorrectionOptions()   },
+        {ControlType::Menu   , ACAMERA_TONEMAP_MODE                      , {ACAMERA_TONEMAP_AVAILABLE_TONE_MAP_MODES}               , "Tonemap"                   , "Fast"    , initTonemapOptions()           },
+    };
+
+    return controls;
+}
+
+Q_GLOBAL_STATIC_WITH_ARGS(ControlVector,
+                          globalImageControls,
+                          (initImageControls()))
+
+inline const ControlVector &initCameraControls()
+{
+    static const ControlVector controls {
+        {ControlType::Menu   , ACAMERA_CONTROL_AE_ANTIBANDING_MODE       , {ACAMERA_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES}         , "Auto Exposure Antibanding" , "Auto"    , initAntibandingOptions()       },
+        {ControlType::Menu   , ACAMERA_CONTROL_AE_MODE                   , {ACAMERA_CONTROL_AE_AVAILABLE_MODES}                     , "Auto Exposure"             , "On"      , initAutoExposureOptions()      },
+        {ControlType::Integer, ACAMERA_CONTROL_AE_EXPOSURE_COMPENSATION  , {ACAMERA_CONTROL_AE_COMPENSATION_RANGE,
+                                                                            ACAMERA_CONTROL_AE_COMPENSATION_STEP}                   , "Auto Exposure Compensation", 0         , {}                             },
+        {ControlType::Boolean, ACAMERA_CONTROL_AE_LOCK                   , {ACAMERA_CONTROL_AE_LOCK_AVAILABLE}                      , "Auto Exposure Lock"        , true      , {}                             },
+        {ControlType::Menu   , ACAMERA_CONTROL_AF_MODE                   , {ACAMERA_CONTROL_AF_AVAILABLE_MODES}                     , "Auto Focus"                , "Auto"    , initAutoFocusOptions()         },
+        {ControlType::Boolean, ACAMERA_CONTROL_AWB_LOCK                  , {ACAMERA_CONTROL_AWB_LOCK_AVAILABLE}                     , "Auto White Balance Lock"   , true      , {}                             },
+        {ControlType::Menu   , ACAMERA_CONTROL_AWB_MODE                  , {ACAMERA_CONTROL_AWB_AVAILABLE_MODES}                    , "Auto White Balance"        , "Auto"    , initAwbOptions()               },
+        {ControlType::Menu   , ACAMERA_CONTROL_EFFECT_MODE               , {ACAMERA_CONTROL_AVAILABLE_EFFECTS}                      , "Effect"                    , "Off"     , initEffectOptions()            },
+        {ControlType::Boolean, ACAMERA_CONTROL_ENABLE_ZSL                , {}                                                       , "Zero Shutter Lag"          , true      , {}                             },
+        {ControlType::Menu   , ACAMERA_CONTROL_MODE                      , {ACAMERA_CONTROL_AVAILABLE_MODES}                        , "Control Mode"              , "Auto"    , initControlModeOptions()       },
+        {ControlType::Integer, ACAMERA_CONTROL_POST_RAW_SENSITIVITY_BOOST, {ACAMERA_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE}       , "Post Raw Sensitivity Boost", 0         , {}                             },
+        {ControlType::Menu   , ACAMERA_CONTROL_SCENE_MODE                , {ACAMERA_CONTROL_AVAILABLE_SCENE_MODES}                  , "Scene Mode"                , "Disabled", initSceneModeOptions()         },
+        {ControlType::Menu   , ACAMERA_CONTROL_VIDEO_STABILIZATION_MODE  , {ACAMERA_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES}    , "Video Stabilization"       , "On"      , initVideoStabilizationOptions()},
+    };
+
+    return controls;
+}
+
+Q_GLOBAL_STATIC_WITH_ARGS(ControlVector,
+                          globalCameraControls,
+                          (initCameraControls()))
 
 using CameraManagerPtr = QSharedPointer<ACameraManager>;
 
@@ -70,7 +318,7 @@ class CaptureNdkCameraPrivate
         QList<int> m_streams;
         QStringList m_devices;
         QMap<QString, QString> m_descriptions;
-        QMap<QString, QVariantList> m_devicesCaps;
+        QMap<QString, CaptureVideoCaps> m_devicesCaps;
         QReadWriteLock m_controlsMutex;
         QVariantList m_globalImageControls;
         QVariantList m_globalCameraControls;
@@ -110,8 +358,34 @@ class CaptureNdkCameraPrivate
                                  ACameraCaptureSession *session);
         static void sessionActive(void *context,
                                   ACameraCaptureSession *session);
+        QVariantList controls(const ControlVector &controlsTable,
+                              const QString &device) const;
+        bool setControls(const ControlVector &controlsTable,
+                         const QVariantMap &controls) const;
+        bool readControlRange(const ACameraMetadata_const_entry &entry,
+                              int *min,
+                              int *max) const;
+        int readControlInteger(const ACameraMetadata_const_entry &entry) const;
+        bool readControlBool(const ACameraMetadata_const_entry &entry) const;
+        QStringList readControlMenuOptions(const ACameraMetadata_const_entry &entry,
+                                           const MenuOptions &menuOptions) const;
+        QVariantList controlBoolean(const ACameraMetadata_const_entry &entry,
+                                    const QString &description,
+                                    bool defaultValue=false) const;
+        QVariantList controlMenu(const ACameraMetadata_const_entry &entry,
+                                 const QString &description,
+                                 const QString &defaultValue={},
+                                 const QStringList &menuOptions={}) const;
+        QVariantList controlInteger(const ACameraMetadata_const_entry &entry,
+                                    int min,
+                                    int max,
+                                    int step,
+                                    const QString &description,
+                                    int defaultValue=0) const;
+        QVariantMap controlStatus(const QVariantList &controls) const;
+        QVariantMap mapDiff(const QVariantMap &map1,
+                            const QVariantMap &map2) const;
         static bool canUseCamera();
-        static QByteArray readBuffer(AImage *image);
         void updateDevices();
 };
 
@@ -132,7 +406,6 @@ CaptureNdkCamera::CaptureNdkCamera(QObje
 CaptureNdkCamera::~CaptureNdkCamera()
 {
     this->uninit();
-
     delete this->d;
 }
 
@@ -151,21 +424,20 @@ QList<int> CaptureNdkCamera::streams()
     if (!this->d->m_streams.isEmpty())
         return this->d->m_streams;
 
-    QVariantList caps = this->caps(this->d->m_device);
+    auto caps = this->caps(this->d->m_device);
 
     if (caps.isEmpty())
-        return QList<int>();
+        return {};
 
     return QList<int> {0};
 }
 
-QList<int> CaptureNdkCamera::listTracks(const QString &mimeType)
+QList<int> CaptureNdkCamera::listTracks(AkCaps::CapsType type)
 {
-    if (mimeType != "video/x-raw"
-        && !mimeType.isEmpty())
-        return QList<int>();
+    if (type != AkCaps::CapsVideo && type != AkCaps::CapsUnknown)
+        return {};
 
-    QVariantList caps = this->caps(this->d->m_device);
+    auto caps = this->caps(this->d->m_device);
     QList<int> streams;
 
     for (int i = 0; i < caps.count(); i++)
@@ -189,25 +461,11 @@ QString CaptureNdkCamera::description(co
     return this->d->m_descriptions.value(webcam);
 }
 
-QVariantList CaptureNdkCamera::caps(const QString &webcam) const
+CaptureVideoCaps CaptureNdkCamera::caps(const QString &webcam) const
 {
     return this->d->m_devicesCaps.value(webcam);
 }
 
-QString CaptureNdkCamera::capsDescription(const AkCaps &caps) const
-{
-    if (caps.mimeType() != "video/unknown")
-        return QString();
-
-    AkFrac fps = caps.property("fps").toString();
-
-    return QString("%1, %2x%3, %4 FPS")
-                .arg(caps.property("fourcc").toString(),
-                     caps.property("width").toString(),
-                     caps.property("height").toString())
-                .arg(qRound(fps.value()));
-}
-
 QVariantList CaptureNdkCamera::imageControls() const
 {
     return this->d->m_globalImageControls;
@@ -220,8 +478,8 @@ bool CaptureNdkCamera::setImageControls(
     this->d->m_controlsMutex.unlock();
 
     for (int i = 0; i < globalImageControls.count(); i++) {
-        QVariantList control = globalImageControls[i].toList();
-        QString controlName = control[0].toString();
+        auto control = globalImageControls[i].toList();
+        auto controlName = control[0].toString();
 
         if (imageControls.contains(controlName)) {
             control[6] = imageControls[controlName];
@@ -250,8 +508,7 @@ bool CaptureNdkCamera::resetImageControl
     QVariantMap controls;
 
     for (auto &control: this->imageControls()) {
-        QVariantList params = control.toList();
-
+        auto params = control.toList();
         controls[params[0].toString()] = params[5].toInt();
     }
 
@@ -270,8 +527,8 @@ bool CaptureNdkCamera::setCameraControls
     this->d->m_controlsMutex.unlock();
 
     for (int i = 0; i < globalCameraControls.count(); i++) {
-        QVariantList control = globalCameraControls[i].toList();
-        QString controlName = control[0].toString();
+        auto control = globalCameraControls[i].toList();
+        auto controlName = control[0].toString();
 
         if (cameraControls.contains(controlName)) {
             control[6] = cameraControls[controlName];
@@ -308,6 +565,29 @@ bool CaptureNdkCamera::resetCameraContro
 
 AkPacket CaptureNdkCamera::readFrame()
 {
+
+    this->d->m_controlsMutex.lockForRead();
+    auto imageControls = this->d->controlStatus(this->d->m_globalImageControls);
+    this->d->m_controlsMutex.unlock();
+
+    if (this->d->m_localImageControls != imageControls) {
+        auto controls = this->d->mapDiff(this->d->m_localImageControls,
+                                         imageControls);
+        this->d->setControls(*globalImageControls, controls);
+        this->d->m_localImageControls = imageControls;
+    }
+
+    this->d->m_controlsMutex.lockForRead();
+    auto cameraControls = this->d->controlStatus(this->d->m_globalCameraControls);
+    this->d->m_controlsMutex.unlock();
+
+    if (this->d->m_localCameraControls != cameraControls) {
+        auto controls = this->d->mapDiff(this->d->m_localCameraControls,
+                                         cameraControls);
+        this->d->setControls(*globalCameraControls, controls);
+        this->d->m_localCameraControls = cameraControls;
+    }
+
     AkPacket packet;
 
     this->d->m_mutex.lockForWrite();
@@ -410,42 +690,78 @@ void CaptureNdkCameraPrivate::imageAvail
 {
     auto self = reinterpret_cast<CaptureNdkCameraPrivate *>(context);
     AImage *image {nullptr};
+
+    if (AImageReader_acquireLatestImage(reader, &image) != AMEDIA_OK)
+        return;
+
     int32_t format = 0;
+
+    if (AImage_getFormat(image, &format) != AMEDIA_OK) {
+        AImage_delete(image);
+
+        return;
+    }
+
     int32_t width = 0;
+
+    if (AImage_getWidth(image, &width) != AMEDIA_OK) {
+        AImage_delete(image);
+
+        return;
+    }
+
     int32_t height = 0;
-    int64_t timestampNs = 0;
-    QByteArray oBuffer;
-    AkCaps caps;
-    AkPacket packet;
 
-    if (AImageReader_acquireLatestImage(reader, &image) != AMEDIA_OK)
+    if (AImage_getHeight(image, &height) != AMEDIA_OK) {
+        AImage_delete(image);
+
         return;
+    }
 
-    if (AImage_getFormat(image, &format) != AMEDIA_OK)
-        goto imageAvailable_error;
+    int32_t numPlanes = 0;
 
-    if (AImage_getWidth(image, &width) != AMEDIA_OK)
-        goto imageAvailable_error;
+    if (AImage_getNumberOfPlanes(image, &numPlanes) != AMEDIA_OK) {
+        AImage_delete(image);
 
-    if (AImage_getHeight(image, &height) != AMEDIA_OK)
-        goto imageAvailable_error;
+        return;
+    }
 
-    if (AImage_getTimestamp(image, &timestampNs) != AMEDIA_OK)
-        goto imageAvailable_error;
+    int64_t timestampNs = 0;
 
-    oBuffer = CaptureNdkCameraPrivate::readBuffer(image);
+    if (AImage_getTimestamp(image, &timestampNs) != AMEDIA_OK) {
+        AImage_delete(image);
 
-    if (oBuffer.isEmpty())
-        goto imageAvailable_error;
+        return;
+    }
 
-    caps.setMimeType("video/unknown");
-    caps.setProperty("fourcc", imgFmtToStrMap->value(AIMAGE_FORMATS(format)));
-    caps.setProperty("width", width);
-    caps.setProperty("height", height);
-    caps.setProperty("fps", self->m_fps.toString());
+    AkVideoPacket packet({rawFmtToAkMap->value(AIMAGE_FORMATS(format)),
+                          width,
+                          height,
+                          self->m_fps});
+
+    for (int32_t plane = 0; plane < numPlanes; plane++) {
+        uint8_t *data = nullptr;
+        int dataLength = 0;
+
+        if (AImage_getPlaneData(image, plane, &data, &dataLength) != AMEDIA_OK)
+            continue;
+
+        int32_t iLineSize = 0;
+        AImage_getPlaneRowStride(image, plane, &iLineSize);
+        auto oLineSize = packet.lineSize(plane);
+        auto lineSize = qMin<size_t>(iLineSize, oLineSize);
+        auto heightDiv = packet.heightDiv(plane);
+
+        for (int y = 0; y < height; y++) {
+            auto ys = y >> heightDiv;
+            auto srcLine = data + ys * iLineSize;
+            auto dstLine = packet.line(plane, y);
+            memcpy(dstLine, srcLine, lineSize);
+        }
+
+        data += iLineSize * (height >> heightDiv);
+    }
 
-    packet = AkPacket(caps);
-    packet.setBuffer(oBuffer);
     packet.setPts(timestampNs);
     packet.setTimeBase({1, qint64(1e9)});
     packet.setIndex(0);
@@ -456,7 +772,6 @@ void CaptureNdkCameraPrivate::imageAvail
     self->m_waitCondition.wakeAll();
     self->m_mutex.unlock();
 
-imageAvailable_error:
     AImage_delete(image);
 }
 
@@ -481,6 +796,449 @@ void CaptureNdkCameraPrivate::sessionAct
     Q_UNUSED(session)
 }
 
+QVariantList CaptureNdkCameraPrivate::controls(const ControlVector &controlsTable,
+                                               const QString &device) const
+{
+    ACameraMetadata *metaData {nullptr};
+    auto cameraId = device;
+    cameraId.remove(QRegExp("^NdkCamera:"));
+
+    if (ACameraManager_getCameraCharacteristics(this->m_manager.data(),
+                                                cameraId.toStdString().c_str(),
+                                                &metaData) != ACAMERA_OK) {
+
+        return {};
+    }
+
+    int32_t nTags = 0;
+    const uint32_t *tags = nullptr;
+    ACameraMetadata_getAllTags(metaData, &nTags, &tags);
+
+    // Read controls related parameters
+
+    QMap<int, QStringList> controlsMenu;
+    QVector<int> booleanControls;
+    QMap<int, QPair<int, int>> controlsRange;
+    QMap<int, int> controlsStep;
+
+    for (int i = 0; i < nTags; i++) {
+        ACameraMetadata_const_entry entry;
+        memset(&entry, 0, sizeof(ACameraMetadata_const_entry));
+
+        if (ACameraMetadata_getConstEntry(metaData,
+                                          tags[i],
+                                          &entry) != ACAMERA_OK) {
+            continue;
+        }
+
+        for (auto &control: controlsTable) {
+            auto index = control.relTags.indexOf(acamera_metadata_tag(entry.tag));
+
+            if (index < 0)
+                continue;
+
+            if (entry.count < 1)
+                continue;
+
+            switch (control.type) {
+            case ControlType::Integer: {
+                switch (index) {
+                case 0: {
+                    int min = 0;
+                    int max = 0;
+                    auto ok = this->readControlRange(entry, &min, &max);
+
+                    if (ok)
+                        controlsRange[control.tag] = {min, max};
+
+                    break;
+                }
+                case 1:
+                    controlsStep[control.tag] = this->readControlInteger(entry);
+
+                    break;
+                default:
+                    break;
+                }
+
+                break;
+            }
+            case ControlType::Boolean: {
+                if (this->readControlBool(entry))
+                    booleanControls << control.tag;
+
+                break;
+            }
+            case ControlType::Menu: {
+                auto menuOptions =
+                        this->readControlMenuOptions(entry, control.menuOptions);
+
+                if (!menuOptions.isEmpty())
+                    controlsMenu[control.tag] = menuOptions;
+
+                break;
+            }
+            default:
+                break;
+            }
+        }
+    }
+
+    // Read controls values
+
+    QVariantList controlsList;
+
+    for (int i = 0; i < nTags; i++) {
+        ACameraMetadata_const_entry entry;
+        memset(&entry, 0, sizeof(ACameraMetadata_const_entry));
+
+        if (ACameraMetadata_getConstEntry(metaData,
+                                          tags[i],
+                                          &entry) != ACAMERA_OK) {
+            continue;
+        }
+
+        for (auto &control: controlsTable) {
+            if (control.tag != entry.tag)
+                continue;
+
+            if (entry.count < 1)
+                continue;
+
+            QVariantList params;
+
+            switch (control.type) {
+            case ControlType::Integer:
+                if (controlsRange.contains(control.tag)) {
+                    auto range = controlsRange.value(control.tag);
+
+                    params = this->controlInteger(entry,
+                                                  range.first,
+                                                  range.second,
+                                                  controlsStep.value(control.tag, 1),
+                                                  control.description,
+                                                  control.defaultValue.toInt());
+                }
+
+                break;
+
+            case ControlType::Boolean:
+                if (control.relTags.isEmpty()
+                    || booleanControls.contains(control.tag))
+                    params = this->controlBoolean(entry,
+                                                  control.description,
+                                                  control.defaultValue.toBool());
+
+                break;
+
+            case ControlType::Menu:
+                params = this->controlMenu(entry,
+                                           control.description,
+                                           control.defaultValue.toString(),
+                                           controlsMenu.value(control.tag));
+                break;
+
+            default:
+                break;
+            }
+
+            if (!params.isEmpty())
+                controlsList << QVariant(params);
+        }
+    }
+
+    ACameraMetadata_free(metaData);
+
+    return controlsList;
+}
+
+bool CaptureNdkCameraPrivate::setControls(const ControlVector &controlsTable,
+                                          const QVariantMap &controls) const
+{
+    if (!this->m_captureRequest)
+        return false;
+
+    for (auto it = controls.cbegin(); it != controls.cend(); it++)
+        for (auto &control: controlsTable)
+            if (control.description == it.key()) {
+                ACameraMetadata_const_entry entry;
+
+                if (ACaptureRequest_getConstEntry(this->m_captureRequest,
+                                                  control.tag,
+                                                  &entry) != ACAMERA_OK) {
+                    continue;
+                }
+
+                switch (entry.type) {
+                case ACAMERA_TYPE_BYTE:
+                case ACAMERA_TYPE_INT32: {
+                    auto value = it.value().toInt();
+                    ACaptureRequest_setEntry_i32(this->m_captureRequest,
+                                                 control.tag,
+                                                 1,
+                                                 &value);
+
+                    break;
+                }
+                case ACAMERA_TYPE_INT64: {
+                    int64_t value = it.value().toLongLong();
+                    ACaptureRequest_setEntry_i64(this->m_captureRequest,
+                                                 control.tag,
+                                                 1,
+                                                 &value);
+
+                    break;
+                }
+                case ACAMERA_TYPE_FLOAT: {
+                    auto value = it.value().toFloat();
+                    ACaptureRequest_setEntry_float(this->m_captureRequest,
+                                                   control.tag,
+                                                   1,
+                                                   &value);
+
+                    break;
+                }
+                case ACAMERA_TYPE_DOUBLE: {
+                    auto value = it.value().toDouble();
+                    ACaptureRequest_setEntry_double(this->m_captureRequest,
+                                                    control.tag,
+                                                    1,
+                                                    &value);
+
+                    break;
+                }
+                default:
+                    break;
+                }
+            }
+
+    return true;
+}
+
+bool CaptureNdkCameraPrivate::readControlRange(const ACameraMetadata_const_entry &entry,
+                                               int *min,
+                                               int *max) const
+{
+    if (entry.count < 2)
+        return false;
+
+    switch (entry.type) {
+    case ACAMERA_TYPE_BYTE:
+        *min = entry.data.u8[0];
+        *max = entry.data.u8[1];
+
+        return true;
+    case ACAMERA_TYPE_INT32:
+        *min = entry.data.i32[0];
+        *max = entry.data.i32[1];
+
+        return true;
+    case ACAMERA_TYPE_INT64:
+        *min = int(entry.data.i64[0]);
+        *max = int(entry.data.i64[1]);
+
+        return true;
+    default:
+        break;
+    }
+
+    return false;
+}
+
+int CaptureNdkCameraPrivate::readControlInteger(const ACameraMetadata_const_entry &entry) const
+{
+    switch (entry.type) {
+    case ACAMERA_TYPE_BYTE:
+        return entry.data.u8[0];
+    case ACAMERA_TYPE_INT32:
+        return entry.data.i32[0];
+    case ACAMERA_TYPE_INT64:
+        return entry.data.i64[0];
+    default:
+        break;
+    }
+
+    return 0;
+}
+
+bool CaptureNdkCameraPrivate::readControlBool(const ACameraMetadata_const_entry &entry) const
+{
+    switch (entry.type) {
+    case ACAMERA_TYPE_BYTE:
+        return entry.data.u8[0];
+    case ACAMERA_TYPE_INT32:
+        return entry.data.i32[0];
+    case ACAMERA_TYPE_INT64:
+        return entry.data.i64[0];
+    default:
+        break;
+    }
+
+    return false;
+}
+
+QStringList CaptureNdkCameraPrivate::readControlMenuOptions(const ACameraMetadata_const_entry &entry,
+                                                            const MenuOptions &menuOptions) const
+{
+    QStringList options;
+
+    for (uint32_t i = 0; i < entry.count; i++) {
+        QString option;
+
+        switch (entry.type) {
+        case ACAMERA_TYPE_BYTE:
+            option = menuOptions.value(entry.data.u8[i]);
+
+            break;
+        case ACAMERA_TYPE_INT32:
+            option = menuOptions.value(entry.data.i32[i]);
+
+            break;
+        case ACAMERA_TYPE_INT64:
+            option = menuOptions.value(entry.data.i64[i]);
+
+            break;
+        default:
+            break;
+        }
+
+        if (!option.isEmpty())
+            options << option;
+    }
+
+    return options;
+}
+
+QVariantList CaptureNdkCameraPrivate::controlBoolean(const ACameraMetadata_const_entry &entry,
+                                                     const QString &description,
+                                                     bool defaultValue) const
+{
+    bool value = false;
+
+    switch (entry.type) {
+    case ACAMERA_TYPE_BYTE:
+        value = entry.data.u8[0];
+        break;
+    case ACAMERA_TYPE_INT32:
+        value = entry.data.i32[0];
+        break;
+    case ACAMERA_TYPE_INT64:
+        value = entry.data.i64[0];
+        break;
+    default:
+        break;
+    }
+
+    return QVariantList {
+        description,
+        "boolean",
+        0,
+        1,
+        1,
+        defaultValue,
+        value,
+        QStringList()
+    };
+}
+
+QVariantList CaptureNdkCameraPrivate::controlMenu(const ACameraMetadata_const_entry &entry,
+                                                  const QString &description,
+                                                  const QString &defaultValue,
+                                                  const QStringList &menuOptions) const
+{
+    QString value;
+
+    switch (entry.type) {
+    case ACAMERA_TYPE_BYTE:
+        value = menuOptions.value(entry.data.u8[0]);
+
+        break;
+    case ACAMERA_TYPE_INT32:
+        value = menuOptions.value(entry.data.i32[0]);
+
+        break;
+    case ACAMERA_TYPE_INT64:
+        value = menuOptions.value(entry.data.i64[0]);
+
+        break;
+    default:
+        break;
+    }
+
+    return QVariantList {
+        description,
+        "menu",
+        0,
+        menuOptions.size() - 1,
+        1,
+        qMax(menuOptions.indexOf(defaultValue), 0),
+        qMax(menuOptions.indexOf(value), 0),
+        menuOptions
+    };
+}
+
+QVariantList CaptureNdkCameraPrivate::controlInteger(const ACameraMetadata_const_entry &entry,
+                                                     int min,
+                                                     int max,
+                                                     int step,
+                                                     const QString &description,
+                                                     int defaultValue) const
+{
+    int value = 0;
+
+    switch (entry.type) {
+    case ACAMERA_TYPE_BYTE:
+        value = entry.data.u8[0];
+        break;
+    case ACAMERA_TYPE_INT32:
+        value = entry.data.i32[0];
+        break;
+    case ACAMERA_TYPE_INT64:
+        value = int(entry.data.i64[0]);
+        break;
+    default:
+        break;
+    }
+
+    return QVariantList {
+        description,
+        "integer",
+        min,
+        max,
+        step,
+        defaultValue,
+        value,
+        QStringList()
+    };
+}
+
+QVariantMap CaptureNdkCameraPrivate::controlStatus(const QVariantList &controls) const
+{
+    QVariantMap controlStatus;
+
+    for (auto &control: controls) {
+        auto params = control.toList();
+        auto controlName = params[0].toString();
+        controlStatus[controlName] = params[6];
+    }
+
+    return controlStatus;
+}
+
+QVariantMap CaptureNdkCameraPrivate::mapDiff(const QVariantMap &map1,
+                                             const QVariantMap &map2) const
+{
+    QVariantMap map;
+
+    for (auto it = map2.cbegin(); it != map2.cend(); it++)
+        if (!map1.contains(it.key())
+            || map1[it.key()] != it.value()) {
+            map[it.key()] = it.value();
+        }
+
+    return map;
+}
+
 bool CaptureNdkCameraPrivate::canUseCamera()
 {
     static bool done = false;
@@ -515,60 +1273,6 @@ bool CaptureNdkCameraPrivate::canUseCame
     return true;
 }
 
-QByteArray CaptureNdkCameraPrivate::readBuffer(AImage *image)
-{
-    int32_t format = 0;
-    AImage_getFormat(image, &format);
-    int32_t width = 0;
-    AImage_getWidth(image, &width);
-    int32_t height = 0;
-    AImage_getHeight(image, &height);
-    int32_t numPlanes = 0;
-    AImage_getNumberOfPlanes(image, &numPlanes);
-    QByteArray oBuffer;
-
-    if (format == AIMAGE_FORMAT_YUV_420_888) {
-        for (int32_t i = 0; i < numPlanes; i++) {
-            uint8_t *data = nullptr;
-            int dataLength = 0;
-
-            if (AImage_getPlaneData(image, i, &data, &dataLength) != AMEDIA_OK)
-                continue;
-
-            int32_t pixelStride = 0;
-            int32_t rowStride = 0;
-            AImage_getPlanePixelStride(image, i, &pixelStride);
-            AImage_getPlaneRowStride(image, i, &rowStride);
-            auto _width = width / (i > 0? 2: 1);
-            auto _height = height / (i > 0? 2: 1);
-            QByteArray buffer(_width * _height, Qt::Uninitialized);
-
-            for (int y = 0; y < _height; y++) {
-                auto srcLine = data + y * rowStride;
-                auto dstLine = reinterpret_cast<quint8 *>(buffer.data())
-                               + y * _width;
-
-                for (int x = 0; x < _width; x++)
-                    dstLine[x] = srcLine[pixelStride * x];
-            }
-
-            oBuffer += buffer;
-        }
-    } else {
-        for (int32_t i = 0; i < numPlanes; i++) {
-            uint8_t *data = nullptr;
-            int dataLength = 0;
-
-            if (AImage_getPlaneData(image, i, &data, &dataLength) != AMEDIA_OK)
-                continue;
-
-            oBuffer += QByteArray(reinterpret_cast<char *>(data), dataLength);
-        }
-    }
-
-    return oBuffer;
-}
-
 void CaptureNdkCameraPrivate::updateDevices()
 {
     if (!this->canUseCamera())
@@ -632,7 +1336,7 @@ void CaptureNdkCameraPrivate::updateDevi
                 continue;
             }
 
-            QList<AkCaps> supportedFormats;
+            CaptureVideoCaps supportedFormats;
 
             for (uint32_t i = 0; i < formats.count; i += 4) {
                 if (formats.data.i32[i + 3])
@@ -649,23 +1353,32 @@ void CaptureNdkCameraPrivate::updateDevi
                 if (unsupportedFormats.contains(format))
                     continue;
 
-                AkCaps videoCaps;
-                videoCaps.setMimeType("video/unknown");
-                videoCaps.setProperty("fourcc", imgFmtToStrMap->value(format));
-                videoCaps.setProperty("width", width);
-                videoCaps.setProperty("height", height);
+                if (rawFmtToAkMap->contains(format)) {
+                    AkVideoCaps videoCaps(rawFmtToAkMap->value(format),
+                                          width,
+                                          height,
+                                          {});
+
+                    if (!supportedFormats.contains(videoCaps))
+                        supportedFormats << videoCaps;
+                } else if (compressedFmtToAkMap->contains(format)) {
+                    AkCompressedVideoCaps videoCaps(compressedFmtToAkMap->value(format),
+                                                    width,
+                                                    height,
+                                                    {});
 
-                if (!supportedFormats.contains(videoCaps))
-                    supportedFormats << videoCaps;
+                    if (!supportedFormats.contains(videoCaps))
+                        supportedFormats << videoCaps;
+                }
             }
 
-            QVariantList caps;
+            CaptureVideoCaps caps;
 
             for (auto &format: supportedFormats)
                 for (auto &fps: supportedFrameRates) {
-                    auto videoCaps = format;
-                    videoCaps.setProperty("fps", fps.toString());
-                    caps << QVariant::fromValue(videoCaps);
+                    AkVideoCaps videoCaps(format);
+                    videoCaps.setFps(fps);
+                    caps << videoCaps;
                 }
 
             if (!caps.isEmpty()) {
@@ -710,10 +1423,12 @@ bool CaptureNdkCamera::init()
     this->uninit();
 
     QList<int> streams;
-    QVariantList supportedCaps;
+    CaptureVideoCaps supportedCaps;
     AIMAGE_FORMATS format;
     AkCaps caps;
     int32_t fpsRange[2];
+    int width = 0;
+    int height = 0;
     AkFrac fps;
 
     auto cameraId = this->d->m_device;
@@ -738,87 +1453,128 @@ bool CaptureNdkCamera::init()
                                   cameraId.toStdString().c_str(),
                                   &deviceStateCb,
                                   &this->d->m_camera) != ACAMERA_OK) {
-        goto init_failed;
+        this->uninit();
+
+        return false;
     }
 
     if (ACameraDevice_createCaptureRequest(this->d->m_camera,
                                            TEMPLATE_PREVIEW,
                                            &this->d->m_captureRequest) != ACAMERA_OK) {
-        goto init_failed;
+        this->uninit();
+
+        return false;
     }
 
     streams = this->streams();
 
-    if (streams.isEmpty())
-        goto init_failed;
+    if (streams.isEmpty()) {
+        this->uninit();
+
+        return false;
+    }
 
     supportedCaps = this->caps(this->d->m_device);
-    caps = supportedCaps[streams[0]].value<AkCaps>();
-    caps.setProperty("align", 32);
-    fps = caps.property("fps").toString();
+    caps = supportedCaps[streams[0]];
 
-    if (!this->d->nearestFpsRangue(cameraId, fps, fpsRange[0], fpsRange[1]))
-        goto init_failed;
+    if (caps.type() == AkCaps::CapsVideo) {
+        AkVideoCaps videoCaps(caps);
+        format = rawFmtToAkMap->key(videoCaps.format(),
+                                    AIMAGE_FORMAT_PRIVATE);
+        width = videoCaps.width();
+        height = videoCaps.height();
+        fps = videoCaps.fps();
+    } else {
+        AkCompressedVideoCaps videoCaps(caps);
+        format = compressedFmtToAkMap->key(videoCaps.format(),
+                                           AIMAGE_FORMAT_PRIVATE);
+        width = videoCaps.width();
+        height = videoCaps.height();
+        fps = videoCaps.fps();
+    }
+
+    if (!this->d->nearestFpsRangue(cameraId, fps, fpsRange[0], fpsRange[1])) {
+        this->uninit();
+
+        return false;
+    }
 
     if (ACaptureRequest_setEntry_i32(this->d->m_captureRequest,
                                      ACAMERA_CONTROL_AE_TARGET_FPS_RANGE,
                                      2,
                                      fpsRange) != ACAMERA_OK) {
-        goto init_failed;
-    }
+        this->uninit();
 
-    format = imgFmtToStrMap->key(caps.property("fourcc").toString(),
-                                 AIMAGE_FORMAT_PRIVATE);
+        return false;
+    }
 
-    if (AImageReader_new(caps.property("width").toInt(),
-                         caps.property("height").toInt(),
+    if (AImageReader_new(width,
+                         height,
                          format,
                          this->d->m_nBuffers,
                          &this->d->m_imageReader) != AMEDIA_OK) {
-        goto init_failed;
+        this->uninit();
+
+        return false;
     }
 
     if (AImageReader_setImageListener(this->d->m_imageReader,
                                       &imageListenerCb) != AMEDIA_OK) {
-        goto init_failed;
+        this->uninit();
+
+        return false;
     }
 
     if (AImageReader_getWindow(this->d->m_imageReader,
                                &this->d->m_imageReaderWindow) != AMEDIA_OK) {
-        goto init_failed;
+        this->uninit();
+
+        return false;
     }
 
     ANativeWindow_acquire(this->d->m_imageReaderWindow);
 
     if (ACaptureSessionOutput_create(this->d->m_imageReaderWindow,
                                      &this->d->m_sessionOutput) != ACAMERA_OK) {
-        goto init_failed;
+        this->uninit();
+
+        return false;
     }
 
     if (ACaptureSessionOutputContainer_create(&this->d->m_outputContainer) != ACAMERA_OK) {
-        goto init_failed;
+        this->uninit();
+
+        return false;
     }
 
     if (ACaptureSessionOutputContainer_add(this->d->m_outputContainer,
                                            this->d->m_sessionOutput) != ACAMERA_OK) {
-        goto init_failed;
+        this->uninit();
+
+        return false;
     }
 
     if (ACameraOutputTarget_create(this->d->m_imageReaderWindow,
                                    &this->d->m_outputTarget) != ACAMERA_OK) {
-        goto init_failed;
+        this->uninit();
+
+        return false;
     }
 
     if (ACaptureRequest_addTarget(this->d->m_captureRequest,
                                   this->d->m_outputTarget) != ACAMERA_OK) {
-        goto init_failed;
+        this->uninit();
+
+        return false;
     }
 
     if (ACameraDevice_createCaptureSession(this->d->m_camera,
                                            this->d->m_outputContainer,
                                            &sessionStateCb,
                                            &this->d->m_captureSession) != ACAMERA_OK) {
-        goto init_failed;
+        this->uninit();
+
+        return false;
     }
 
     if (ACameraCaptureSession_setRepeatingRequest(this->d->m_captureSession,
@@ -826,7 +1582,9 @@ bool CaptureNdkCamera::init()
                                                   1,
                                                   &this->d->m_captureRequest,
                                                   nullptr) != ACAMERA_OK) {
-        goto init_failed;
+        this->uninit();
+
+        return false;
     }
 
     this->d->m_id = Ak::id();
@@ -834,11 +1592,6 @@ bool CaptureNdkCamera::init()
     this->d->m_fps = fps;
 
     return true;
-
-init_failed:
-    this->uninit();
-
-    return false;
 }
 
 void CaptureNdkCamera::uninit()
@@ -908,15 +1661,21 @@ void CaptureNdkCamera::setDevice(const Q
         this->d->m_controlsMutex.unlock();
     } else {
         this->d->m_controlsMutex.lockForWrite();
-
-
+        this->d->m_globalImageControls =
+                this->d->controls(*globalImageControls, device);
+        this->d->m_globalCameraControls =
+                this->d->controls(*globalCameraControls, device);
         this->d->m_controlsMutex.unlock();
     }
 
     this->d->m_controlsMutex.lockForWrite();
+    auto imageStatus = this->d->controlStatus(this->d->m_globalImageControls);
+    auto cameraStatus = this->d->controlStatus(this->d->m_globalCameraControls);
     this->d->m_controlsMutex.unlock();
 
     emit this->deviceChanged(device);
+    emit this->imageControlsChanged(imageStatus);
+    emit this->cameraControlsChanged(cameraStatus);
 }
 
 void CaptureNdkCamera::setStreams(const QList<int> &streams)
@@ -964,7 +1723,7 @@ void CaptureNdkCamera::resetDevice()
 
 void CaptureNdkCamera::resetStreams()
 {
-    QVariantList supportedCaps = this->caps(this->d->m_device);
+    auto supportedCaps = this->caps(this->d->m_device);
     QList<int> streams;
 
     if (!supportedCaps.isEmpty())
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/ndkcamera/src/capturendkcamera.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/ndkcamera/src/capturendkcamera.h
@@ -32,38 +32,37 @@ class CaptureNdkCamera: public Capture
         CaptureNdkCamera(QObject *parent=nullptr);
         ~CaptureNdkCamera();
 
-        Q_INVOKABLE QStringList webcams() const;
-        Q_INVOKABLE QString device() const;
-        Q_INVOKABLE QList<int> streams();
-        Q_INVOKABLE QList<int> listTracks(const QString &mimeType);
-        Q_INVOKABLE QString ioMethod() const;
-        Q_INVOKABLE int nBuffers() const;
-        Q_INVOKABLE QString description(const QString &webcam) const;
-        Q_INVOKABLE QVariantList caps(const QString &webcam) const;
-        Q_INVOKABLE QString capsDescription(const AkCaps &caps) const;
-        Q_INVOKABLE QVariantList imageControls() const;
-        Q_INVOKABLE bool setImageControls(const QVariantMap &imageControls);
-        Q_INVOKABLE bool resetImageControls();
-        Q_INVOKABLE QVariantList cameraControls() const;
-        Q_INVOKABLE bool setCameraControls(const QVariantMap &cameraControls);
-        Q_INVOKABLE bool resetCameraControls();
-        Q_INVOKABLE AkPacket readFrame();
+        Q_INVOKABLE QStringList webcams() const override;
+        Q_INVOKABLE QString device() const override;
+        Q_INVOKABLE QList<int> streams() override;
+        Q_INVOKABLE QList<int> listTracks(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString ioMethod() const override;
+        Q_INVOKABLE int nBuffers() const override;
+        Q_INVOKABLE QString description(const QString &webcam) const override;
+        Q_INVOKABLE CaptureVideoCaps caps(const QString &webcam) const override;
+        Q_INVOKABLE QVariantList imageControls() const override;
+        Q_INVOKABLE bool setImageControls(const QVariantMap &imageControls) override;
+        Q_INVOKABLE bool resetImageControls() override;
+        Q_INVOKABLE QVariantList cameraControls() const override;
+        Q_INVOKABLE bool setCameraControls(const QVariantMap &cameraControls) override;
+        Q_INVOKABLE bool resetCameraControls() override;
+        Q_INVOKABLE AkPacket readFrame() override;
 
     private:
         CaptureNdkCameraPrivate *d;
 
     public slots:
-        bool init();
-        void uninit();
-        void setDevice(const QString &device);
-        void setStreams(const QList<int> &streams);
-        void setIoMethod(const QString &ioMethod);
-        void setNBuffers(int nBuffers);
-        void resetDevice();
-        void resetStreams();
-        void resetIoMethod();
-        void resetNBuffers();
-        void reset();
+        bool init() override;
+        void uninit() override;
+        void setDevice(const QString &device) override;
+        void setStreams(const QList<int> &streams) override;
+        void setIoMethod(const QString &ioMethod) override;
+        void setNBuffers(int nBuffers) override;
+        void resetDevice() override;
+        void resetStreams() override;
+        void resetIoMethod() override;
+        void resetNBuffers() override;
+        void reset() override;
 };
 
 #endif // CAPTURENDKCAMERA_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/v4l2sys/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/v4l2sys/CMakeLists.txt
@@ -41,7 +41,6 @@ CHECK_INCLUDE_FILE_CXX(linux/videodev2.h
 set(SOURCES
     ../../capture.cpp
     ../../capture.h
-    src/capturebuffer.h
     src/capturev4l2.cpp
     src/capturev4l2.h
     src/plugin.cpp
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/v4l2sys/src/capturebuffer.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2017  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef CAPTUREBUFFER_H
-#define CAPTUREBUFFER_H
-
-#include <cstring>
-
-struct CaptureBuffer
-{
-    char *start;
-    size_t length;
-};
-
-#endif // CAPTUREBUFFER_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/v4l2sys/src/capturev4l2.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/v4l2sys/src/capturev4l2.cpp
@@ -28,6 +28,11 @@
 #include <akfrac.h>
 #include <akcaps.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoformatspec.h>
+#include <akvideopacket.h>
+#include <akcompressedvideocaps.h>
+#include <akcompressedvideopacket.h>
 #include <sys/mman.h>
 #include <fcntl.h>
 #include <errno.h>
@@ -56,7 +61,6 @@
 #endif
 
 #include "capturev4l2.h"
-#include "capturebuffer.h"
 
 using V4l2CtrlTypeMap = QMap<v4l2_ctrl_type, QString>;
 
@@ -95,79 +99,191 @@ inline IoMethodMap initIoMethodMap()
 
 Q_GLOBAL_STATIC_WITH_ARGS(IoMethodMap, ioMethodToStr, (initIoMethodMap()))
 
-using FourccToStrMap = QMap<__u32, QString>;
+using V4L2FmtToAkFmtMap = QMap<__u32, AkVideoCaps::PixelFormat>;
 
-inline FourccToStrMap initFourccToStr()
+inline V4L2FmtToAkFmtMap initV4L2FmtToAkFmt()
 {
-    FourccToStrMap fourccToStr = {
-        {V4L2_PIX_FMT_RGB332      , "RGB332"      },
-        {V4L2_PIX_FMT_RGB444      , "RGB444"      },
-        {V4L2_PIX_FMT_ARGB444     , "ARGB444"     },
-        {V4L2_PIX_FMT_XRGB444     , "XRGB444"     },
-        {V4L2_PIX_FMT_RGB555      , "RGB555"      },
-        {V4L2_PIX_FMT_ARGB555     , "ARGB555"     },
-        {V4L2_PIX_FMT_XRGB555     , "XRGB555"     },
-        {V4L2_PIX_FMT_RGB565      , "RGB565"      },
-        {V4L2_PIX_FMT_RGB555X     , "RGB555BE"    },
-        {V4L2_PIX_FMT_ARGB555X    , "ARGB555BE"   },
-        {V4L2_PIX_FMT_XRGB555X    , "XRGB555BE"   },
-        {V4L2_PIX_FMT_RGB565X     , "RGB565BE"    },
-        {V4L2_PIX_FMT_BGR666      , "BGR666"      },
-        {V4L2_PIX_FMT_BGR24       , "BGR"         },
-        {V4L2_PIX_FMT_RGB24       , "RGB"         },
-        {V4L2_PIX_FMT_BGR32       , "BGRX"        },
-        {V4L2_PIX_FMT_ABGR32      , "ABGR"        },
-        {V4L2_PIX_FMT_XBGR32      , "XBGR"        },
-        {V4L2_PIX_FMT_RGB32       , "RGBA"        },
-        {V4L2_PIX_FMT_ARGB32      , "ARGB"        },
-        {V4L2_PIX_FMT_XRGB32      , "XRGB"        },
-        {V4L2_PIX_FMT_GREY        , "GRAY8"       },
-        {V4L2_PIX_FMT_Y4          , "GRAY4"       },
-        {V4L2_PIX_FMT_Y6          , "GRAY6"       },
-        {V4L2_PIX_FMT_Y10         , "GRAY10"      },
-        {V4L2_PIX_FMT_Y12         , "GRAY12"      },
-        {V4L2_PIX_FMT_Y16         , "GRAY16"      },
-        {V4L2_PIX_FMT_Y16_BE      , "GRAY16BE"    },
-        {V4L2_PIX_FMT_SBGGR8      , "SBGGR8"      },
-        {V4L2_PIX_FMT_SGBRG8      , "SGBRG8"      },
-        {V4L2_PIX_FMT_SGRBG8      , "SGRBG8"      },
-        {V4L2_PIX_FMT_SRGGB8      , "SRGGB8"      },
-        {V4L2_PIX_FMT_SBGGR10     , "SBGGR10"     },
-        {V4L2_PIX_FMT_SGBRG10     , "SGBRG10"     },
-        {V4L2_PIX_FMT_SGRBG10     , "SGRBG10"     },
-        {V4L2_PIX_FMT_SRGGB10     , "SRGGB10"     },
-        {V4L2_PIX_FMT_SBGGR10P    , "SBGGR10P"    },
-        {V4L2_PIX_FMT_SGBRG10P    , "SGBRG10P"    },
-        {V4L2_PIX_FMT_SGRBG10P    , "SGRBG10P"    },
-        {V4L2_PIX_FMT_SRGGB10P    , "SRGGB10P"    },
-        {V4L2_PIX_FMT_SBGGR10ALAW8, "SBGGR10ALAW8"},
-        {V4L2_PIX_FMT_SGBRG10ALAW8, "SGBRG10ALAW8"},
-        {V4L2_PIX_FMT_SGRBG10ALAW8, "SGRBG10ALAW8"},
-        {V4L2_PIX_FMT_SRGGB10ALAW8, "SRGGB10ALAW8"},
-        {V4L2_PIX_FMT_SBGGR10DPCM8, "SBGGR10DPCM8"},
-        {V4L2_PIX_FMT_SGBRG10DPCM8, "SGBRG10DPCM8"},
-        {V4L2_PIX_FMT_SGRBG10DPCM8, "SGRBG10DPCM8"},
-        {V4L2_PIX_FMT_SRGGB10DPCM8, "SRGGB10DPCM8"},
-        {V4L2_PIX_FMT_SBGGR12     , "SBGGR12"     },
-        {V4L2_PIX_FMT_SGBRG12     , "SGBRG12"     },
-        {V4L2_PIX_FMT_SGRBG12     , "SGRBG12"     },
-        {V4L2_PIX_FMT_SRGGB12     , "SRGGB12"     },
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)
-        {V4L2_PIX_FMT_SBGGR12P    , "SBGGR12P"    },
-        {V4L2_PIX_FMT_SGBRG12P    , "SGBRG12P"    },
-        {V4L2_PIX_FMT_SGRBG12P    , "SGRBG12P"    },
-        {V4L2_PIX_FMT_SRGGB12P    , "SRGGB12P"    },
-        {V4L2_PIX_FMT_SBGGR16     , "SBGGR16"     },
-        {V4L2_PIX_FMT_SGBRG16     , "SGBRG16"     },
-        {V4L2_PIX_FMT_SGRBG16     , "SGRBG16"     },
-        {V4L2_PIX_FMT_SRGGB16     , "SRGGB16"     },
+    V4L2FmtToAkFmtMap v4l2FmtToAkFmt {
+        // RGB formats (1 or 2 bytes per pixel)
+
+        {V4L2_PIX_FMT_RGB332  , AkVideoCaps::Format_rgb332    },
+        {V4L2_PIX_FMT_RGB444  , AkVideoCaps::Format_rgb444le  },
+        {V4L2_PIX_FMT_ARGB444 , AkVideoCaps::Format_argb4444le},
+        {V4L2_PIX_FMT_XRGB444 , AkVideoCaps::Format_rgb444le  },
+        {V4L2_PIX_FMT_RGBA444 , AkVideoCaps::Format_rgba4444le},
+        {V4L2_PIX_FMT_RGBX444 , AkVideoCaps::Format_rgb0444le },
+        {V4L2_PIX_FMT_ABGR444 , AkVideoCaps::Format_abgr4444le},
+        {V4L2_PIX_FMT_XBGR444 , AkVideoCaps::Format_0bgr444le },
+        {V4L2_PIX_FMT_BGRA444 , AkVideoCaps::Format_bgra4444le},
+        {V4L2_PIX_FMT_BGRX444 , AkVideoCaps::Format_bgr0444le },
+        {V4L2_PIX_FMT_RGB555  , AkVideoCaps::Format_rgb555le  },
+        {V4L2_PIX_FMT_ARGB555 , AkVideoCaps::Format_argb1555le},
+        {V4L2_PIX_FMT_XRGB555 , AkVideoCaps::Format_rgb555le  },
+        {V4L2_PIX_FMT_RGBA555 , AkVideoCaps::Format_rgba5551le},
+        {V4L2_PIX_FMT_RGBX555 , AkVideoCaps::Format_rgb0555le },
+        {V4L2_PIX_FMT_ABGR555 , AkVideoCaps::Format_abgr1555le},
+        {V4L2_PIX_FMT_XBGR555 , AkVideoCaps::Format_bgr555le  },
+        {V4L2_PIX_FMT_BGRA555 , AkVideoCaps::Format_bgra5551le},
+        {V4L2_PIX_FMT_BGRX555 , AkVideoCaps::Format_bgr0555le },
+        {V4L2_PIX_FMT_RGB565  , AkVideoCaps::Format_rgb565le  },
+        {V4L2_PIX_FMT_RGB555X , AkVideoCaps::Format_rgb555be  },
+        {V4L2_PIX_FMT_ARGB555X, AkVideoCaps::Format_argb1555be},
+        {V4L2_PIX_FMT_XRGB555X, AkVideoCaps::Format_rgb555be  },
+        {V4L2_PIX_FMT_RGB565X , AkVideoCaps::Format_rgb565be  },
+
+        // RGB formats (3 or 4 bytes per pixel)
+
+        {V4L2_PIX_FMT_BGR24 , AkVideoCaps::Format_bgr24},
+        {V4L2_PIX_FMT_RGB24 , AkVideoCaps::Format_rgb24},
+        {V4L2_PIX_FMT_BGR32 , AkVideoCaps::Format_0bgr },
+        {V4L2_PIX_FMT_ABGR32, AkVideoCaps::Format_abgr },
+        {V4L2_PIX_FMT_XBGR32, AkVideoCaps::Format_0bgr },
+        {V4L2_PIX_FMT_BGRA32, AkVideoCaps::Format_bgra },
+        {V4L2_PIX_FMT_BGRX32, AkVideoCaps::Format_bgr0 },
+        {V4L2_PIX_FMT_RGB32 , AkVideoCaps::Format_0rgb },
+        {V4L2_PIX_FMT_RGBA32, AkVideoCaps::Format_rgba },
+        {V4L2_PIX_FMT_RGBX32, AkVideoCaps::Format_rgb0 },
+        {V4L2_PIX_FMT_ARGB32, AkVideoCaps::Format_argb },
+        {V4L2_PIX_FMT_XRGB32, AkVideoCaps::Format_0rgb },
+
+        // Grey formats
+
+        {V4L2_PIX_FMT_GREY  , AkVideoCaps::Format_gray8   },
+        {V4L2_PIX_FMT_Y4    , AkVideoCaps::Format_gray4   },
+        {V4L2_PIX_FMT_Y6    , AkVideoCaps::Format_gray6   },
+        {V4L2_PIX_FMT_Y10   , AkVideoCaps::Format_gray10le},
+        {V4L2_PIX_FMT_Y12   , AkVideoCaps::Format_gray12le},
+#ifdef V4L2_PIX_FMT_Y14
+        {V4L2_PIX_FMT_Y14   , AkVideoCaps::Format_gray14le},
 #endif
+        {V4L2_PIX_FMT_Y16   , AkVideoCaps::Format_gray16le},
+        {V4L2_PIX_FMT_Y16_BE, AkVideoCaps::Format_gray16be},
+
+        // Luminance+Chrominance formats
+
+        {V4L2_PIX_FMT_YUYV  , AkVideoCaps::Format_yuyv422   },
+        {V4L2_PIX_FMT_YVYU  , AkVideoCaps::Format_yvyu422   },
+        {V4L2_PIX_FMT_UYVY  , AkVideoCaps::Format_uyvy422   },
+        {V4L2_PIX_FMT_VYUY  , AkVideoCaps::Format_vyuy422   },
+        {V4L2_PIX_FMT_Y41P  , AkVideoCaps::Format_yuv411p   },
+        {V4L2_PIX_FMT_YUV444, AkVideoCaps::Format_yuv444pack},
+        {V4L2_PIX_FMT_YUV555, AkVideoCaps::Format_yuv555pack},
+        {V4L2_PIX_FMT_YUV565, AkVideoCaps::Format_yuv565pack},
+#ifdef V4L2_PIX_FMT_YUV24
+        {V4L2_PIX_FMT_YUV24 , AkVideoCaps::Format_yuv24     },
+#endif
+        {V4L2_PIX_FMT_YUV32 , AkVideoCaps::Format_0yuv      },
+        {V4L2_PIX_FMT_AYUV32, AkVideoCaps::Format_ayuv      },
+        {V4L2_PIX_FMT_XYUV32, AkVideoCaps::Format_0yuv      },
+        {V4L2_PIX_FMT_VUYA32, AkVideoCaps::Format_vuya      },
+        {V4L2_PIX_FMT_VUYX32, AkVideoCaps::Format_vuy0      },
+
+        // two planes -- one Y, one Cr + Cb interleaved
+
+        {V4L2_PIX_FMT_NV12, AkVideoCaps::Format_nv12},
+        {V4L2_PIX_FMT_NV21, AkVideoCaps::Format_nv21},
+        {V4L2_PIX_FMT_NV16, AkVideoCaps::Format_nv16},
+        {V4L2_PIX_FMT_NV61, AkVideoCaps::Format_nv61},
+        {V4L2_PIX_FMT_NV24, AkVideoCaps::Format_nv24},
+        {V4L2_PIX_FMT_NV42, AkVideoCaps::Format_nv42},
+
+        // two non contiguous planes - one Y, one Cr + Cb interleaved
+
+        {V4L2_PIX_FMT_NV12M, AkVideoCaps::Format_nv12},
+        {V4L2_PIX_FMT_NV21M, AkVideoCaps::Format_nv21},
+        {V4L2_PIX_FMT_NV16M, AkVideoCaps::Format_nv16},
+        {V4L2_PIX_FMT_NV61M, AkVideoCaps::Format_nv61},
+
+        // three planes - Y Cb, Cr
+
+        {V4L2_PIX_FMT_YUV410 , AkVideoCaps::Format_yuv410p},
+        {V4L2_PIX_FMT_YVU410 , AkVideoCaps::Format_yvu410p},
+        {V4L2_PIX_FMT_YUV411P, AkVideoCaps::Format_yuv411p},
+        {V4L2_PIX_FMT_YUV420 , AkVideoCaps::Format_yuv420p},
+        {V4L2_PIX_FMT_YVU420 , AkVideoCaps::Format_yvu420p},
+        {V4L2_PIX_FMT_YUV422P, AkVideoCaps::Format_yuv422p},
+
+        // three non contiguous planes - Y, Cb, Cr
+
+        {V4L2_PIX_FMT_YUV420M, AkVideoCaps::Format_yuv420p},
+        {V4L2_PIX_FMT_YVU420M, AkVideoCaps::Format_yvu420p},
+        {V4L2_PIX_FMT_YUV422M, AkVideoCaps::Format_yuv422p},
+        {V4L2_PIX_FMT_YVU422M, AkVideoCaps::Format_yvu422p},
+        {V4L2_PIX_FMT_YUV444M, AkVideoCaps::Format_yuv444p},
+        {V4L2_PIX_FMT_YVU444M, AkVideoCaps::Format_yvu444p},
     };
 
-    return fourccToStr;
+    return v4l2FmtToAkFmt;
 }
 
-Q_GLOBAL_STATIC_WITH_ARGS(FourccToStrMap, v4l2FourccToStr, (initFourccToStr()))
+Q_GLOBAL_STATIC_WITH_ARGS(V4L2FmtToAkFmtMap, v4l2FmtToAkFmt, (initV4L2FmtToAkFmt()))
+
+using CompressedFormatToStrMap = QMap<__u32, QString>;
+
+inline CompressedFormatToStrMap initCompressedFormatToStr()
+{
+    CompressedFormatToStrMap compressedFormatToStr {
+        {V4L2_PIX_FMT_MJPEG         , "mjpg" },
+        {V4L2_PIX_FMT_JPEG          , "jpeg" },
+        {V4L2_PIX_FMT_DV            , "dvsd" },
+        {V4L2_PIX_FMT_MPEG          , "mpeg" },
+        {V4L2_PIX_FMT_H264          , "h264" },
+        {V4L2_PIX_FMT_H264_NO_SC    , "h264" },
+        {V4L2_PIX_FMT_H264_MVC      , "h264" },
+        {V4L2_PIX_FMT_H263          , "h263" },
+        {V4L2_PIX_FMT_MPEG1         , "mpeg1"},
+        {V4L2_PIX_FMT_MPEG2         , "mpeg2"},
+        {V4L2_PIX_FMT_MPEG2_SLICE   , "mpeg2"},
+        {V4L2_PIX_FMT_MPEG4         , "mpeg4"},
+        {V4L2_PIX_FMT_XVID          , "xvid" },
+        {V4L2_PIX_FMT_VC1_ANNEX_G   , "vc1"  },
+        {V4L2_PIX_FMT_VC1_ANNEX_L   , "vc1"  },
+        {V4L2_PIX_FMT_VP8           , "vp8"  },
+#ifdef V4L2_PIX_FMT_VP8_FRAME
+        {V4L2_PIX_FMT_VP8_FRAME     , "vp8"  },
+#endif
+        {V4L2_PIX_FMT_VP9           , "vp9"  },
+#ifdef V4L2_PIX_FMT_VP9_FRAME
+        {V4L2_PIX_FMT_VP9_FRAME     , "vp9"  },
+#endif
+        {V4L2_PIX_FMT_HEVC          , "hevc" },
+#ifdef V4L2_PIX_FMT_H264_SLICE
+        {V4L2_PIX_FMT_H264_SLICE    , "h264" },
+#endif
+    };
+
+    return compressedFormatToStr;
+}
+
+Q_GLOBAL_STATIC_WITH_ARGS(CompressedFormatToStrMap,
+                          compressedFormatToStr,
+                          (initCompressedFormatToStr()))
+
+struct CaptureBuffer
+{
+    char *start[VIDEO_MAX_PLANES];
+    size_t length[VIDEO_MAX_PLANES];
+};
+
+class DeviceV4L2Format
+{
+    public:
+        AkCaps caps;
+        __u32 type {0};
+        __u32 pixelformat {0};
+
+        DeviceV4L2Format(const AkCaps &caps,
+                         __u32 type,
+                         __u32 pixelformat):
+            caps(caps),
+            type(type),
+            pixelformat(pixelformat)
+        {
+
+        }
+};
+
+using V4L2Formats = QVector<DeviceV4L2Format>;
 
 class CaptureV4L2Private
 {
@@ -177,30 +293,33 @@ class CaptureV4L2Private
         QList<int> m_streams;
         QStringList m_devices;
         QMap<QString, QString> m_descriptions;
-        QMap<QString, QVariantList> m_devicesCaps;
+        QMap<QString, V4L2Formats> m_devicesCaps;
         QReadWriteLock m_controlsMutex;
         QVariantList m_globalImageControls;
         QVariantList m_globalCameraControls;
         QVariantMap m_localImageControls;
         QVariantMap m_localCameraControls;
         QFileSystemWatcher *m_fsWatcher {nullptr};
+        AkVideoPacket m_outPacket;
         AkFrac m_fps;
         AkFrac m_timeBase;
         AkCaps m_caps;
         qint64 m_id {-1};
         QVector<CaptureBuffer> m_buffers;
+        v4l2_format m_v4l2Format;
         CaptureV4L2::IoMethod m_ioMethod {CaptureV4L2::IoMethodUnknown};
         int m_nBuffers {32};
         int m_fd {-1};
 
         explicit CaptureV4L2Private(CaptureV4L2 *self);
         ~CaptureV4L2Private();
-        QVariantList capsFps(int fd,
-                             const v4l2_fmtdesc &format,
-                             __u32 width,
-                             __u32 height) const;
-        QVariantList caps(int fd) const;
-        void setFps(int fd, const AkFrac &fps);
+        inline int planesCount(const v4l2_format &format) const;
+        V4L2Formats capsFps(int fd,
+                            const v4l2_fmtdesc &format,
+                            __u32 width,
+                            __u32 height) const;
+        V4L2Formats caps(int fd) const;
+        void setFps(int fd, __u32 bufferType, const AkFrac &fps);
         QVariantList controls(int fd, quint32 controlClass) const;
         bool setControls(int fd,
                          quint32 controlClass,
@@ -210,16 +329,15 @@ class CaptureV4L2Private
                                   v4l2_queryctrl *queryctrl) const;
         QMap<QString, quint32> findControls(int handle,
                                             quint32 controlClass) const;
-        bool initReadWrite(quint32 bufferSize);
-        bool initMemoryMap();
-        bool initUserPointer(quint32 bufferSize);
-        bool startCapture();
-        void stopCapture();
+        bool initReadWrite(const v4l2_format &format);
+        bool initMemoryMap(const v4l2_format &format);
+        bool initUserPointer(const v4l2_format &format);
+        bool startCapture(const v4l2_format &format);
+        void stopCapture(const v4l2_format &format);
         QString fourccToStr(quint32 format) const;
-        quint32 strToFourCC(const QString &format) const;
-        AkPacket processFrame(const char *buffer,
-                              size_t bufferSize,
-                              qint64 pts) const;
+        AkPacket processFrame(const char * const *planeData,
+                              const ssize_t *planeSize,
+                              qint64 pts);
         QVariantList imageControls(int fd) const;
         bool setImageControls(int fd,
                               const QVariantMap &imageControls) const;
@@ -259,7 +377,7 @@ QList<int> CaptureV4L2::streams()
     if (!this->d->m_streams.isEmpty())
         return this->d->m_streams;
 
-    auto caps = this->caps(this->d->m_device);
+    auto caps = this->d->m_devicesCaps.value(this->d->m_device);
 
     if (caps.isEmpty())
         return {};
@@ -267,13 +385,12 @@ QList<int> CaptureV4L2::streams()
     return {0};
 }
 
-QList<int> CaptureV4L2::listTracks(const QString &mimeType)
+QList<int> CaptureV4L2::listTracks(AkCaps::CapsType type)
 {
-    if (mimeType != "video/x-raw"
-        && !mimeType.isEmpty())
-        return QList<int>();
+    if (type != AkCaps::CapsVideo && type != AkCaps::CapsUnknown)
+        return {};
 
-    QVariantList caps = this->caps(this->d->m_device);
+    auto caps = this->d->m_devicesCaps.value(this->d->m_device);
     QList<int> streams;
 
     for (int i = 0; i < caps.count(); i++)
@@ -297,23 +414,14 @@ QString CaptureV4L2::description(const Q
     return this->d->m_descriptions.value(webcam);
 }
 
-QVariantList CaptureV4L2::caps(const QString &webcam) const
+CaptureVideoCaps CaptureV4L2::caps(const QString &webcam) const
 {
-    return this->d->m_devicesCaps.value(webcam);
-}
+    CaptureVideoCaps caps;
 
-QString CaptureV4L2::capsDescription(const AkCaps &caps) const
-{
-    if (caps.mimeType() != "video/unknown")
-        return QString();
+    for (auto &format: this->d->m_devicesCaps.value(webcam))
+        caps << format.caps;
 
-    AkFrac fps = caps.property("fps").toString();
-
-    return QString("%1, %2x%3, %4 FPS")
-                .arg(caps.property("fourcc").toString(),
-                     caps.property("width").toString(),
-                     caps.property("height").toString())
-                .arg(qRound(fps.value()));
+    return caps;
 }
 
 QVariantList CaptureV4L2::imageControls() const
@@ -416,10 +524,10 @@ bool CaptureV4L2::resetCameraControls()
 AkPacket CaptureV4L2::readFrame()
 {
     if (this->d->m_buffers.isEmpty())
-        return AkPacket();
+        return {};
 
     if (this->d->m_fd < 0)
-        return AkPacket();
+        return {};
 
     this->d->m_controlsMutex.lockForRead();
     auto imageControls = this->d->controlStatus(this->d->m_globalImageControls);
@@ -443,11 +551,19 @@ AkPacket CaptureV4L2::readFrame()
         this->d->m_localCameraControls = cameraControls;
     }
 
+    int planesCount = this->d->planesCount(this->d->m_v4l2Format);
+    ssize_t planeSize[planesCount];
+    memset(planeSize, 0, planesCount * sizeof(ssize_t));
+
     if (this->d->m_ioMethod == IoMethodReadWrite) {
-        if (x_read(this->d->m_fd,
-                   this->d->m_buffers[0].start,
-                   this->d->m_buffers[0].length) < 0)
-            return AkPacket();
+        for (int i = 0; i < planesCount; i++) {
+            planeSize[i] = x_read(this->d->m_fd,
+                                  this->d->m_buffers[0].start[i],
+                                  this->d->m_buffers[0].length[i]);
+
+            if (planeSize[i] < 0)
+                return AkPacket();
+        }
 
         timeval timestamp {};
         gettimeofday(&timestamp, nullptr);
@@ -456,14 +572,15 @@ AkPacket CaptureV4L2::readFrame()
                           * this->d->m_fps.value());
 
         return this->d->processFrame(this->d->m_buffers[0].start,
-                                     this->d->m_buffers[0].length,
+                                     planeSize,
                                      pts);
     }
 
     if (this->d->m_ioMethod == IoMethodMemoryMap
         || this->d->m_ioMethod == IoMethodUserPointer) {
-        v4l2_buffer buffer {};
-        buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+        v4l2_buffer buffer;
+        memset(&buffer, 0, sizeof(v4l2_buffer));
+        buffer.type = this->d->m_v4l2Format.type;
         buffer.memory = (this->d->m_ioMethod == IoMethodMemoryMap)?
                             V4L2_MEMORY_MMAP:
                             V4L2_MEMORY_USERPTR;
@@ -474,13 +591,19 @@ AkPacket CaptureV4L2::readFrame()
         if (buffer.index >= quint32(this->d->m_buffers.size()))
             return AkPacket();
 
+        if (this->d->m_v4l2Format.type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
+            planeSize[0] = buffer.bytesused;
+        else
+            for (int i = 0; i < planesCount; i++)
+                planeSize[i] = buffer.m.planes[i].bytesused;
+
         auto pts = qint64((buffer.timestamp.tv_sec
                            + 1e-6 * buffer.timestamp.tv_usec)
                           * this->d->m_fps.value());
 
-        AkPacket packet =
+        auto packet =
                 this->d->processFrame(this->d->m_buffers[int(buffer.index)].start,
-                                      buffer.bytesused,
+                                      planeSize,
                                       pts);
 
         if (x_ioctl(this->d->m_fd, VIDIOC_QBUF, &buffer) < 0)
@@ -489,7 +612,7 @@ AkPacket CaptureV4L2::readFrame()
         return packet;
     }
 
-    return AkPacket();
+    return {};
 }
 
 bool CaptureV4L2::init()
@@ -503,8 +626,11 @@ bool CaptureV4L2::init()
                    O_RDWR, // | O_NONBLOCK,
                    0);
 
-    if (this->d->m_fd < 0)
+    if (this->d->m_fd < 0) {
+        qDebug() << "Can't open device:" << this->d->m_device;
+
         return false;
+    }
 
     v4l2_capability capabilities;
     memset(&capabilities, 0, sizeof(v4l2_capability));
@@ -517,7 +643,7 @@ bool CaptureV4L2::init()
         return false;
     }
 
-    QList<int> streams = this->streams();
+    auto streams = this->streams();
 
     if (streams.isEmpty()) {
         qDebug() << "VideoCapture: No streams available.";
@@ -526,88 +652,145 @@ bool CaptureV4L2::init()
         return false;
     }
 
-    QVariantList supportedCaps = this->caps(this->d->m_device);
-    AkCaps caps = supportedCaps[streams[0]].value<AkCaps>();
-    v4l2_format fmt {};
-    fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+    auto supportedCaps = this->d->m_devicesCaps.value(this->d->m_device);
+    auto caps = supportedCaps[streams[0]];
+    auto v4l2PixelFormat = caps.pixelformat;
+    int width = 0;
+    int height = 0;
+    AkFrac fps;
+
+    if (caps.caps.type() == AkCaps::CapsVideo) {
+        AkVideoCaps videoCaps(caps.caps);
+        width = videoCaps.width();
+        height = videoCaps.height();
+        fps = videoCaps.fps();
+    } else {
+        AkCompressedVideoCaps videoCaps(caps.caps);
+        width = videoCaps.width();
+        height = videoCaps.height();
+        fps = videoCaps.fps();
+    }
 
+    v4l2_format fmt;
+    memset(&fmt, 0, sizeof(v4l2_format));
+    fmt.type = caps.type;
     x_ioctl(this->d->m_fd, VIDIOC_G_FMT, &fmt);
-    auto fourcc = caps.property("fourcc").toString();
-    fmt.fmt.pix.pixelformat =
-            v4l2FourccToStr->key(fourcc,
-                                 this->d->strToFourCC(fourcc));
-    fmt.fmt.pix.width = caps.property("width").toUInt();
-    fmt.fmt.pix.height = caps.property("height").toUInt();
+
+    if (fmt.type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
+        fmt.fmt.pix.pixelformat = v4l2PixelFormat;
+        fmt.fmt.pix.width = width;
+        fmt.fmt.pix.height = height;
+    } else {
+        fmt.fmt.pix_mp.pixelformat = v4l2PixelFormat;
+        fmt.fmt.pix_mp.width = width;
+        fmt.fmt.pix_mp.height = height;
+    }
 
     if (x_ioctl(this->d->m_fd, VIDIOC_S_FMT, &fmt) < 0) {
         qDebug() << QString("VideoCapture: Can't set format: %1 %2x%3")
-                    .arg(this->d->fourccToStr(fmt.fmt.pix.pixelformat))
-                    .arg(fmt.fmt.pix.width)
-                    .arg(fmt.fmt.pix.height);
+                    .arg(this->d->fourccToStr(v4l2PixelFormat))
+                    .arg(width)
+                    .arg(height);
         x_close(this->d->m_fd);
         this->d->m_fd = -1;
 
         return false;
     }
 
-    this->d->setFps(this->d->m_fd, caps.property("fps").toString());
-    this->d->m_caps = caps;
-    this->d->m_fps = caps.property("fps").toString();
+    memcpy(&this->d->m_v4l2Format, &fmt, sizeof(v4l2_format));
+    this->d->m_fps = fps;
+    this->d->setFps(this->d->m_fd, fmt.type, this->d->m_fps);
+    this->d->m_caps = caps.caps;
     this->d->m_timeBase = this->d->m_fps.invert();
 
     if (this->d->m_ioMethod == IoMethodReadWrite
         && capabilities.capabilities & V4L2_CAP_READWRITE
-        && this->d->initReadWrite(fmt.fmt.pix.sizeimage)) {
+        && this->d->initReadWrite(fmt)) {
     } else if (this->d->m_ioMethod == IoMethodMemoryMap
              && capabilities.capabilities & V4L2_CAP_STREAMING
-             && this->d->initMemoryMap()) {
+             && this->d->initMemoryMap(fmt)) {
     } else if (this->d->m_ioMethod == IoMethodUserPointer
              && capabilities.capabilities & V4L2_CAP_STREAMING
-             && this->d->initUserPointer(fmt.fmt.pix.sizeimage)) {
-    } else
+             && this->d->initUserPointer(fmt)) {
+    } else {
         this->d->m_ioMethod = IoMethodUnknown;
+    }
+
+    if (this->d->m_ioMethod != IoMethodUnknown) {
+        if (!this->d->startCapture(fmt)) {
+            qDebug() << "Start capture failed";
+
+            return false;
+        }
+
+        if (this->d->m_caps.type() == AkCaps::CapsVideo) {
+            this->d->m_outPacket = {this->d->m_caps};
+            this->d->m_outPacket.setTimeBase(this->d->m_timeBase);
+            this->d->m_outPacket.setIndex(0);
+            this->d->m_outPacket.setId(this->d->m_id);
+        }
 
-    if (this->d->m_ioMethod != IoMethodUnknown)
-        return this->d->startCapture();
+        return true;
+    }
 
     if (capabilities.capabilities & V4L2_CAP_STREAMING) {
-        if (this->d->initMemoryMap())
+        if (this->d->initMemoryMap(fmt))
             this->d->m_ioMethod = IoMethodMemoryMap;
-        else if (this->d->initUserPointer(fmt.fmt.pix.sizeimage))
+        else if (this->d->initUserPointer(fmt))
             this->d->m_ioMethod = IoMethodUserPointer;
     }
 
     if (this->d->m_ioMethod == IoMethodUnknown) {
         if (capabilities.capabilities & V4L2_CAP_READWRITE
-            && this->d->initReadWrite(fmt.fmt.pix.sizeimage))
+            && this->d->initReadWrite(fmt))
             this->d->m_ioMethod = IoMethodReadWrite;
         else
             return false;
     }
 
-    return this->d->startCapture();
+    if (!this->d->startCapture(fmt)) {
+        qDebug() << "Start capture failed";
+
+        return false;
+    }
+
+    if (this->d->m_caps.type() == AkCaps::CapsVideo) {
+        this->d->m_outPacket = {this->d->m_caps};
+        this->d->m_outPacket.setTimeBase(this->d->m_timeBase);
+        this->d->m_outPacket.setIndex(0);
+        this->d->m_outPacket.setId(this->d->m_id);
+    }
+
+    return true;
 }
 
 void CaptureV4L2::uninit()
 {
-    this->d->stopCapture();
+    this->d->stopCapture(this->d->m_v4l2Format);
+    int planesCount = this->d->planesCount(this->d->m_v4l2Format);
 
     if (!this->d->m_buffers.isEmpty()) {
-        if (this->d->m_ioMethod == IoMethodReadWrite)
-            delete [] this->d->m_buffers[0].start;
-        else if (this->d->m_ioMethod == IoMethodMemoryMap)
+        if (this->d->m_ioMethod == IoMethodReadWrite) {
             for (auto &buffer: this->d->m_buffers)
-                x_munmap(buffer.start, buffer.length);
-        else if (this->d->m_ioMethod == IoMethodUserPointer)
+                for (int i = 0; i < planesCount; i++)
+                    delete [] buffer.start[i];
+        } else if (this->d->m_ioMethod == IoMethodMemoryMap) {
             for (auto &buffer: this->d->m_buffers)
-                delete [] buffer.start;
+                for (int i = 0; i < planesCount; i++)
+                    x_munmap(buffer.start[i], buffer.length[i]);
+        } else if (this->d->m_ioMethod == IoMethodUserPointer) {
+            for (auto &buffer: this->d->m_buffers)
+                for (int i = 0; i < planesCount; i++)
+                    delete [] buffer.start[i];
+        }
     }
 
     x_close(this->d->m_fd);
-    this->d->m_caps.clear();
+    this->d->m_caps = {};
     this->d->m_fps = AkFrac();
     this->d->m_timeBase = AkFrac();
     this->d->m_buffers.clear();
+    this->d->m_outPacket = AkVideoPacket();
 }
 
 void CaptureV4L2::setDevice(const QString &device)
@@ -655,7 +838,7 @@ void CaptureV4L2::setStreams(const QList
     if (stream < 0)
         return;
 
-    auto supportedCaps = this->caps(this->d->m_device);
+    auto supportedCaps = this->d->m_devicesCaps.value(this->d->m_device);
 
     if (stream >= supportedCaps.length())
         return;
@@ -699,7 +882,7 @@ void CaptureV4L2::resetDevice()
 
 void CaptureV4L2::resetStreams()
 {
-    QVariantList supportedCaps = this->caps(this->d->m_device);
+    auto supportedCaps = this->d->m_devicesCaps.value(this->d->m_device);
     QList<int> streams;
 
     if (!supportedCaps.isEmpty())
@@ -743,15 +926,27 @@ CaptureV4L2Private::~CaptureV4L2Private(
     delete this->m_fsWatcher;
 }
 
-QVariantList CaptureV4L2Private::capsFps(int fd,
-                                         const struct v4l2_fmtdesc &format,
-                                         __u32 width,
-                                         __u32 height) const
-{
-    QVariantList caps;
-    auto fourcc =
-            v4l2FourccToStr->value(format.pixelformat,
-                                   this->fourccToStr(format.pixelformat));
+int CaptureV4L2Private::planesCount(const v4l2_format &format) const
+{
+    return format.type == V4L2_BUF_TYPE_VIDEO_CAPTURE?
+                1:
+                format.fmt.pix_mp.num_planes;
+}
+
+V4L2Formats CaptureV4L2Private::capsFps(int fd,
+                                        const struct v4l2_fmtdesc &format,
+                                        __u32 width,
+                                        __u32 height) const
+{
+    V4L2Formats caps;
+    AkVideoCaps::PixelFormat fmt;
+    QString fmtCompressed;
+    bool isRaw = v4l2FmtToAkFmt->contains(format.pixelformat);
+
+    if (isRaw)
+        fmt = v4l2FmtToAkFmt->value(format.pixelformat);
+    else
+        fmtCompressed = compressedFormatToStr->value(format.pixelformat);
 
 #ifdef VIDIOC_ENUM_FRAMEINTERVALS
     v4l2_frmivalenum frmival {};
@@ -775,20 +970,27 @@ QVariantList CaptureV4L2Private::capsFps
             fps = AkFrac(frmival.stepwise.min.denominator,
                          frmival.stepwise.max.numerator);
 
-        AkCaps videoCaps;
-        videoCaps.setMimeType("video/unknown");
-        videoCaps.setProperty("fourcc", fourcc);
-        videoCaps.setProperty("width", width);
-        videoCaps.setProperty("height", height);
-        videoCaps.setProperty("fps", fps.toString());
-        caps << QVariant::fromValue(videoCaps);
+        if (isRaw) {
+            AkVideoCaps videoCaps(fmt, width, height, fps);
+            caps << DeviceV4L2Format(videoCaps,
+                                     format.type,
+                                     format.pixelformat);
+        } else {
+            AkCompressedVideoCaps videoCaps(fmtCompressed,
+                                            width,
+                                            height,
+                                            fps);
+            caps << DeviceV4L2Format(videoCaps,
+                                     format.type,
+                                     format.pixelformat);
+        }
     }
 
     if (caps.isEmpty()) {
 #endif
         struct v4l2_streamparm params;
         memset(&params, 0, sizeof(v4l2_streamparm));
-        params.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+        params.type = format.type;
 
         if (x_ioctl(fd, VIDIOC_G_PARM, &params) >= 0) {
             AkFrac fps;
@@ -799,13 +1001,20 @@ QVariantList CaptureV4L2Private::capsFps
             else
                 fps = AkFrac(30, 1);
 
-            AkCaps videoCaps;
-            videoCaps.setMimeType("video/unknown");
-            videoCaps.setProperty("fourcc", fourcc);
-            videoCaps.setProperty("width", width);
-            videoCaps.setProperty("height", height);
-            videoCaps.setProperty("fps", fps.toString());
-            caps << QVariant::fromValue(videoCaps);
+            if (isRaw) {
+                AkVideoCaps videoCaps(fmt, width, height, fps);
+                caps << DeviceV4L2Format(videoCaps,
+                                         format.type,
+                                         format.pixelformat);
+            } else {
+                AkCompressedVideoCaps videoCaps(fmtCompressed,
+                                                width,
+                                                height,
+                                                fps);
+                caps << DeviceV4L2Format(videoCaps,
+                                         format.type,
+                                         format.pixelformat);
+            }
         }
 #ifdef VIDIOC_ENUM_FRAMEINTERVALS
     }
@@ -814,43 +1023,69 @@ QVariantList CaptureV4L2Private::capsFps
     return caps;
 }
 
-QVariantList CaptureV4L2Private::caps(int fd) const
+V4L2Formats CaptureV4L2Private::caps(int fd) const
 {
-    QVariantList caps;
+    V4L2Formats caps;
+    static const v4l2_buf_type bufferTypes[] = {
+        V4L2_BUF_TYPE_VIDEO_CAPTURE,
+        V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
+        v4l2_buf_type(0)
+    };
+    v4l2_fmtdesc fmtdesc;
 
 #ifdef VIDIOC_ENUM_FRAMESIZES
-    // Enumerate all supported formats.
-    v4l2_fmtdesc fmtdesc;
-    memset(&fmtdesc, 0, sizeof(v4l2_fmtdesc));
-    fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+    for (int i = 0; bufferTypes[i]; i++) {
+        // Enumerate all supported formats.
+        memset(&fmtdesc, 0, sizeof(v4l2_fmtdesc));
+        fmtdesc.type = bufferTypes[i];
+
+        for (fmtdesc.index = 0;
+             x_ioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc) >= 0;
+             fmtdesc.index++) {
+            if (v4l2FmtToAkFmt->contains(fmtdesc.pixelformat)) {
+                if (fmtdesc.type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
+                    auto specs = AkVideoCaps::formatSpecs(v4l2FmtToAkFmt->value(fmtdesc.pixelformat));
+
+                    if (specs.planes() > 1) {
+                        qDebug() << "Multiplanar format reported as single planar:"
+                                 << v4l2FmtToAkFmt->value(fmtdesc.pixelformat);
 
-    for (fmtdesc.index = 0;
-         x_ioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc) >= 0;
-         fmtdesc.index++) {
-        v4l2_frmsizeenum frmsize;
-        memset(&frmsize, 0, sizeof(v4l2_frmsizeenum));
-        frmsize.pixel_format = fmtdesc.pixelformat;
-
-        // Enumerate frame sizes.
-        for (frmsize.index = 0;
-             x_ioctl(fd, VIDIOC_ENUM_FRAMESIZES, &frmsize) >= 0;
-             frmsize.index++) {
-            if (frmsize.type == V4L2_FRMSIZE_TYPE_DISCRETE) {
-                caps << this->capsFps(fd,
-                                      fmtdesc,
-                                      frmsize.discrete.width,
-                                      frmsize.discrete.height);
-            } else {
-#if 0
-                for (uint height = frmsize.stepwise.min_height;
-                     height < frmsize.stepwise.max_height;
-                     height += frmsize.stepwise.step_height)
-                    for (uint width = frmsize.stepwise.min_width;
-                         width < frmsize.stepwise.max_width;
-                         width += frmsize.stepwise.step_width) {
-                        caps << this->capsFps(fd, fmtdesc, width, height);
+                        continue;
                     }
+                }
+            } else if (!compressedFormatToStr->contains(fmtdesc.pixelformat)) {
+                qDebug() << "Unknown pixel format:"
+                         << fmtdesc.pixelformat
+                         << "(" << fourccToStr(fmtdesc.pixelformat) << ")";
+
+                continue;
+            }
+
+            v4l2_frmsizeenum frmsize;
+            memset(&frmsize, 0, sizeof(v4l2_frmsizeenum));
+            frmsize.pixel_format = fmtdesc.pixelformat;
+
+            // Enumerate frame sizes.
+            for (frmsize.index = 0;
+                 x_ioctl(fd, VIDIOC_ENUM_FRAMESIZES, &frmsize) >= 0;
+                 frmsize.index++) {
+                if (frmsize.type == V4L2_FRMSIZE_TYPE_DISCRETE) {
+                    caps << this->capsFps(fd,
+                                          fmtdesc,
+                                          frmsize.discrete.width,
+                                          frmsize.discrete.height);
+                } else {
+#if 0
+                    for (uint height = frmsize.stepwise.min_height;
+                         height < frmsize.stepwise.max_height;
+                         height += frmsize.stepwise.step_height)
+                        for (uint width = frmsize.stepwise.min_width;
+                             width < frmsize.stepwise.max_width;
+                             width += frmsize.stepwise.step_width) {
+                            caps << this->capsFps(fd, fmtdesc, width, height);
+                        }
 #endif
+                }
             }
         }
     }
@@ -859,39 +1094,57 @@ QVariantList CaptureV4L2Private::caps(in
         return caps;
 #endif
 
-    // If VIDIOC_ENUM_FRAMESIZES failed, try reading the current resolution.
-    v4l2_format fmt;
-    memset(&fmt, 0, sizeof(v4l2_format));
-    fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-    uint width = 0;
-    uint height = 0;
+    for (int i = 0; bufferTypes[i]; i++) {
+        // If VIDIOC_ENUM_FRAMESIZES failed, try reading the current resolution.
+        v4l2_format fmt;
+        memset(&fmt, 0, sizeof(v4l2_format));
+        fmt.type = bufferTypes[i];
+        uint width = 0;
+        uint height = 0;
+
+        // Check if it has at least a default format.
+        if (x_ioctl(fd, VIDIOC_G_FMT, &fmt) >= 0) {
+            if (fmt.type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
+                width = fmt.fmt.pix.width;
+                height = fmt.fmt.pix.height;
+            } else {
+                width = fmt.fmt.pix_mp.width;
+                height = fmt.fmt.pix_mp.height;
+            }
+        }
 
-    // Check if it has at least a default format.
-    if (x_ioctl(fd, VIDIOC_G_FMT, &fmt) >= 0) {
-        width = fmt.fmt.pix.width;
-        height = fmt.fmt.pix.height;
-    }
+        if (width <= 0 || height <= 0)
+            return {};
 
-    if (width <= 0 || height <= 0)
-        return {};
+        // Enumerate all supported formats.
+        memset(&fmtdesc, 0, sizeof(v4l2_fmtdesc));
+        fmtdesc.type = bufferTypes[i];
+
+        for (fmtdesc.index = 0;
+             x_ioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc) >= 0;
+             fmtdesc.index++) {
+            if (v4l2FmtToAkFmt->contains(fmtdesc.pixelformat)) {
+                qDebug() << "Unknown pixel format:"
+                         << fmtdesc.pixelformat
+                         << "(" << fourccToStr(fmtdesc.pixelformat) << ")";
 
-    // Enumerate all supported formats.
-    memset(&fmtdesc, 0, sizeof(v4l2_fmtdesc));
-    fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-
-    for (fmtdesc.index = 0;
-         x_ioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc) >= 0;
-         fmtdesc.index++) {
-        caps << this->capsFps(fd, fmtdesc, width, height);
+                continue;
+            }
+
+            caps << this->capsFps(fd, fmtdesc, width, height);
+        }
     }
 
     return caps;
 }
 
-void CaptureV4L2Private::setFps(int fd, const AkFrac &fps)
-{
-    v4l2_streamparm streamparm {};
-    streamparm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+void CaptureV4L2Private::setFps(int fd,
+                                __u32 bufferType,
+                                const AkFrac &fps)
+{
+    v4l2_streamparm streamparm;
+    memset(&streamparm, 0, sizeof(v4l2_streamparm));
+    streamparm.type = bufferType;
 
     if (x_ioctl(fd, VIDIOC_G_PARM, &streamparm) >= 0)
         if (streamparm.parm.capture.capability & V4L2_CAP_TIMEPERFRAME) {
@@ -1075,28 +1328,45 @@ QMap<QString, quint32> CaptureV4L2Privat
     return controls;
 }
 
-bool CaptureV4L2Private::initReadWrite(quint32 bufferSize)
+bool CaptureV4L2Private::initReadWrite(const v4l2_format &format)
 {
+    int planesCount = this->planesCount(format);
     this->m_buffers.resize(1);
-    this->m_buffers[0].length = bufferSize;
-    this->m_buffers[0].start = new char[bufferSize];
+    bool error = false;
+
+    for (auto &buffer: this->m_buffers)
+        for (int i = 0; i < planesCount; i++) {
+            buffer.length[i] = format.fmt.pix.sizeimage;
+            buffer.start[i] = new char[format.fmt.pix.sizeimage];
+
+            if (!buffer.start[i]) {
+                error = true;
+
+                break;
+            }
+
+            memset(buffer.start[i], 0, buffer.length[i]);
+        }
+
+    if (error) {
+        for (auto &buffer: this->m_buffers)
+            for (int i = 0; i < planesCount; i++)
+                if (buffer.start[i])
+                    delete [] buffer.start[i];
 
-    if (!this->m_buffers[0].start) {
         this->m_buffers.clear();
 
         return false;
     }
 
-    memset(this->m_buffers[0].start, 0, bufferSize);
-
     return true;
 }
 
-bool CaptureV4L2Private::initMemoryMap()
+bool CaptureV4L2Private::initMemoryMap(const v4l2_format &format)
 {
     v4l2_requestbuffers requestBuffers;
     memset(&requestBuffers, 0, sizeof(v4l2_requestbuffers));
-    requestBuffers.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+    requestBuffers.type = format.type;
     requestBuffers.memory = V4L2_MEMORY_MMAP;
     requestBuffers.count = __u32(this->m_nBuffers);
 
@@ -1106,41 +1376,78 @@ bool CaptureV4L2Private::initMemoryMap()
     if (requestBuffers.count < 1)
         return false;
 
+    int planesCount = this->planesCount(format);
+
+    if (planesCount < 1)
+        return false;
+
     this->m_buffers.resize(int(requestBuffers.count));
     bool error = false;
 
     for (int i = 0; i < int(requestBuffers.count); i++) {
+        v4l2_plane planes[planesCount];
+        memset(planes, 0, planesCount * sizeof(v4l2_plane));
+
         v4l2_buffer buffer;
         memset(&buffer, 0, sizeof(v4l2_buffer));
-        buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+        buffer.type = format.type;
         buffer.memory = V4L2_MEMORY_MMAP;
         buffer.index = __u32(i);
 
+        if (format.type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
+            buffer.length = planesCount;
+            buffer.m.planes = planes;
+        }
+
         if (x_ioctl(this->m_fd, VIDIOC_QUERYBUF, &buffer) < 0) {
             error = true;
 
             break;
         }
 
-        this->m_buffers[i].length = buffer.length;
-        this->m_buffers[i].start =
-                reinterpret_cast<char *>(x_mmap(nullptr,
-                                                buffer.length,
-                                                PROT_READ | PROT_WRITE,
-                                                MAP_SHARED,
-                                                this->m_fd,
-                                                buffer.m.offset));
+        if (format.type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
+            this->m_buffers[i].length[0] = buffer.length;
+            this->m_buffers[i].start[0] =
+                    reinterpret_cast<char *>(x_mmap(nullptr,
+                                                    buffer.length,
+                                                    PROT_READ | PROT_WRITE,
+                                                    MAP_SHARED,
+                                                    this->m_fd,
+                                                    buffer.m.offset));
 
-        if (this->m_buffers[i].start == MAP_FAILED) {
-            error = true;
+            if (this->m_buffers[i].start == MAP_FAILED) {
+                error = true;
 
-            break;
+                break;
+            }
+        } else {
+            for (int j = 0; j < planesCount; j++) {
+                this->m_buffers[i].length[j] = buffer.m.planes[j].length;
+                this->m_buffers[i].start[j] =
+                        reinterpret_cast<char *>(x_mmap(nullptr,
+                                                        buffer.m.planes[j].length,
+                                                        PROT_READ | PROT_WRITE,
+                                                        MAP_SHARED,
+                                                        this->m_fd,
+                                                        buffer.m.planes[j].m.mem_offset));
+
+                if(this->m_buffers[i].start[j] == MAP_FAILED){
+                    error = true;
+
+                    break;
+                }
+            }
+
+            if (error)
+                break;
         }
     }
 
     if (error) {
         for (auto &buffer: this->m_buffers)
-            x_munmap(buffer.start, buffer.length);
+            for (int i = 0; i < planesCount; i++)
+                if (buffer.start[i] != MAP_FAILED)
+                    x_munmap(buffer.start[i], buffer.length[i]);
 
         this->m_buffers.clear();
 
@@ -1150,36 +1457,58 @@ bool CaptureV4L2Private::initMemoryMap()
     return true;
 }
 
-bool CaptureV4L2Private::initUserPointer(quint32 bufferSize)
+bool CaptureV4L2Private::initUserPointer(const v4l2_format &format)
 {
     v4l2_requestbuffers requestBuffers;
     memset(&requestBuffers, 0, sizeof(v4l2_requestbuffers));
-    requestBuffers.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+    requestBuffers.type = format.type;
     requestBuffers.memory = V4L2_MEMORY_USERPTR;
     requestBuffers.count = __u32(this->m_nBuffers);
 
     if (x_ioctl(this->m_fd, VIDIOC_REQBUFS, &requestBuffers) < 0)
         return false;
 
+    int planesCount = this->planesCount(format);
     this->m_buffers.resize(int(requestBuffers.count));
     bool error = false;
 
     for (int i = 0; i < int(requestBuffers.count); i++) {
-        this->m_buffers[i].length = bufferSize;
-        this->m_buffers[i].start = new char[bufferSize];
+        if (format.type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
+            this->m_buffers[i].length[0] = format.fmt.pix.sizeimage;
+            this->m_buffers[i].start[0] = new char[format.fmt.pix.sizeimage];
 
-        if (!this->m_buffers[i].start) {
-            error = true;
+            if (!this->m_buffers[i].start[0]) {
+                error = true;
 
-            break;
-        }
+                break;
+            }
+
+            memset(this->m_buffers[i].start[0], 0, format.fmt.pix.sizeimage);
+        } else {
+            for (int j = 0; j < format.fmt.pix_mp.num_planes; j++) {
+                auto imageSize = format.fmt.pix_mp.plane_fmt[i].sizeimage;
+                this->m_buffers[i].length[i] = imageSize;
+                this->m_buffers[i].start[i] = new char[imageSize];
+
+                if (!this->m_buffers[i].start[i]) {
+                    error = true;
 
-        memset(this->m_buffers[i].start, 0, bufferSize);
+                    break;
+                }
+
+                memset(this->m_buffers[i].start[i], 0, imageSize);
+            }
+
+            if (error)
+                break;
+        }
     }
 
     if (error) {
         for (auto &buffer: this->m_buffers)
-            delete [] buffer.start;
+            for (int i = 0; i < planesCount; i++)
+                if (buffer.start[i])
+                    delete [] buffer.start[i];
 
         this->m_buffers.clear();
 
@@ -1189,7 +1518,7 @@ bool CaptureV4L2Private::initUserPointer
     return true;
 }
 
-bool CaptureV4L2Private::startCapture()
+bool CaptureV4L2Private::startCapture(const v4l2_format &format)
 {
     bool error = false;
 
@@ -1197,7 +1526,7 @@ bool CaptureV4L2Private::startCapture()
         for (int i = 0; i < this->m_buffers.size(); i++) {
             v4l2_buffer buffer;
             memset(&buffer, 0, sizeof(v4l2_buffer));
-            buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+            buffer.type = format.type;
             buffer.memory = V4L2_MEMORY_MMAP;
             buffer.index = __u32(i);
 
@@ -1205,28 +1534,43 @@ bool CaptureV4L2Private::startCapture()
                 error = true;
         }
 
-        v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-
-        if (x_ioctl(this->m_fd, VIDIOC_STREAMON, &type) < 0)
+        if (x_ioctl(this->m_fd, VIDIOC_STREAMON, &format.type) < 0)
             error = true;
     } else if (this->m_ioMethod == CaptureV4L2::IoMethodUserPointer) {
-        for (int i = 0; i < this->m_buffers.size(); i++) {
-            v4l2_buffer buffer;
-            memset(&buffer, 0, sizeof(v4l2_buffer));
-            buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-            buffer.memory = V4L2_MEMORY_USERPTR;
-            buffer.index = __u32(i);
-            buffer.m.userptr = ulong(this->m_buffers[i].start);
-            buffer.length = __u32(this->m_buffers[i].length);
+        int planesCount = this->planesCount(format);
 
-            if (x_ioctl(this->m_fd, VIDIOC_QBUF, &buffer) < 0)
-                error = true;
-        }
+        if (planesCount > 0) {
+            for (int i = 0; i < this->m_buffers.size(); i++) {
+                v4l2_buffer buffer;
+                memset(&buffer, 0, sizeof(v4l2_buffer));
+                buffer.type = format.type;
+                buffer.memory = V4L2_MEMORY_USERPTR;
+                buffer.index = __u32(i);
+
+                if (this->m_v4l2Format.type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
+                    buffer.m.userptr = ulong(this->m_buffers[i].start[0]);
+                    buffer.length = __u32(this->m_buffers[i].length[0]);
+                } else {
+                    v4l2_plane planes[planesCount];
+                    memset(planes, 0, planesCount * sizeof(v4l2_plane));
+                    buffer.length = format.fmt.pix_mp.num_planes;
+                    buffer.m.planes = planes;
+
+                    for (int j = 0; j < buffer.length; j++) {
+                        planes[j].m.userptr = ulong(this->m_buffers[i].start[j]);
+                        planes[j].length = __u32(this->m_buffers[i].length[j]);
+                    }
+                }
 
-        v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+                if (x_ioctl(this->m_fd, VIDIOC_QBUF, &buffer) < 0)
+                    error = true;
+            }
 
-        if (x_ioctl(this->m_fd, VIDIOC_STREAMON, &type) < 0)
+            if (x_ioctl(this->m_fd, VIDIOC_STREAMON, &format.type) < 0)
+                error = true;
+        } else {
             error = true;
+        }
     }
 
     if (error)
@@ -1237,12 +1581,11 @@ bool CaptureV4L2Private::startCapture()
     return !error;
 }
 
-void CaptureV4L2Private::stopCapture()
+void CaptureV4L2Private::stopCapture(const v4l2_format &format)
 {
     if (this->m_ioMethod == CaptureV4L2::IoMethodMemoryMap
         || this->m_ioMethod == CaptureV4L2::IoMethodUserPointer) {
-        v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-        x_ioctl(this->m_fd, VIDIOC_STREAMOFF, &type);
+        x_ioctl(this->m_fd, VIDIOC_STREAMOFF, &format.type);
     }
 }
 
@@ -1255,26 +1598,53 @@ QString CaptureV4L2Private::fourccToStr(
     return QString(fourcc);
 }
 
-quint32 CaptureV4L2Private::strToFourCC(const QString &format) const
-{
-    quint32 fourcc;
-    memcpy(&fourcc, format.toStdString().c_str(), sizeof(quint32));
-
-    return fourcc;
-}
-
-AkPacket CaptureV4L2Private::processFrame(const char *buffer,
-                                          size_t bufferSize,
-                                          qint64 pts) const
-{
-    AkPacket oPacket(this->m_caps);
-    oPacket.setBuffer({buffer, int(bufferSize)});
-    oPacket.setPts(pts);
-    oPacket.setTimeBase(this->m_timeBase);
-    oPacket.setIndex(0);
-    oPacket.setId(this->m_id);
+AkPacket CaptureV4L2Private::processFrame(const char * const *planeData,
+                                          const ssize_t *planeSize,
+                                          qint64 pts)
+{
+    if (this->m_caps.type() == AkCaps::CapsVideoCompressed) {
+        AkCompressedVideoPacket oPacket(this->m_caps, planeSize[0]);
+        memcpy(oPacket.data(), planeData[0], planeSize[0]);
+        oPacket.setPts(pts);
+        oPacket.setTimeBase(this->m_timeBase);
+        oPacket.setIndex(0);
+        oPacket.setId(this->m_id);
+
+        return oPacket;
+    }
+
+    if (this->m_outPacket) {
+        this->m_outPacket.setPts(pts);
+
+        if (this->m_v4l2Format.type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
+            auto iData = planeData[0];
+            auto iLineSize = this->m_v4l2Format.fmt.pix.bytesperline;
+            auto oLineSize = this->m_outPacket.lineSize(0);
+            auto lineSize = qMin<size_t>(iLineSize, oLineSize);
+
+            for (int y = 0; y < this->m_v4l2Format.fmt.pix.height; ++y)
+                memcpy(this->m_outPacket.line(0, y),
+                       iData + y * iLineSize,
+                       lineSize);
+        } else {
+            for (int plane = 0; plane < this->planesCount(this->m_v4l2Format); ++plane) {
+                auto iData = planeData[plane];
+                auto iLineSize = this->m_v4l2Format.fmt.pix_mp.plane_fmt[plane].bytesperline;
+                auto oLineSize = this->m_outPacket.lineSize(plane);
+                auto lineSize = qMin<size_t>(iLineSize, oLineSize);
+                auto heightDiv = this->m_outPacket.heightDiv(plane);
+
+                for (int y = 0; y < this->m_v4l2Format.fmt.pix_mp.height; ++y) {
+                    int ys = y >> heightDiv;
+                    memcpy(this->m_outPacket.line(plane, y),
+                           iData + ys * iLineSize,
+                           lineSize);
+                }
+            }
+        }
+    }
 
-    return oPacket;
+    return this->m_outPacket;
 }
 
 QVariantList CaptureV4L2Private::imageControls(int fd) const
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/v4l2sys/src/capturev4l2.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/v4l2sys/src/capturev4l2.h
@@ -40,38 +40,37 @@ class CaptureV4L2: public Capture
         CaptureV4L2(QObject *parent=nullptr);
         ~CaptureV4L2();
 
-        Q_INVOKABLE QStringList webcams() const;
-        Q_INVOKABLE QString device() const;
-        Q_INVOKABLE QList<int> streams();
-        Q_INVOKABLE QList<int> listTracks(const QString &mimeType);
-        Q_INVOKABLE QString ioMethod() const;
-        Q_INVOKABLE int nBuffers() const;
-        Q_INVOKABLE QString description(const QString &webcam) const;
-        Q_INVOKABLE QVariantList caps(const QString &webcam) const;
-        Q_INVOKABLE QString capsDescription(const AkCaps &caps) const;
-        Q_INVOKABLE QVariantList imageControls() const;
-        Q_INVOKABLE bool setImageControls(const QVariantMap &imageControls);
-        Q_INVOKABLE bool resetImageControls();
-        Q_INVOKABLE QVariantList cameraControls() const;
-        Q_INVOKABLE bool setCameraControls(const QVariantMap &cameraControls);
-        Q_INVOKABLE bool resetCameraControls();
-        Q_INVOKABLE AkPacket readFrame();
+        Q_INVOKABLE QStringList webcams() const override;
+        Q_INVOKABLE QString device() const override;
+        Q_INVOKABLE QList<int> streams() override;
+        Q_INVOKABLE QList<int> listTracks(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString ioMethod() const override;
+        Q_INVOKABLE int nBuffers() const override;
+        Q_INVOKABLE QString description(const QString &webcam) const override;
+        Q_INVOKABLE CaptureVideoCaps caps(const QString &webcam) const override;
+        Q_INVOKABLE QVariantList imageControls() const override;
+        Q_INVOKABLE bool setImageControls(const QVariantMap &imageControls) override;
+        Q_INVOKABLE bool resetImageControls() override;
+        Q_INVOKABLE QVariantList cameraControls() const override;
+        Q_INVOKABLE bool setCameraControls(const QVariantMap &cameraControls) override;
+        Q_INVOKABLE bool resetCameraControls() override;
+        Q_INVOKABLE AkPacket readFrame() override;
 
     private:
         CaptureV4L2Private *d;
 
     public slots:
-        bool init();
-        void uninit();
-        void setDevice(const QString &device);
-        void setStreams(const QList<int> &streams);
-        void setIoMethod(const QString &ioMethod);
-        void setNBuffers(int nBuffers);
-        void resetDevice();
-        void resetStreams();
-        void resetIoMethod();
-        void resetNBuffers();
-        void reset();
+        bool init() override;
+        void uninit() override;
+        void setDevice(const QString &device) override;
+        void setStreams(const QList<int> &streams) override;
+        void setIoMethod(const QString &ioMethod) override;
+        void setNBuffers(int nBuffers) override;
+        void resetDevice() override;
+        void resetStreams() override;
+        void resetIoMethod() override;
+        void resetNBuffers() override;
+        void reset() override;
 };
 
 #endif // CAPTUREV4L2_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/capture/v4lutils/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/capture/v4lutils/CMakeLists.txt
@@ -42,7 +42,6 @@ CHECK_INCLUDE_FILE_CXX(linux/videodev2.h
 set(SOURCES
     ../../capture.cpp
     ../../capture.h
-    ../v4l2sys/src/capturebuffer.h
     ../v4l2sys/src/capturev4l2.cpp
     ../v4l2sys/src/capturev4l2.h
     ../v4l2sys/src/plugin.cpp
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/convert/ffmpeg/src/convertvideoffmpeg.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/convert/ffmpeg/src/convertvideoffmpeg.cpp
@@ -26,6 +26,7 @@
 #include <akcaps.h>
 #include <akvideocaps.h>
 #include <akpacket.h>
+#include <akcompressedvideocaps.h>
 #include <akvideopacket.h>
 
 extern "C"
@@ -54,105 +55,30 @@ extern "C"
 // no AV correction is done if too big error
 #define AV_NOSYNC_THRESHOLD 10.0
 
-using ImgFmtMap = QMap<QString, AVPixelFormat>;
+using FFCodecMap = QMap<AVCodecID, QString>;
 
-inline ImgFmtMap initImgFmtMap()
+inline FFCodecMap initCompressedFFToStr()
 {
-    ImgFmtMap rawToFF = {
-        // RGB formats
-        {"RGB332"  , AV_PIX_FMT_RGB8    },
-        {"RGB444"  , AV_PIX_FMT_RGB444LE},
-        {"RGB555"  , AV_PIX_FMT_RGB555LE},
-        {"RGB565"  , AV_PIX_FMT_RGB565LE},
-        {"RGB555BE", AV_PIX_FMT_RGB555BE},
-        {"RGB565BE", AV_PIX_FMT_RGB565BE},
-        {"BGR"     , AV_PIX_FMT_BGR24   },
-        {"RGB"     , AV_PIX_FMT_RGB24   },
-        {"BGR0"    , AV_PIX_FMT_BGR0    },
-        {"BGRA"    , AV_PIX_FMT_BGRA    },
-        {"BGRX"    , AV_PIX_FMT_RGB0    },
-        {"RGBX"    , AV_PIX_FMT_0RGB    },
-        {"ARGB"    , AV_PIX_FMT_ARGB    },
-        {"ABGR"    , AV_PIX_FMT_ABGR    },
-        {"RGBA"    , AV_PIX_FMT_RGBA    },
-
-        // Grey formats
-        {"Y800"  , AV_PIX_FMT_GRAY8    },
-        {"GRAY8" , AV_PIX_FMT_GRAY8    },
-        {"GRAY16", AV_PIX_FMT_GRAY16LE },
-        {"B1W0"  , AV_PIX_FMT_MONOWHITE},
-        {"B0W1"  , AV_PIX_FMT_MONOBLACK},
-
-        // Palette formats
-        {"PAL8", AV_PIX_FMT_PAL8},
-
-        // Luminance+Chrominance formats
-        {"YVU9", AV_PIX_FMT_YUV410P},
-        {"YV12", AV_PIX_FMT_YUV420P},
-        {"I420", AV_PIX_FMT_YUV420P},
-        {"YUYV", AV_PIX_FMT_YUYV422},
-        {"YYUV", AV_PIX_FMT_YUV422P},
-        {"Y42B", AV_PIX_FMT_YUV422P},
-        {"UYVY", AV_PIX_FMT_UYVY422},
-        {"VYUY", AV_PIX_FMT_YUV422P},
-        {"422P", AV_PIX_FMT_YUV422P},
-        {"411P", AV_PIX_FMT_YUV411P},
-        {"Y41P", AV_PIX_FMT_YUV411P},
-        {"YUY2", AV_PIX_FMT_YUYV422},
-        {"Y444", AV_PIX_FMT_YUV444P},
-        {"444P", AV_PIX_FMT_YUV444P},
-        {"YUV9", AV_PIX_FMT_YUV410P},
-        {"YU12", AV_PIX_FMT_YUV420P},
-
-        // two planes -- one Y, one Cr + Cb interleaved
-        {"NV12", AV_PIX_FMT_NV12},
-        {"NV21", AV_PIX_FMT_NV21},
-        {"NV16", AV_PIX_FMT_NV16},
-
-        // Bayer formats
-        {"SBGGR8", AV_PIX_FMT_BAYER_BGGR8},
-        {"SGBRG8", AV_PIX_FMT_BAYER_GBRG8},
-        {"SGRBG8", AV_PIX_FMT_BAYER_GRBG8},
-        {"SRGGB8", AV_PIX_FMT_BAYER_RGGB8},
-
-        // 10bit raw bayer, expanded to 16 bits
-        {"SBGGR16", AV_PIX_FMT_BAYER_BGGR16LE}
-    };
-
-    return rawToFF;
-}
-
-Q_GLOBAL_STATIC_WITH_ARGS(ImgFmtMap, rawToFF, (initImgFmtMap()))
-
-using V4l2CodecMap = QMap<QString, AVCodecID>;
-
-inline V4l2CodecMap initCompressedMap()
-{
-    V4l2CodecMap compressedToFF = {
-        // compressed formats
-        {"MJPG", AV_CODEC_ID_MJPEG     },
-        {"JPEG", AV_CODEC_ID_MJPEG     },
-        {"dvsd", AV_CODEC_ID_DVVIDEO   },
-        {"H264", AV_CODEC_ID_H264      },
-        {"AVC1", AV_CODEC_ID_H264      },
-        {"M264", AV_CODEC_ID_H264      },
-        {"H263", AV_CODEC_ID_H263      },
-        {"MPG1", AV_CODEC_ID_MPEG1VIDEO},
-        {"MPG2", AV_CODEC_ID_MPEG2VIDEO},
-        {"MPG4", AV_CODEC_ID_MPEG4     },
-        {"XVID", AV_CODEC_ID_MPEG4     },
-        {"VC1G", AV_CODEC_ID_VC1       },
-        {"VC1L", AV_CODEC_ID_VC1       },
-        {"VP80", AV_CODEC_ID_VP8       },
-
-        //  Vendor-specific formats
-        {"CPIA", AV_CODEC_ID_CPIA}
+    FFCodecMap compressedToFF {
+        {AV_CODEC_ID_DVVIDEO   , "dvsd" },
+        {AV_CODEC_ID_H263      , "h263" },
+        {AV_CODEC_ID_H264      , "h264" },
+        {AV_CODEC_ID_HEVC      , "hevc" },
+        {AV_CODEC_ID_MJPEG     , "jpeg" },
+        {AV_CODEC_ID_MJPEG     , "mjpg" },
+        {AV_CODEC_ID_MPEG2VIDEO, "mpeg1"},
+        {AV_CODEC_ID_MPEG1VIDEO, "mpeg2"},
+        {AV_CODEC_ID_MPEG4     , "mpeg4"},
+        {AV_CODEC_ID_VC1       , "vc1"  },
+        {AV_CODEC_ID_VP8       , "vp8"  },
+        {AV_CODEC_ID_VP8       , "vp9"  },
+        {AV_CODEC_ID_MPEG4     , "xvid" },
     };
 
     return compressedToFF;
 }
 
-Q_GLOBAL_STATIC_WITH_ARGS(V4l2CodecMap, compressedToFF, (initCompressedMap()))
+Q_GLOBAL_STATIC_WITH_ARGS(FFCodecMap, compressedFFToStr, (initCompressedFFToStr()))
 
 using FramePtr = QSharedPointer<AVFrame>;
 
@@ -185,18 +111,15 @@ class ConvertVideoFFmpegPrivate
         bool m_runPacketLoop {false};
         bool m_runDataLoop {false};
 
-        explicit ConvertVideoFFmpegPrivate(ConvertVideoFFmpeg *self):
-            self(self)
-        {
-        }
-
+        explicit ConvertVideoFFmpegPrivate(ConvertVideoFFmpeg *self);
+        inline AVPixelFormat defaultPixelFormat(const AVCodec *codec) const;
         static void packetLoop(ConvertVideoFFmpeg *stream);
         static void dataLoop(ConvertVideoFFmpeg *stream);
         static void deleteFrame(AVFrame *frame);
         void processData(const FramePtr &frame);
-        void convert(const FramePtr &frame);
-        void convert(const AVFrame *frame);
         void log(qreal diff);
+        AkVideoPacket convert(const FramePtr &frame);
+        AkVideoPacket convert(const AVFrame *frame);
         AVFrame *copyFrame(AVFrame *frame) const;
 };
 
@@ -237,7 +160,7 @@ void ConvertVideoFFmpeg::packetEnqueue(c
         this->d->m_packetQueueNotFull.wait(&this->d->m_packetMutex);
 
     this->d->m_packets.enqueue(packet);
-    this->d->m_packetQueueSize += packet.buffer().size();
+    this->d->m_packetQueueSize += packet.size();
     this->d->m_packetQueueNotEmpty.wakeAll();
     this->d->m_packetMutex.unlock();
 }
@@ -257,21 +180,30 @@ void ConvertVideoFFmpeg::dataEnqueue(AVF
 
 bool ConvertVideoFFmpeg::init(const AkCaps &caps)
 {
-    QString fourcc = caps.property("fourcc").toString();
+    AkCompressedVideoCaps videoCaps(caps);
+    auto format = videoCaps.format();
+
+    if (!compressedFFToStr->values().contains(format)) {
+        qDebug() << "Compressed format not supported:" << format;
 
-    if (!rawToFF->contains(fourcc)
-        && !compressedToFF->contains(fourcc))
         return false;
+    }
 
-    auto codec = avcodec_find_decoder(compressedToFF->value(fourcc, AV_CODEC_ID_RAWVIDEO));
+    auto codec = avcodec_find_decoder(compressedFFToStr->key(format, AV_CODEC_ID_NONE));
+
+    if (!codec) {
+        qDebug() << "Decoder not found for" << format;
 
-    if (!codec)
         return false;
+    }
 
     this->d->m_codecContext = avcodec_alloc_context3(codec);
 
-    if (!this->d->m_codecContext)
+    if (!this->d->m_codecContext) {
+        qDebug() << "Codec context not allocated for" << codec->name;
+
         return false;
+    }
 
     if (codec->capabilities & AV_CODEC_CAP_TRUNCATED)
         this->d->m_codecContext->flags |= AV_CODEC_FLAG_TRUNCATED;
@@ -281,22 +213,31 @@ bool ConvertVideoFFmpeg::init(const AkCa
         this->d->m_codecContext->flags |= CODEC_FLAG_EMU_EDGE;
 #endif
 
-    this->d->m_codecContext->pix_fmt = rawToFF->value(fourcc, AV_PIX_FMT_NONE);
-    this->d->m_codecContext->width = caps.property("width").toInt();
-    this->d->m_codecContext->height = caps.property("height").toInt();
-    this->d->m_fps = caps.property("fps").toString();
+    this->d->m_codecContext->pix_fmt = this->d->defaultPixelFormat(codec);
+    this->d->m_codecContext->width = videoCaps.width();
+    this->d->m_codecContext->height = videoCaps.height();
+    this->d->m_fps = videoCaps.fps();
     this->d->m_codecContext->framerate.num = int(this->d->m_fps.num());
     this->d->m_codecContext->framerate.den = int(this->d->m_fps.den());
     this->d->m_codecContext->workaround_bugs = 1;
     this->d->m_codecContext->idct_algo = FF_IDCT_AUTO;
     this->d->m_codecContext->error_concealment = FF_EC_GUESS_MVS | FF_EC_DEBLOCK;
 
+#if LIBAVUTIL_VERSION_INT < AV_VERSION_INT(57, 10, 100)
+    this->d->m_codecContext->time_base.num = int(this->d->m_fps.den());
+    this->d->m_codecContext->time_base.den = int(this->d->m_fps.num());
+#endif
+
     this->d->m_codecOptions = nullptr;
     av_dict_set(&this->d->m_codecOptions, "refcounted_frames", "0", 0);
-
-    if (avcodec_open2(this->d->m_codecContext,
-                      codec,
-                      &this->d->m_codecOptions) < 0) {
+    int result = avcodec_open2(this->d->m_codecContext,
+                               codec,
+                               &this->d->m_codecOptions);
+
+    if (result < 0) {
+        char error[1024];
+        av_strerror(result, error, 1024);
+        qDebug() << "Error: " << error;
         avcodec_free_context(&this->d->m_codecContext);
 
         return false;
@@ -345,6 +286,47 @@ void ConvertVideoFFmpeg::uninit()
         avcodec_free_context(&this->d->m_codecContext);
 }
 
+void ConvertVideoFFmpeg::setMaxPacketQueueSize(qint64 maxPacketQueueSize)
+{
+    if (this->d->m_maxPacketQueueSize == maxPacketQueueSize)
+        return;
+
+    this->d->m_maxPacketQueueSize = maxPacketQueueSize;
+    emit this->maxPacketQueueSizeChanged(maxPacketQueueSize);
+}
+
+void ConvertVideoFFmpeg::setShowLog(bool showLog)
+{
+    if (this->d->m_showLog == showLog)
+        return;
+
+    this->d->m_showLog = showLog;
+    emit this->showLogChanged(showLog);
+}
+
+void ConvertVideoFFmpeg::resetMaxPacketQueueSize()
+{
+    this->setMaxPacketQueueSize(15 * 1024 * 1024);
+}
+
+void ConvertVideoFFmpeg::resetShowLog()
+{
+    this->setShowLog(false);
+}
+
+ConvertVideoFFmpegPrivate::ConvertVideoFFmpegPrivate(ConvertVideoFFmpeg *self):
+    self(self)
+{
+}
+
+AVPixelFormat ConvertVideoFFmpegPrivate::defaultPixelFormat(const AVCodec *codec) const
+{
+    if (codec->pix_fmts)
+        return codec->pix_fmts[0];
+
+    return AV_PIX_FMT_NONE;
+}
+
 void ConvertVideoFFmpegPrivate::packetLoop(ConvertVideoFFmpeg *stream)
 {
     while (stream->d->m_runPacketLoop) {
@@ -358,8 +340,8 @@ void ConvertVideoFFmpegPrivate::packetLo
             AkPacket packet = stream->d->m_packets.dequeue();
 
             auto videoPacket = av_packet_alloc();
-            videoPacket->data = reinterpret_cast<uint8_t *>(packet.buffer().data());
-            videoPacket->size = packet.buffer().size();
+            videoPacket->data = reinterpret_cast<uint8_t *>(packet.data());
+            videoPacket->size = packet.size();
             videoPacket->pts = packet.pts();
 
             if (avcodec_send_packet(stream->d->m_codecContext, videoPacket) >= 0)
@@ -368,7 +350,26 @@ void ConvertVideoFFmpegPrivate::packetLo
                     int r = avcodec_receive_frame(stream->d->m_codecContext, iFrame);
 
                     if (r >= 0) {
+                        AVRational timeBase;
+
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 10, 100)
+                        if (iFrame->time_base.num < 1
+                            || iFrame->time_base.den < 1) {
+                            iFrame->time_base.num = stream->d->m_fps.den();
+                            iFrame->time_base.den = stream->d->m_fps.num();
+                        }
+
+                        memcpy(&timeBase, &iFrame->time_base, sizeof(AVRational));
+#else
+                        memcpy(&timeBase, &stream->d->m_codecContext->time_base, sizeof(AVRational));
+#endif
+
                         iFrame->pts = iFrame->best_effort_timestamp;
+
+                        if (iFrame->pts < 1)
+                            iFrame->pts = qRound64(QTime::currentTime().msecsSinceStartOfDay()
+                                                   * timeBase.den / (1e3 * timeBase.num));
+
                         stream->dataEnqueue(stream->d->copyFrame(iFrame));
                     }
 
@@ -379,7 +380,7 @@ void ConvertVideoFFmpegPrivate::packetLo
                 }
 
             av_packet_free(&videoPacket);
-            stream->d->m_packetQueueSize -= packet.buffer().size();
+            stream->d->m_packetQueueSize -= packet.size();
 
             if (stream->d->m_packetQueueSize < stream->d->m_maxPacketQueueSize)
                 stream->d->m_packetQueueNotFull.wakeAll();
@@ -421,8 +422,15 @@ void ConvertVideoFFmpegPrivate::deleteFr
 void ConvertVideoFFmpegPrivate::processData(const FramePtr &frame)
 {
     forever {
-        AkFrac timeBase = this->m_fps.invert();
-        qreal pts = frame->pts * timeBase.value();
+        AVRational timeBase;
+
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 10, 100)
+        memcpy(&timeBase, &frame->time_base, sizeof(AVRational));
+#else
+        memcpy(&timeBase, &this->m_codecContext->time_base, sizeof(AVRational));
+#endif
+
+        qreal pts = qreal(frame->pts) * timeBase.num / timeBase.den;
         qreal diff = pts - this->m_globalClock.clock();
         qreal delay = pts - this->m_lastPts;
 
@@ -453,22 +461,39 @@ void ConvertVideoFFmpegPrivate::processD
             this->m_globalClock.setClock(pts);
         }
 
-        this->convert(frame);
+        auto oPacket = this->convert(frame);
+
         this->log(diff);
         this->m_lastPts = pts;
 
+        if (oPacket)
+            emit self->frameReady(oPacket);
+
         break;
     }
 }
 
-void ConvertVideoFFmpegPrivate::convert(const FramePtr &frame)
+void ConvertVideoFFmpegPrivate::log(qreal diff)
+{
+    if (!this->m_showLog)
+        return;
+
+    QString logFmt("%1 %2: %3 vq=%5KB");
+    QString log = logFmt.arg(this->m_globalClock.clock(), 7, 'f', 2)
+                        .arg("M-V")
+                        .arg(-diff, 7, 'f', 3)
+                        .arg(this->m_packetQueueSize / 1024, 5);
+    qDebug() << log.toStdString().c_str();
+}
+
+AkVideoPacket ConvertVideoFFmpegPrivate::convert(const FramePtr &frame)
 {
-    this->convert(frame.data());
+    return this->convert(frame.data());
 }
 
-void ConvertVideoFFmpegPrivate::convert(const AVFrame *frame)
+AkVideoPacket ConvertVideoFFmpegPrivate::convert(const AVFrame *frame)
 {
-    AVPixelFormat outPixFormat = AV_PIX_FMT_RGB24;
+    static const AVPixelFormat outPixFormat = AV_PIX_FMT_RGB24;
 
     // Initialize rescaling context.
     this->m_scaleContext = sws_getCachedContext(this->m_scaleContext,
@@ -484,29 +509,19 @@ void ConvertVideoFFmpegPrivate::convert(
                                                 nullptr);
 
     if (!this->m_scaleContext)
-        return;
+        return {};
 
     // Create oPicture
     AVFrame oFrame;
     memset(&oFrame, 0, sizeof(AVFrame));
 
-    int frameSize = av_image_get_buffer_size(outPixFormat,
-                                             frame->width,
-                                             frame->height,
-                                             1);
-
-    if (frameSize < 1)
-        return;
-
-    QByteArray oBuffer(frameSize, Qt::Uninitialized);
-
     if (av_image_alloc(oFrame.data,
-                   oFrame.linesize,
-                   frame->width,
-                   frame->height,
-                   outPixFormat,
-                   1) < 1)
-        return;
+                       oFrame.linesize,
+                       frame->width,
+                       frame->height,
+                       outPixFormat,
+                       1) < 1)
+        return {};
 
     // Convert picture format
     sws_scale(this->m_scaleContext,
@@ -516,37 +531,44 @@ void ConvertVideoFFmpegPrivate::convert(
               frame->height,
               oFrame.data,
               oFrame.linesize);
-    memcpy(oBuffer.data(), oFrame.data[0], frameSize);
-    av_freep(&oFrame.data[0]);
 
     // Create packet
-    AkVideoPacket oPacket;
-    oPacket.caps() = {AkVideoCaps::Format_rgb24,
+    auto nPlanes = av_pix_fmt_count_planes(AVPixelFormat(frame->format));
+    AkVideoCaps caps(AkVideoCaps::Format_rgb24,
                      frame->width,
                      frame->height,
-                     this->m_fps};
-    oPacket.buffer() = oBuffer;
-    oPacket.id() = this->m_id;
-    oPacket.pts() = frame->pts;
-    oPacket.timeBase() = this->m_fps.invert();
-    oPacket.index() = 0;
+                     this->m_fps);
+    AkVideoPacket oPacket(caps);
 
-    emit self->frameReady(oPacket);
-}
+    for (int plane = 0; plane < nPlanes; ++plane) {
+        auto planeData = oFrame.data[plane];
+        auto oLineSize = oFrame.linesize[plane];
+        auto lineSize = qMin<size_t>(oPacket.lineSize(plane), oLineSize);
+        auto heightDiv = oPacket.heightDiv(plane);
+
+        for (int y = 0; y < frame->height; ++y) {
+            auto ys = y >> heightDiv;
+            memcpy(oPacket.line(plane, y),
+                   planeData + ys * oLineSize,
+                   lineSize);
+        }
+    }
 
-void ConvertVideoFFmpegPrivate::log(qreal diff)
-{
-    if (!this->m_showLog)
-        return;
+    AVRational timeBase;
 
-    QString logFmt("%1 %2: %3 vq=%5KB");
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 10, 100)
+    memcpy(&timeBase, &frame->time_base, sizeof(AVRational));
+#else
+    memcpy(&timeBase, &this->m_codecContext->time_base, sizeof(AVRational));
+#endif
 
-    QString log = logFmt.arg(this->m_globalClock.clock(), 7, 'f', 2)
-                        .arg("M-V")
-                        .arg(-diff, 7, 'f', 3)
-                        .arg(this->m_packetQueueSize / 1024, 5);
+    oPacket.setId(this->m_id);
+    oPacket.setPts(frame->pts);
+    oPacket.setTimeBase({timeBase.num, timeBase.den});
+    oPacket.setIndex(0);
+    av_freep(&oFrame.data[0]);
 
-    qDebug() << log.toStdString().c_str();
+    return oPacket;
 }
 
 AVFrame *ConvertVideoFFmpegPrivate::copyFrame(AVFrame *frame) const
@@ -556,7 +578,6 @@ AVFrame *ConvertVideoFFmpegPrivate::copy
     oFrame->height = frame->height;
     oFrame->format = frame->format;
     oFrame->pts = frame->pts;
-
     av_image_alloc(oFrame->data,
                    oFrame->linesize,
                    oFrame->width,
@@ -569,32 +590,4 @@ AVFrame *ConvertVideoFFmpegPrivate::copy
     return oFrame;
 }
 
-void ConvertVideoFFmpeg::setMaxPacketQueueSize(qint64 maxPacketQueueSize)
-{
-    if (this->d->m_maxPacketQueueSize == maxPacketQueueSize)
-        return;
-
-    this->d->m_maxPacketQueueSize = maxPacketQueueSize;
-    emit this->maxPacketQueueSizeChanged(maxPacketQueueSize);
-}
-
-void ConvertVideoFFmpeg::setShowLog(bool showLog)
-{
-    if (this->d->m_showLog == showLog)
-        return;
-
-    this->d->m_showLog = showLog;
-    emit this->showLogChanged(showLog);
-}
-
-void ConvertVideoFFmpeg::resetMaxPacketQueueSize()
-{
-    this->setMaxPacketQueueSize(15 * 1024 * 1024);
-}
-
-void ConvertVideoFFmpeg::resetShowLog()
-{
-    this->setShowLog(false);
-}
-
 #include "moc_convertvideoffmpeg.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/convert/ffmpeg/src/convertvideoffmpeg.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/convert/ffmpeg/src/convertvideoffmpeg.h
@@ -45,11 +45,10 @@ class ConvertVideoFFmpeg: public Convert
 
         Q_INVOKABLE qint64 maxPacketQueueSize() const;
         Q_INVOKABLE bool showLog() const;
-
-        Q_INVOKABLE void packetEnqueue(const AkPacket &packet);
+        Q_INVOKABLE void packetEnqueue(const AkPacket &packet) override;
         Q_INVOKABLE void dataEnqueue(AVFrame *frame);
-        Q_INVOKABLE bool init(const AkCaps &caps);
-        Q_INVOKABLE void uninit();
+        Q_INVOKABLE bool init(const AkCaps &caps) override;
+        Q_INVOKABLE void uninit() override;
 
     private:
         ConvertVideoFFmpegPrivate *d;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/convert/generic/CMakeLists.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-# Webcamoid, webcam capture application.
-# Copyright (C) 2021  Gonzalo Exequiel Pedone
-#
-# Webcamoid is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Webcamoid is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
-#
-# Web-Site: http://webcamoid.github.io/
-
-cmake_minimum_required(VERSION 3.16)
-
-project(VideoCapture_generic LANGUAGES CXX)
-
-include(../../../../../cmake/ProjectCommons.cmake)
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-set(CMAKE_AUTOUIC ON)
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_AUTORCC ON)
-
-set(QT_COMPONENTS
-    Gui)
-find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS
-             ${QT_COMPONENTS}
-             REQUIRED)
-find_package(Qt${QT_VERSION_MAJOR} ${QT_MINIMUM_VERSION} COMPONENTS
-             ${QT_COMPONENTS}
-             REQUIRED)
-add_library(VideoCapture_generic SHARED
-            ../../convertvideo.cpp
-            ../../convertvideo.h
-            src/convertvideogeneric.cpp
-            src/convertvideogeneric.h
-            src/plugin.cpp
-            src/plugin.h
-            pspec.json)
-
-if (WIN32)
-    set_target_properties(VideoCapture_generic PROPERTIES
-                          RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
-elseif (NOT ANDROID)
-    set_target_properties(VideoCapture_generic PROPERTIES
-                          LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
-endif ()
-
-add_dependencies(VideoCapture_generic avkys)
-target_include_directories(VideoCapture_generic PRIVATE
-                           ../..
-                           ../../../../../Lib/src)
-target_compile_definitions(VideoCapture_generic PRIVATE AVKYS_PLUGIN_VIDEOCAPTURE_GENERIC)
-list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
-target_link_libraries(VideoCapture_generic avkys ${QT_LIBS})
-
-if (WIN32)
-    install(TARGETS VideoCapture_generic RUNTIME DESTINATION ${PLUGINSDIR})
-elseif (NOT ANDROID)
-    install(TARGETS VideoCapture_generic DESTINATION ${PLUGINSDIR})
-endif ()
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/convert/generic/pspec.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-    "type": "WebcamoidPluginsCollection",
-    "plugins": [
-        {
-            "name": "Generic converter",
-            "description": "Convert video frames using generic converter",
-            "id": "VideoSource/CameraCapture/Convert/Generic",
-            "implements": ["CameraCaptureConvert"],
-            "priority": 800,
-            "type": "qtplugin"
-        }
-    ]
-}
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/convert/generic/src/convertvideogeneric.cpp
+++ /dev/null
@@ -1,112 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2019  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include <QImage>
-#include <QVariant>
-#include <ak.h>
-#include <akfrac.h>
-#include <akcaps.h>
-#include <akvideocaps.h>
-#include <akpacket.h>
-#include <akvideopacket.h>
-
-#include "convertvideogeneric.h"
-
-using ImgFmtMap = QMap<QString, AkVideoCaps::PixelFormat>;
-
-inline ImgFmtMap initImgFmtMap()
-{
-    ImgFmtMap rawToFF = {
-        {"B0W1"       , AkVideoCaps::Format_monob   },
-        {"XRGB"       , AkVideoCaps::Format_0rgb    },
-        {"ARGB"       , AkVideoCaps::Format_argb    },
-        {"RGBA"       , AkVideoCaps::Format_rgba    },
-        {"RGBX"       , AkVideoCaps::Format_rgb0    },
-        {"RGB565"     , AkVideoCaps::Format_rgb565le},
-        {"RGB555"     , AkVideoCaps::Format_rgb555le},
-        {"RGB"        , AkVideoCaps::Format_rgb24   },
-        {"RGB444"     , AkVideoCaps::Format_rgb444le},
-        {"BGR"        , AkVideoCaps::Format_bgr24   },
-        {"GRAY8"      , AkVideoCaps::Format_gray    },
-        {"NV16"       , AkVideoCaps::Format_nv16    },
-        {"NV21"       , AkVideoCaps::Format_nv21    },
-        {"YUY2"       , AkVideoCaps::Format_yuyv422 },
-        {"YUYV"       , AkVideoCaps::Format_yuyv422 },
-        {"YV12"       , AkVideoCaps::Format_yuv420p },
-        {"Y422"       , AkVideoCaps::Format_yuv422p },
-        {"YU12"       , AkVideoCaps::Format_yuv420p },
-        {"I420"       , AkVideoCaps::Format_yuv420p },
-        {"YUV420P_888", AkVideoCaps::Format_yuv420p }
-    };
-
-    return rawToFF;
-}
-
-Q_GLOBAL_STATIC_WITH_ARGS(ImgFmtMap, fourccToFormat, (initImgFmtMap()))
-
-ConvertVideoGeneric::ConvertVideoGeneric(QObject *parent):
-    ConvertVideo(parent)
-{
-}
-
-ConvertVideoGeneric::~ConvertVideoGeneric()
-{
-}
-
-void ConvertVideoGeneric::packetEnqueue(const AkPacket &packet)
-{
-    auto fourcc = packet.caps().property("fourcc").toString();
-    AkVideoPacket videoPacket(packet);
-
-    if (fourcc == "JPEG") {
-        videoPacket =
-                AkVideoPacket::fromImage(QImage::fromData(packet.buffer()),
-                                         packet);
-    } else {
-        AkVideoCaps caps(fourccToFormat->value(fourcc,
-                                               AkVideoCaps::Format_none),
-                         packet.caps().property("width").toInt(),
-                         packet.caps().property("height").toInt(),
-                         packet.caps().property("fps").toString());
-
-        if (packet.caps().contains("align"))
-            caps.setAlign(packet.caps().property("align").toInt());
-
-        videoPacket.caps() = caps;
-        videoPacket.buffer() = packet.buffer();
-        videoPacket.copyMetadata(packet);
-        videoPacket = videoPacket.convert(AkVideoCaps::Format_rgb24);
-    }
-
-    if (videoPacket)
-        emit this->frameReady(videoPacket);
-}
-
-bool ConvertVideoGeneric::init(const AkCaps &caps)
-{
-    Q_UNUSED(caps)
-
-    return true;
-}
-
-void ConvertVideoGeneric::uninit()
-{
-}
-
-#include "moc_convertvideogeneric.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/convert/generic/src/convertvideogeneric.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2019  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef CONVERTVIDEOGENERIC_H
-#define CONVERTVIDEOGENERIC_H
-
-#include "convertvideo.h"
-
-class ConvertVideoGeneric: public ConvertVideo
-{
-    Q_OBJECT
-
-    public:
-        ConvertVideoGeneric(QObject *parent=nullptr);
-        ~ConvertVideoGeneric();
-
-        Q_INVOKABLE void packetEnqueue(const AkPacket &packet);
-        Q_INVOKABLE bool init(const AkCaps &caps);
-        Q_INVOKABLE void uninit();
-};
-
-#endif // CONVERTVIDEOGENERIC_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/convert/generic/src/plugin.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2019  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#include "plugin.h"
-#include "convertvideogeneric.h"
-
-QObject *Plugin::create(const QString &key, const QString &specification)
-{
-    Q_UNUSED(key)
-    Q_UNUSED(specification)
-
-    return new ConvertVideoGeneric();
-}
-
-QStringList Plugin::keys() const
-{
-    return {};
-}
-
-#include "moc_plugin.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/convert/generic/src/plugin.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Webcamoid, webcam capture application.
- * Copyright (C) 2019  Gonzalo Exequiel Pedone
- *
- * Webcamoid is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Webcamoid is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
- *
- * Web-Site: http://webcamoid.github.io/
- */
-
-#ifndef PLUGIN_H
-#define PLUGIN_H
-
-#include <akplugin.h>
-
-class Plugin: public QObject, public AkPlugin
-{
-    Q_OBJECT
-    Q_INTERFACES(AkPlugin)
-    Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
-
-    public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
-};
-
-#endif // PLUGIN_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/convert/gstreamer/src/convertvideogstreamer.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/convert/gstreamer/src/convertvideogstreamer.cpp
@@ -23,6 +23,7 @@
 #include <akcaps.h>
 #include <akfrac.h>
 #include <akpacket.h>
+#include <akcompressedvideocaps.h>
 #include <akvideocaps.h>
 #include <akvideopacket.h>
 #include <gst/video/video.h>
@@ -31,72 +32,27 @@
 
 #include "convertvideogstreamer.h"
 
-using StringStringMap = QMap<QString, QString>;
+using GstCodecMap = QMap<QString, QString>;
 
-inline const StringStringMap &initFourCCToGst()
+inline const GstCodecMap &initCompressedGstToStr()
 {
-    static const StringStringMap fourCCToGst = {
-        // RGB formats
-        {"RGB555", "video/x-raw,format=RGB15"},
-        {"RGB565", "video/x-raw,format=RGB16"},
-        {"BGR"   , "video/x-raw,format=BGR"  },
-        {"RGB"   , "video/x-raw,format=RGB"  },
-        {"BGRX"  , "video/x-raw,format=BGRx" },
-        {"XRGB"  , "video/x-raw,format=xRGB" },
-
-        // Grey formats
-        {"GRAY8", "video/x-raw,format=GRAY8"},
-
-        // Luminance+Chrominance formats
-        {"YVU9", "video/x-raw,format=YVU9"},
-        {"YV12", "video/x-raw,format=YV12"},
-        {"YUYV", "video/x-raw,format=YUY2"},
-        {"YVYU", "video/x-raw,format=YVYU"},
-        {"UYVY", "video/x-raw,format=UYVY"},
-        {"422P", "video/x-raw,format=Y42B"},
-        {"411P", "video/x-raw,format=Y41B"},
-        {"Y41P", "video/x-raw,format=Y41P"},
-        {"YUV9", "video/x-raw,format=YUV9"},
-        {"YU12", "video/x-raw,format=I420"},
-
-        // two planes -- one Y, one Cr + Cb interleaved
-        {"NV12", "video/x-raw,format=NV12"},
-        {"NV21", "video/x-raw,format=NV21"},
-
-        // two non contiguous planes - one Y, one Cr + Cb interleaved
-        {"NM12", "video/x-raw,format=NV12"      },
-        {"NM21", "video/x-raw,format=NV21"      },
-        {"TM12", "video/x-raw,format=NV12_64Z32"},
-
-        // Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm
-        {"SBGGR8", "video/x-bayer,format=bggr"},
-        {"SGBRG8", "video/x-bayer,format=gbrg"},
-        {"SGRBG8", "video/x-bayer,format=grbg"},
-        {"SRGGB8", "video/x-bayer,format=rggb"},
-
-        // compressed formats
-        {"MJPG", "image/jpeg"                                         },
-        {"JPEG", "image/jpeg"                                         },
-        {"dvsd", "video/x-dv,systemstream=true"                       },
-        {"MPEG", "video/mpegts,systemstream=true"                     },
-        {"H264", "video/x-h264,stream-format=byte-stream,alignment=au"},
-        {"H263", "video/x-h263,variant=itu"                           },
-        {"MPG1", "video/mpeg,mpegversion=2"                           },
-        {"MPG2", "video/mpeg,mpegversion=2"                           },
-        {"MPG4", "video/mpeg,mpegversion=4,systemstream=false"        },
-        {"VP80", "video/x-vp8"                                        },
-
-        // Vendor-specific formats
-        {"S910", "video/x-sonix"},
-        {"PWC1", "video/x-pwc1" },
-        {"PWC2", "video/x-pwc2" },
-        {"PJPG", "image/jpeg"   }
+    static const GstCodecMap fourCCToGst {
+        {"video/mjpg"                                         , "mjpg"},
+        {"image/jpeg"                                         , "jpeg"},
+        {"video/x-dv,systemstream=true"                       , "dvsd"},
+        {"video/mpegts,systemstream=true"                     , "mpeg"},
+        {"video/x-h264,stream-format=byte-stream,alignment=au", "h264"},
+        {"video/x-h263,variant=itu"                           , "h263"},
+        {"video/mpeg,mpegversion=1"                           , "mpg1"},
+        {"video/mpeg,mpegversion=2"                           , "mpg2"},
+        {"video/mpeg,mpegversion=4,systemstream=false"        , "mpg4"},
+        {"video/x-vp8"                                        , "vp80"},
     };
 
     return fourCCToGst;
 }
 
-Q_GLOBAL_STATIC_WITH_ARGS(StringStringMap, fourCCToGst, (initFourCCToGst()))
+Q_GLOBAL_STATIC_WITH_ARGS(GstCodecMap, compressedGstToStr, (initCompressedGstToStr()))
 
 class ConvertVideoGStreamerPrivate
 {
@@ -106,6 +62,7 @@ class ConvertVideoGStreamerPrivate
         GstElement *m_source {nullptr};
         GstElement *m_sink {nullptr};
         GMainLoop *m_mainLoop {nullptr};
+        QFuture<void> m_mainLoopResult;
         guint m_busWatchId {0};
         qint64 m_id {-1};
         qint64 m_ptsDiff {AkNoPts<qint64>()};
@@ -164,11 +121,11 @@ void ConvertVideoGStreamer::packetEnqueu
 {
     // Write audio frame to the pipeline.
     GstBuffer *buffer = gst_buffer_new_allocate(nullptr,
-                                                gsize(packet.buffer().size()),
+                                                gsize(packet.size()),
                                                 nullptr);
     GstMapInfo info;
     gst_buffer_map(buffer, &info, GST_MAP_WRITE);
-    memcpy(info.data, packet.buffer().constData(), info.size);
+    memcpy(info.data, packet.constData(), info.size);
     gst_buffer_unmap(buffer, &info);
 
     if (this->d->m_ptsDiff == AkNoPts<qint64>())
@@ -186,12 +143,9 @@ void ConvertVideoGStreamer::packetEnqueu
 
 bool ConvertVideoGStreamer::init(const AkCaps &caps)
 {
-    QString fourcc = caps.property("fourcc").toString();
-    int width = caps.property("width").toInt();
-    int height = caps.property("height").toInt();
-    AkFrac fps = caps.property("fps").toString();
-
-    auto gstCaps = fourCCToGst->value(fourcc);
+    AkCompressedVideoCaps videoCaps(caps);
+    QString format = videoCaps.format();
+    auto gstCaps = compressedGstToStr->key(format);
 
     if (gstCaps.isEmpty())
         return false;
@@ -203,9 +157,10 @@ bool ConvertVideoGStreamer::init(const A
         || gstCaps.startsWith("video/x-pwc1")
         || gstCaps.startsWith("video/x-pwc2")
         || gstCaps.startsWith("video/x-sonix")) {
+        auto fps = videoCaps.fps();
         gst_caps_set_simple(inCaps,
-                            "width", width,
-                            "height", height,
+                            "width", videoCaps.width(),
+                            "height", videoCaps.height(),
                             "framerate", fps.toString().toStdString().c_str(),
                             nullptr);
     }
@@ -250,7 +205,6 @@ bool ConvertVideoGStreamer::init(const A
                      videoConvert,
                      this->d->m_sink,
                      nullptr);
-
     gst_element_link_many(this->d->m_source,
                           decoder,
                           videoConvert,
@@ -267,9 +221,10 @@ bool ConvertVideoGStreamer::init(const A
 
     // Run the main GStreamer loop.
     this->d->m_mainLoop = g_main_loop_new(nullptr, FALSE);
-    QtConcurrent::run(&this->d->m_threadPool,
-                      g_main_loop_run,
-                      this->d->m_mainLoop);
+    this->d->m_mainLoopResult =
+            QtConcurrent::run(&this->d->m_threadPool,
+                              g_main_loop_run,
+                              this->d->m_mainLoop);
     gst_element_set_state(this->d->m_pipeline, GST_STATE_PLAYING);
 
     return true;
@@ -526,33 +481,42 @@ GstFlowReturn ConvertVideoGStreamerPriva
     if (!sample)
         return GST_FLOW_OK;
 
-    GstCaps *caps = gst_sample_get_caps(sample);
-    GstVideoInfo *videoInfo = gst_video_info_new();
+    auto caps = gst_sample_get_caps(sample);
+    auto videoInfo = gst_video_info_new();
     gst_video_info_from_caps(videoInfo, caps);
 
-    gst_video_info_free(videoInfo);
-
-    GstBuffer *buffer = gst_sample_get_buffer(sample);
+    // Create a package and return it.
+    AkVideoCaps videoCaps(AkVideoCaps::Format_rgb24,
+                          videoInfo->width,
+                          videoInfo->height,
+                          AkFrac(videoInfo->fps_n, videoInfo->fps_d));
+    AkVideoPacket oVideoPacket(videoCaps);
+    auto buffer = gst_sample_get_buffer(sample);
     GstMapInfo info;
     gst_buffer_map(buffer, &info, GST_MAP_READ);
-    QByteArray oBuffer(int(info.size), Qt::Uninitialized);
-    memcpy(oBuffer.data(), info.data, info.size);
 
-    // Create a package and return it.
-    AkVideoPacket oVideoPacket;
-    oVideoPacket.caps() = {AkVideoCaps::Format_rgb24,
-                           videoInfo->width,
-                           videoInfo->height,
-                           AkFrac(videoInfo->fps_n, videoInfo->fps_d)};
-    oVideoPacket.buffer() = oBuffer;
-
-    oVideoPacket.pts() = qint64(GST_BUFFER_PTS(buffer));
-    oVideoPacket.timeBase() = AkFrac(1, GST_SECOND);
-    oVideoPacket.index() = 0;
-    oVideoPacket.id() = self->d->m_id;
+    for (int plane = 0; plane < GST_VIDEO_INFO_N_PLANES(videoInfo); ++plane) {
+        auto planeData = info.data + GST_VIDEO_INFO_PLANE_OFFSET(videoInfo, plane);
+        auto oLineSize = GST_VIDEO_INFO_PLANE_STRIDE(videoInfo, plane);
+        auto lineSize = qMin<size_t>(oVideoPacket.lineSize(plane), oLineSize);
+        auto heightDiv = oVideoPacket.heightDiv(plane);
+
+        for (int y = 0; y < videoInfo->height; ++y) {
+            auto ys = y >> heightDiv;
+            memcpy(oVideoPacket.line(plane, y),
+                   planeData + ys * oLineSize,
+                   lineSize);
+        }
+    }
+
+    oVideoPacket.setPts(qint64(GST_BUFFER_PTS(buffer)));
+    oVideoPacket.setTimeBase({1, GST_SECOND});
+    oVideoPacket.setIndex(0);
+    oVideoPacket.setId(self->d->m_id);
 
     gst_buffer_unmap(buffer, &info);
     gst_sample_unref(sample);
+    gst_video_info_free(videoInfo);
 
     emit self->frameReady(oVideoPacket);
 
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/convert/gstreamer/src/convertvideogstreamer.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/convert/gstreamer/src/convertvideogstreamer.h
@@ -32,9 +32,9 @@ class ConvertVideoGStreamer: public Conv
         ConvertVideoGStreamer(QObject *parent=nullptr);
         ~ConvertVideoGStreamer();
 
-        Q_INVOKABLE void packetEnqueue(const AkPacket &packet);
-        Q_INVOKABLE bool init(const AkCaps &caps);
-        Q_INVOKABLE void uninit();
+        Q_INVOKABLE void packetEnqueue(const AkPacket &packet) override;
+        Q_INVOKABLE bool init(const AkCaps &caps) override;
+        Q_INVOKABLE void uninit() override;
 
     private:
         ConvertVideoGStreamerPrivate *d;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/videocapture.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/videocapture.h
@@ -29,8 +29,8 @@ class VideoCapture: public QObject, publ
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "../pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // VIDEOCAPTURE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/videocaptureelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/videocaptureelement.cpp
@@ -17,19 +17,22 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
-#include <QQmlContext>
-#include <QSharedPointer>
 #include <QAbstractEventDispatcher>
-#include <QtConcurrent>
-#include <QThreadPool>
 #include <QFuture>
+#include <QQmlContext>
 #include <QReadWriteLock>
+#include <QSharedPointer>
+#include <QThreadPool>
+#include <QtConcurrent>
 #include <akcaps.h>
+#include <akcompressedvideocaps.h>
+#include <akcompressedvideopacket.h>
 #include <akfrac.h>
 #include <akpacket.h>
 #include <akplugininfo.h>
 #include <akpluginmanager.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "videocaptureelement.h"
@@ -38,37 +41,6 @@
 
 #define PAUSE_TIMEOUT 500
 
-#ifdef Q_OS_WIN32
-#include <combaseapi.h>
-
-inline const QStringList *mirrorFormats()
-{
-    static const QStringList mirrorFormats {
-        "RGB",
-        "RGB565",
-        "RGB555",
-        "BGRX",
-    };
-
-    return &mirrorFormats;
-}
-#endif
-
-#if !defined(Q_OS_OSX)
-inline const QStringList *swapRgbFormats()
-{
-    static const QStringList swapRgbFormats {
-#ifdef Q_OS_WIN32
-        "RGB",
-        "BGRX",
-#endif
-        "YV12"
-    };
-
-    return &swapRgbFormats;
-}
-#endif
-
 template <typename T>
 inline void waitLoop(const QFuture<T> &loop)
 {
@@ -84,6 +56,7 @@ class VideoCaptureElementPrivate
 {
     public:
         VideoCaptureElement *self;
+        AkVideoConverter m_videoConverter;
         CapturePtr m_capture;
         QString m_captureImpl;
         QThreadPool m_threadPool;
@@ -91,13 +64,11 @@ class VideoCaptureElementPrivate
         QReadWriteLock m_mutex;
         bool m_runCameraLoop {false};
         bool m_pause {false};
-        bool m_mirror {false};
-        bool m_swapRgb {false};
 
         explicit VideoCaptureElementPrivate(VideoCaptureElement *self);
+        QString capsDescription(const AkCaps &caps) const;
         void cameraLoop();
         void linksChanged(const AkPluginLinks &links);
-        void frameReady(const AkPacket &packet) const;
 };
 
 VideoCaptureElement::VideoCaptureElement():
@@ -175,72 +146,77 @@ VideoCaptureElement::~VideoCaptureElemen
 
 QString VideoCaptureElement::error() const
 {
-    QString error;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture)
-        error = this->d->m_capture->error();
+    QString error;
 
-    this->d->m_mutex.unlock();
+    if (capture)
+        error = capture->error();
 
     return error;
 }
 
 QStringList VideoCaptureElement::medias()
 {
-    QStringList medias;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture)
-        medias = this->d->m_capture->webcams();
+    QStringList medias;
 
-    this->d->m_mutex.unlock();
+    if (capture)
+        medias = capture->webcams();
 
     return medias;
 }
 
 QString VideoCaptureElement::media() const
 {
-    QString media;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture)
-        media = this->d->m_capture->device();
+    QString media;
 
-    this->d->m_mutex.unlock();
+    if (capture)
+        media = capture->device();
 
     return media;
 }
 
 QList<int> VideoCaptureElement::streams()
 {
-    QList<int> streams;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture)
-        streams = this->d->m_capture->streams();
+    QList<int> streams;
 
-    this->d->m_mutex.unlock();
+    if (capture)
+        streams = capture->streams();
 
     return streams;
 }
 
-QList<int> VideoCaptureElement::listTracks(const QString &mimeType)
+QList<int> VideoCaptureElement::listTracks(AkCaps::CapsType type)
 {
-    QList<int> tracks;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture)
-        tracks = this->d->m_capture->listTracks(mimeType);
+    QList<int> tracks;
 
-    this->d->m_mutex.unlock();
+    if (capture)
+        tracks = capture->listTracks(type);
 
     return tracks;
 }
 
-int VideoCaptureElement::defaultStream(const QString &mimeType)
+int VideoCaptureElement::defaultStream(AkCaps::CapsType type)
 {
-    if (mimeType == "video/x-raw")
+    if (type == AkCaps::CapsVideo)
         return 0;
 
     return -1;
@@ -248,198 +224,209 @@ int VideoCaptureElement::defaultStream(c
 
 QString VideoCaptureElement::description(const QString &media)
 {
-    QString description;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture)
-        description = this->d->m_capture->description(media);
+    QString description;
 
-    this->d->m_mutex.unlock();
+    if (capture)
+        description = capture->description(media);
 
     return description;
 }
 
 AkCaps VideoCaptureElement::caps(int stream)
 {
-    AkCaps caps;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture) {
-        auto streams = this->d->m_capture->caps(this->d->m_capture->device());
-        auto deviceCaps = streams.value(stream).value<AkCaps>();
+    if (!capture)
+        return {};
 
-        if (deviceCaps) {
-            caps = AkVideoCaps(AkVideoCaps::Format_rgb24,
-                               deviceCaps.property("width").toInt(),
-                               deviceCaps.property("height").toInt(),
-                               deviceCaps.property("fps").toString());
-        }
-    }
+    auto streams = capture->caps(capture->device());
+    auto deviceCaps = streams.value(stream);
 
-    this->d->m_mutex.unlock();
+    if (!deviceCaps)
+        return {};
+
+    AkCaps caps;
+
+    if (deviceCaps.type() == AkCaps::CapsVideoCompressed) {
+        AkVideoCaps videoCaps(deviceCaps);
+        caps = AkVideoCaps(AkVideoCaps::Format_argb,
+                           videoCaps.width(),
+                           videoCaps.height(),
+                           videoCaps.fps());
+    } else {
+        caps = deviceCaps;
+    }
 
     return caps;
 }
 
 AkCaps VideoCaptureElement::rawCaps(int stream) const
 {
-    AkCaps caps;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture) {
-        auto streams = this->d->m_capture->caps(this->d->m_capture->device());
-        caps = streams.value(stream).value<AkCaps>();
-    }
+    AkCaps caps;
 
-    this->d->m_mutex.unlock();
+    if (capture) {
+        auto streams = capture->caps(capture->device());
+        caps = streams.value(stream);
+    }
 
     return caps;
 }
 
 QString VideoCaptureElement::streamDescription(int stream) const
 {
-    AkCaps caps;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture) {
-        auto streams = this->d->m_capture->caps(this->d->m_capture->device());
-        caps = streams.value(stream).value<AkCaps>();
-    }
+    AkCaps caps;
 
-    this->d->m_mutex.unlock();
+    if (capture) {
+        auto streams = capture->caps(capture->device());
+        caps = streams.value(stream);
+    }
 
     if (!caps)
         return {};
 
-    auto fourcc = caps.property("fourcc").toString();
-    auto width = caps.property("width").toInt();
-    auto height = caps.property("height").toInt();
-    auto fps = AkFrac(caps.property("fps").toString()).value();
-
-    return QString("%1 %2x%3 %4 FPS")
-            .arg(fourcc)
-            .arg(width)
-            .arg(height)
-            .arg(fps);
+    return this->d->capsDescription(caps);
 }
 
 QStringList VideoCaptureElement::listCapsDescription() const
 {
-    QStringList capsDescriptions;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture) {
-        auto streams = this->d->m_capture->caps(this->d->m_capture->device());
+    QStringList capsDescriptions;
+
+    if (capture) {
+        auto streams = capture->caps(capture->device());
 
         for (auto &caps: streams)
-            capsDescriptions << this->d->m_capture->capsDescription(caps.value<AkCaps>());
+            capsDescriptions << this->d->capsDescription(caps);
     }
 
-    this->d->m_mutex.unlock();
-
     return capsDescriptions;
 }
 
 QString VideoCaptureElement::ioMethod() const
 {
-    QString ioMethod;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture)
-        ioMethod = this->d->m_capture->ioMethod();
+    QString ioMethod;
 
-    this->d->m_mutex.unlock();
+    if (capture)
+        ioMethod = capture->ioMethod();
 
     return ioMethod;
 }
 
 int VideoCaptureElement::nBuffers() const
 {
-    int nBuffers = 0;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture)
-        nBuffers = this->d->m_capture->nBuffers();
+    int nBuffers = 0;
 
-    this->d->m_mutex.unlock();
+    if (capture)
+        nBuffers = capture->nBuffers();
 
     return nBuffers;
 }
 
 QVariantList VideoCaptureElement::imageControls() const
 {
-    QVariantList imageControls;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture)
-        imageControls = this->d->m_capture->imageControls();
+    QVariantList imageControls;
 
-    this->d->m_mutex.unlock();
+    if (capture)
+        imageControls = capture->imageControls();
 
     return imageControls;
 }
 
 bool VideoCaptureElement::setImageControls(const QVariantMap &imageControls)
 {
-    bool result = false;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture)
-        result = this->d->m_capture->setImageControls(imageControls);
+    bool result = false;
 
-    this->d->m_mutex.unlock();
+    if (capture)
+        result = capture->setImageControls(imageControls);
 
     return result;
 }
 
 bool VideoCaptureElement::resetImageControls()
 {
-    bool result = false;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture)
-        result = this->d->m_capture->resetImageControls();
+    bool result = false;
 
-    this->d->m_mutex.unlock();
+    if (capture)
+        result = capture->resetImageControls();
 
     return result;
 }
 
 QVariantList VideoCaptureElement::cameraControls() const
 {
-    QVariantList cameraControls;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture)
-        cameraControls = this->d->m_capture->cameraControls();
+    QVariantList cameraControls;
 
-    this->d->m_mutex.unlock();
+    if (capture)
+        cameraControls = capture->cameraControls();
 
     return cameraControls;
 }
 
 bool VideoCaptureElement::setCameraControls(const QVariantMap &cameraControls)
 {
-    bool result = false;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture)
-        result = this->d->m_capture->setCameraControls(cameraControls);
+    bool result = false;
 
-    this->d->m_mutex.unlock();
+    if (capture)
+        result = capture->setCameraControls(cameraControls);
 
     return result;
 }
 
 bool VideoCaptureElement::resetCameraControls()
 {
-    bool result = false;
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture)
-        result = this->d->m_capture->resetCameraControls();
+    bool result = false;
 
-    this->d->m_mutex.unlock();
+    if (capture)
+        result = capture->resetCameraControls();
 
     return result;
 }
@@ -463,38 +450,39 @@ void VideoCaptureElement::controlInterfa
 void VideoCaptureElement::setMedia(const QString &media)
 {
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture) {
-        this->d->m_capture->setDevice(media);
-        QSettings settings;
+    if (!capture)
+        return;
 
-        settings.beginGroup("VideoCapture");
-        auto ndevices = settings.beginReadArray("devices");
-        auto deviceDescription = this->d->m_capture->description(media);
-        int streamIndex = 0;
-
-        for (int i = 0; i < ndevices; i++) {
-            settings.setArrayIndex(i);
-            auto deviceId = settings.value("id").toString();
-            auto description = settings.value("description").toString();
-
-            if (deviceId == media && description == deviceDescription) {
-                streamIndex = settings.value("stream", 0).toInt();
-                streamIndex = qBound(0,
-                                     streamIndex,
-                                     this->d->m_capture->listTracks({}).size() - 1);
+    capture->setDevice(media);
+    QSettings settings;
 
-                break;
-            }
-        }
+    settings.beginGroup("VideoCapture");
+    auto ndevices = settings.beginReadArray("devices");
+    auto deviceDescription = capture->description(media);
+    int streamIndex = 0;
 
-        settings.endArray();
-        settings.endGroup();
+    for (int i = 0; i < ndevices; i++) {
+        settings.setArrayIndex(i);
+        auto deviceId = settings.value("id").toString();
+        auto description = settings.value("description").toString();
+
+        if (deviceId == media && description == deviceDescription) {
+            streamIndex = settings.value("stream", 0).toInt();
+            streamIndex = qBound(0,
+                                 streamIndex,
+                                 capture->listTracks({}).size() - 1);
 
-        this->d->m_capture->setStreams({streamIndex});
+            break;
+        }
     }
 
-    this->d->m_mutex.unlock();
+    settings.endArray();
+    settings.endGroup();
+
+    capture->setStreams({streamIndex});
 }
 
 void VideoCaptureElement::setStreams(const QList<int> &streams)
@@ -503,16 +491,17 @@ void VideoCaptureElement::setStreams(con
     this->setState(AkElement::ElementStateNull);
     QString media;
     QString deviceDescription;
+
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture) {
-        this->d->m_capture->setStreams(streams);
-        media = this->d->m_capture->device();
-        deviceDescription = this->d->m_capture->description(media);
+    if (capture) {
+        capture->setStreams(streams);
+        media = capture->device();
+        deviceDescription = capture->description(media);
     }
 
-    this->d->m_mutex.unlock();
-
     if (running)
         this->setState(AkElement::ElementStatePlaying);
 
@@ -546,61 +535,61 @@ void VideoCaptureElement::setStreams(con
 void VideoCaptureElement::setIoMethod(const QString &ioMethod)
 {
     this->d->m_mutex.lockForRead();
-
-    if (this->d->m_capture)
-        this->d->m_capture->setIoMethod(ioMethod);
-
+    auto capture = this->d->m_capture;
     this->d->m_mutex.unlock();
+
+    if (capture)
+        capture->setIoMethod(ioMethod);
 }
 
 void VideoCaptureElement::setNBuffers(int nBuffers)
 {
     this->d->m_mutex.lockForRead();
-
-    if (this->d->m_capture)
-        this->d->m_capture->setNBuffers(nBuffers);
-
+    auto capture = this->d->m_capture;
     this->d->m_mutex.unlock();
+
+    if (capture)
+        capture->setNBuffers(nBuffers);
 }
 
 void VideoCaptureElement::resetMedia()
 {
     this->d->m_mutex.lockForRead();
-
-    if (this->d->m_capture)
-        this->d->m_capture->resetDevice();
-
+    auto capture = this->d->m_capture;
     this->d->m_mutex.unlock();
+
+    if (capture)
+        capture->resetDevice();
 }
 
 void VideoCaptureElement::resetStreams()
 {
     this->d->m_mutex.lockForRead();
-
-    if (this->d->m_capture)
-        this->d->m_capture->resetStreams();
-
+    auto capture = this->d->m_capture;
     this->d->m_mutex.unlock();
+
+    if (capture)
+        capture->resetStreams();
 }
 
 void VideoCaptureElement::resetIoMethod()
 {
     this->d->m_mutex.lockForRead();
-
-    if (this->d->m_capture)
-        this->d->m_capture->resetIoMethod();
-
+    auto capture = this->d->m_capture;
     this->d->m_mutex.unlock();
+
+    if (capture)
+        capture->resetIoMethod();
 }
 
 void VideoCaptureElement::resetNBuffers()
 {
     this->d->m_mutex.lockForRead();
-
-    if (this->d->m_capture)
-        this->d->m_capture->resetNBuffers();
-
+    auto capture = this->d->m_capture;
     this->d->m_mutex.unlock();
+
+    if (capture)
+        capture->resetNBuffers();
 }
 
 void VideoCaptureElement::reset()
@@ -610,17 +599,18 @@ void VideoCaptureElement::reset()
     QString media;
     QString deviceDescription;
     QList<int> streams;
+
     this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_capture) {
-        this->d->m_capture->reset();
-        media = this->d->m_capture->device();
-        deviceDescription = this->d->m_capture->description(media);
-        streams = this->d->m_capture->streams();
+    if (capture) {
+        capture->reset();
+        media = capture->device();
+        deviceDescription = capture->description(media);
+        streams = capture->streams();
     }
 
-    this->d->m_mutex.unlock();
-
     if (running)
         this->setState(AkElement::ElementStatePlaying);
 
@@ -651,7 +641,11 @@ void VideoCaptureElement::reset()
 
 bool VideoCaptureElement::setState(AkElement::ElementState state)
 {
-    if (!this->d->m_capture)
+    this->d->m_mutex.lockForRead();
+    auto capture = this->d->m_capture;
+    this->d->m_mutex.unlock();
+
+    if (!capture)
         return false;
 
     auto curState = this->state();
@@ -736,27 +730,45 @@ VideoCaptureElementPrivate::VideoCapture
                                            {"CameraCaptureImpl"}).id();
 }
 
-void VideoCaptureElementPrivate::cameraLoop()
+QString VideoCaptureElementPrivate::capsDescription(const AkCaps &caps) const
 {
-    auto convertVideo =
-            akPluginManager->create<ConvertVideo>("VideoSource/CameraCapture/Convert/*");
+    switch (caps.type()) {
+    case AkCaps::CapsVideo: {
+        AkVideoCaps videoCaps(caps);
+        auto format = AkVideoCaps::pixelFormatToString(videoCaps.format());
 
-    if (!convertVideo)
-        return;
+        return QString("%1, %2x%3, %4 FPS")
+                .arg(format.toUpper(),
+                     videoCaps.width(),
+                     videoCaps.height())
+                .arg(qRound(videoCaps.fps().value()));
+    }
 
-    QObject::connect(convertVideo.data(),
-                     &ConvertVideo::frameReady,
-                     self,
-                     [this] (const AkPacket &packet) {
-                        this->frameReady(packet);
-                     });
+    case AkCaps::CapsVideoCompressed: {
+        AkCompressedVideoCaps videoCaps(caps);
+
+        return QString("%1, %2x%3, %4 FPS")
+                .arg(videoCaps.format().toUpper(),
+                     videoCaps.width(),
+                     videoCaps.height())
+                .arg(qRound(videoCaps.fps().value()));
+    }
 
-#ifdef Q_OS_WIN32
-    // Initialize the COM library in multithread mode.
-    CoInitializeEx(nullptr, COINIT_MULTITHREADED);
-#endif
+    default:
+        break;
+    }
+
+    return {};
+}
+
+void VideoCaptureElementPrivate::cameraLoop()
+{
+    this->m_mutex.lockForRead();
+    auto capture = this->m_capture;
+    this->m_mutex.unlock();
 
-    if (this->m_capture && this->m_capture->init()) {
+    if (capture && capture->init()) {
+        QSharedPointer<ConvertVideo> convertVideo;
         bool initConvert = true;
 
         while (this->m_runCameraLoop) {
@@ -766,40 +778,44 @@ void VideoCaptureElementPrivate::cameraL
                 continue;
             }
 
-            auto packet = this->m_capture->readFrame();
+            auto packet = capture->readFrame();
 
             if (!packet)
                 continue;
 
-            if (initConvert) {
-                AkCaps caps = packet.caps();
-                qDebug() << "Camera input frame format:" << caps;
-
-#if !defined(Q_OS_OSX)
-                QString fourcc = caps.property("fourcc").toString();
-#ifdef Q_OS_WIN32
-                this->m_mirror = mirrorFormats()->contains(fourcc);
-#endif
-                this->m_swapRgb = swapRgbFormats()->contains(fourcc);
-#endif
+            auto caps = packet.caps();
 
-                if (!convertVideo->init(caps))
-                    break;
+            if (caps.type() == AkCaps::CapsVideoCompressed) {
+                if (initConvert) {
+                    convertVideo =
+                            akPluginManager->create<ConvertVideo>("VideoSource/CameraCapture/Convert/*");
+
+                    if (!convertVideo)
+                        break;
+
+                    QObject::connect(convertVideo.data(),
+                                     &ConvertVideo::frameReady,
+                                     self,
+                                     &VideoCaptureElement::oStream,
+                                     Qt::DirectConnection);
 
-                initConvert = false;
-            }
+                    if (!convertVideo->init(caps))
+                        break;
+
+                    initConvert = false;
+                }
 
-            convertVideo->packetEnqueue(packet);
+                convertVideo->packetEnqueue(packet);
+            } else {
+                emit self->oStream(packet);
+            }
         }
 
-        convertVideo->uninit();
-        this->m_capture->uninit();
-    }
+        if (convertVideo)
+            convertVideo->uninit();
 
-#ifdef Q_OS_WIN32
-    // Close COM library.
-    CoUninitialize();
-#endif
+        capture->uninit();
+    }
 }
 
 void VideoCaptureElementPrivate::linksChanged(const AkPluginLinks &links)
@@ -852,22 +868,4 @@ void VideoCaptureElementPrivate::linksCh
     self->setState(state);
 }
 
-void VideoCaptureElementPrivate::frameReady(const AkPacket &packet) const
-{
-    if (this->m_mirror || this->m_swapRgb) {
-        AkVideoPacket videoPacket(packet);
-        auto oImage = videoPacket.toImage();
-
-        if (this->m_mirror)
-            oImage = oImage.mirrored();
-
-        if (this->m_swapRgb)
-            oImage = oImage.rgbSwapped();
-
-        emit self->oStream(AkVideoPacket::fromImage(oImage, videoPacket));
-    } else {
-        emit self->oStream(packet);
-    }
-}
-
 #include "moc_videocaptureelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VideoCapture/src/videocaptureelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VideoCapture/src/videocaptureelement.h
@@ -51,24 +51,26 @@ class VideoCaptureElement: public AkMult
     Q_PROPERTY(QString ioMethod
                READ ioMethod
                WRITE setIoMethod
-               RESET resetIoMethod)
+               RESET resetIoMethod
+               NOTIFY ioMethodChanged)
     Q_PROPERTY(int nBuffers
                READ nBuffers
                WRITE setNBuffers
-               RESET resetNBuffers)
+               RESET resetNBuffers
+               NOTIFY nBuffersChanged)
 
     public:
         VideoCaptureElement();
         ~VideoCaptureElement();
 
         Q_INVOKABLE QString error() const;
-        Q_INVOKABLE QStringList medias();
-        Q_INVOKABLE QString media() const;
-        Q_INVOKABLE QList<int> streams();
-        Q_INVOKABLE QList<int> listTracks(const QString &mimeType={});
-        Q_INVOKABLE int defaultStream(const QString &mimeType);
-        Q_INVOKABLE QString description(const QString &media);
-        Q_INVOKABLE AkCaps caps(int stream);
+        Q_INVOKABLE QStringList medias() override;
+        Q_INVOKABLE QString media() const override;
+        Q_INVOKABLE QList<int> streams() override;
+        Q_INVOKABLE QList<int> listTracks(AkCaps::CapsType type=AkCaps::CapsUnknown);
+        Q_INVOKABLE int defaultStream(AkCaps::CapsType type) override;
+        Q_INVOKABLE QString description(const QString &media) override;
+        Q_INVOKABLE AkCaps caps(int stream) override;
         Q_INVOKABLE AkCaps rawCaps(int stream) const;
         Q_INVOKABLE QString streamDescription(int stream) const;
         Q_INVOKABLE QStringList listCapsDescription() const;
@@ -85,9 +87,9 @@ class VideoCaptureElement: public AkMult
         VideoCaptureElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
+                                       const QString &controlId) const override;
 
     signals:
         void errorChanged(const QString &error);
@@ -95,20 +97,22 @@ class VideoCaptureElement: public AkMult
         void mediaChanged(const QString &media);
         void streamsChanged(const QList<int> &streams);
         void loopChanged(bool loop);
-        void imageControlsChanged(const QVariantMap &imageControls) const;
-        void cameraControlsChanged(const QVariantMap &cameraControls) const;
+        void ioMethodChanged(const QString &ioMethod);
+        void nBuffersChanged(int nBuffers);
+        void imageControlsChanged(const QVariantMap &imageControls);
+        void cameraControlsChanged(const QVariantMap &cameraControls);
 
     public slots:
-        void setMedia(const QString &media);
-        void setStreams(const QList<int> &streams);
+        void setMedia(const QString &media) override;
+        void setStreams(const QList<int> &streams) override;
         void setIoMethod(const QString &ioMethod);
         void setNBuffers(int nBuffers);
-        void resetMedia();
-        void resetStreams();
+        void resetMedia() override;
+        void resetStreams() override;
         void resetIoMethod();
         void resetNBuffers();
         void reset();
-        bool setState(AkElement::ElementState state);
+        bool setState(AkElement::ElementState state) override;
 };
 
 #endif // VIDEOCAPTUREELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Vignette/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Vignette/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Vignette
 target_compile_definitions(Vignette PRIVATE AVKYS_PLUGIN_VIGNETTE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Vignette avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Vignette RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Vignette/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Vignette/share/qml/main.qml
@@ -32,13 +32,13 @@ GridLayout {
         function onAspectChanged(aspect)
         {
             sldAspect.value = aspect
-            spbAspect.value = spbAspect.multiplier * aspect
+            spbAspect.value = aspect * spbAspect.multiplier
         }
 
         function onScaleChanged(scale)
         {
             sldScale.value = scale
-            spbScale.value = spbScale.multiplier * scale
+            spbScale.value = scale * spbScale.multiplier
         }
 
         function onSoftnessChanged(softness)
@@ -49,6 +49,7 @@ GridLayout {
     }
 
     Label {
+        id: txtColor
         text: qsTr("Color")
     }
     RowLayout {
@@ -61,6 +62,7 @@ GridLayout {
             currentColor: AkUtils.fromRgba(Vignette.color)
             title: qsTr("Choose the vignette color")
             showAlphaChannel: true
+            Accessible.description: txtColor.text
 
             onCurrentColorChanged: Vignette.color = AkUtils.toRgba(currentColor)
         }
@@ -77,6 +79,7 @@ GridLayout {
         stepSize: 0.01
         to: 1
         Layout.fillWidth: true
+        Accessible.name: lblAspect.text
 
         onValueChanged: Vignette.aspect = value
     }
@@ -86,6 +89,7 @@ GridLayout {
         to: multiplier * sldAspect.to
         stepSize: multiplier * sldAspect.stepSize
         editable: true
+        Accessible.name: lblAspect.text
 
         readonly property int decimals: 2
         readonly property int multiplier: Math.pow(10, decimals)
@@ -113,6 +117,7 @@ GridLayout {
         stepSize: 0.01
         to: 1
         Layout.fillWidth: true
+        Accessible.name: lblScale.text
 
         onValueChanged: Vignette.scale = value
     }
@@ -122,6 +127,7 @@ GridLayout {
         to: multiplier * sldScale.to
         stepSize: multiplier * sldScale.stepSize
         editable: true
+        Accessible.name: lblScale.text
 
         readonly property int decimals: 2
         readonly property int multiplier: Math.pow(10, decimals)
@@ -149,6 +155,7 @@ GridLayout {
         stepSize: 0.01
         to: 1
         Layout.fillWidth: true
+        Accessible.name: lblSoftness.text
 
         onValueChanged: Vignette.softness = value
     }
@@ -158,6 +165,7 @@ GridLayout {
         to: multiplier * sldSoftness.to
         stepSize: multiplier * sldSoftness.stepSize
         editable: true
+        Accessible.name: lblSoftness.text
 
         readonly property int decimals: 2
         readonly property int multiplier: Math.pow(10, decimals)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Vignette/src/vignette.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Vignette/src/vignette.h
@@ -29,8 +29,8 @@ class Vignette: public QObject, public A
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // VIGNETTE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Vignette/src/vignetteelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Vignette/src/vignetteelement.cpp
@@ -17,11 +17,15 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QPainter>
+#include <QMutex>
 #include <QQmlContext>
+#include <QSize>
 #include <QtMath>
-#include <QMutex>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
+#include <akvideomixer.h>
 #include <akvideopacket.h>
 
 #include "vignetteelement.h"
@@ -34,39 +38,18 @@ class VignetteElementPrivate
         qreal m_scale {0.5};
         qreal m_softness {0.5};
         QSize m_curSize;
-        QImage m_vignette;
+        AkVideoPacket m_vignette;
         QMutex m_mutex;
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+        AkVideoMixer m_videoMixer;
 
-        inline qreal radius(qreal x, qreal y)
-        {
-            return qSqrt(x * x + y * y);
-        }
+        inline qreal radius(qreal x, qreal y) const;
+        void updateVignette();
 };
 
 VignetteElement::VignetteElement(): AkElement()
 {
     this->d = new VignetteElementPrivate;
-
-    QObject::connect(this,
-                     &VignetteElement::colorChanged,
-                     this,
-                     &VignetteElement::updateVignette);
-    QObject::connect(this,
-                     &VignetteElement::aspectChanged,
-                     this,
-                     &VignetteElement::updateVignette);
-    QObject::connect(this,
-                     &VignetteElement::scaleChanged,
-                     this,
-                     &VignetteElement::updateVignette);
-    QObject::connect(this,
-                     &VignetteElement::softnessChanged,
-                     this,
-                     &VignetteElement::updateVignette);
-    QObject::connect(this,
-                     &VignetteElement::curSizeChanged,
-                     this,
-                     &VignetteElement::updateVignette);
 }
 
 VignetteElement::~VignetteElement()
@@ -112,29 +95,32 @@ void VignetteElement::controlInterfaceCo
 
 AkPacket VignetteElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    this->d->m_videoConverter.begin();
+    auto dst = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!dst)
+        return {};
 
-    if (src.isNull())
-        return AkPacket();
+    this->d->m_mutex.lock();
 
-    QImage oFrame = src.convertToFormat(QImage::Format_ARGB32);
+    QSize frameSize(dst.caps().width(), dst.caps().height());
 
-    if (src.size() != this->d->m_curSize) {
-        this->d->m_curSize = src.size();
-        emit this->curSizeChanged(this->d->m_curSize);
+    if (frameSize != this->d->m_curSize) {
+        this->d->m_curSize = frameSize;
+        this->d->updateVignette();
     }
 
-    this->d->m_mutex.lock();
-    QImage vignette = this->d->m_vignette;
+    this->d->m_videoMixer.begin(&dst);
+    this->d->m_videoMixer.draw(this->d->m_vignette);
+    this->d->m_videoMixer.end();
+
     this->d->m_mutex.unlock();
 
-    QPainter painter;
-    painter.begin(&oFrame);
-    painter.drawImage(0, 0, vignette);
-    painter.end();
+    if (dst)
+        emit this->oStream(dst);
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    return dst;
 }
 
 void VignetteElement::setColor(QRgb color)
@@ -144,6 +130,9 @@ void VignetteElement::setColor(QRgb colo
 
     this->d->m_color = color;
     emit this->colorChanged(color);
+    this->d->m_mutex.lock();
+    this->d->updateVignette();
+    this->d->m_mutex.unlock();
 }
 
 void VignetteElement::setAspect(qreal aspect)
@@ -153,6 +142,9 @@ void VignetteElement::setAspect(qreal as
 
     this->d->m_aspect = aspect;
     emit this->aspectChanged(aspect);
+    this->d->m_mutex.lock();
+    this->d->updateVignette();
+    this->d->m_mutex.unlock();
 }
 
 void VignetteElement::setScale(qreal scale)
@@ -162,6 +154,9 @@ void VignetteElement::setScale(qreal sca
 
     this->d->m_scale = scale;
     emit this->scaleChanged(scale);
+    this->d->m_mutex.lock();
+    this->d->updateVignette();
+    this->d->m_mutex.unlock();
 }
 
 void VignetteElement::setSoftness(qreal softness)
@@ -171,6 +166,9 @@ void VignetteElement::setSoftness(qreal
 
     this->d->m_softness = softness;
     emit this->softnessChanged(softness);
+    this->d->m_mutex.lock();
+    this->d->updateVignette();
+    this->d->m_mutex.unlock();
 }
 
 void VignetteElement::resetColor()
@@ -193,24 +191,28 @@ void VignetteElement::resetSoftness()
     this->setSoftness(0.5);
 }
 
-void VignetteElement::updateVignette()
+qreal VignetteElementPrivate::radius(qreal x, qreal y) const
 {
-    this->d->m_mutex.lock();
+    return qSqrt(x * x + y * y);
+}
 
-    QSize curSize = this->d->m_curSize;
-    QImage vignette(curSize, QImage::Format_ARGB32);
+void VignetteElementPrivate::updateVignette()
+{
+    AkVideoPacket vignette({AkVideoCaps::Format_argbpack,
+                           this->m_curSize.width(),
+                           this->m_curSize.height(),
+                           {}});
 
     // Center of the ellipse.
-    int xc = vignette.width() / 2;
-    int yc = vignette.height() / 2;
+    int xc = vignette.caps().width() / 2;
+    int yc = vignette.caps().height() / 2;
 
-    qreal aspect = qBound(0.0, this->d->m_aspect, 1.0);
-    qreal rho = qBound(0.01, this->d->m_aspect, 0.99);
+    qreal aspect = qBound(0.0, this->m_aspect, 1.0);
+    qreal rho = qBound(0.01, this->m_aspect, 0.99);
 
     // Calculate the maximum scale to clear the vignette.
-    qreal scale =
-            this->d->m_scale * qSqrt(1.0 / qPow(rho, 2)
-                                    + 1.0 / qPow(1.0 - rho, 2));
+    qreal scale = this->m_scale * qSqrt(1.0 / qPow(rho, 2)
+                                        + 1.0 / qPow(1.0 - rho, 2));
 
     // Calculate radius.
     qreal a = scale * aspect * xc;
@@ -227,40 +229,38 @@ void VignetteElement::updateVignette()
     qreal qb = b * b;
     qreal qab = qa * qb;
 
-    qreal softness = 255.0 * (2.0 * this->d->m_softness - 1.0);
+    qreal softness = 255.0 * (2.0 * this->m_softness - 1.0);
 
-    int red = qRed(this->d->m_color);
-    int green = qGreen(this->d->m_color);
-    int blue = qBlue(this->d->m_color);
-    int alpha = qAlpha(this->d->m_color);
+    int red = qRed(this->m_color);
+    int green = qGreen(this->m_color);
+    int blue = qBlue(this->m_color);
+    int alpha = qAlpha(this->m_color);
 
     // Get the radius to a corner.
     qreal dwa = xc / a;
     qreal dhb = yc / b;
-    qreal maxRadius = this->d->radius(dwa, dhb);
-
-    this->d->m_mutex.unlock();
+    qreal maxRadius = this->radius(dwa, dhb);
 
-    for (int y = 0; y < vignette.height(); y++) {
-        QRgb *line = reinterpret_cast<QRgb *>(vignette.scanLine(y));
+    for (int y = 0; y < vignette.caps().height(); y++) {
+        auto line = reinterpret_cast<QRgb *>(vignette.line(0, y));
         int dy = y - yc;
         qreal qdy = dy * dy;
         qreal dyb = dy / b;
 
-        for (int x = 0; x < vignette.width(); x++) {
+        for (int x = 0; x < vignette.caps().width(); x++) {
             int dx = x - xc;
             qreal qdx = dx * dx;
             qreal dxa = qreal(dx) / a;
 
             if (qb * qdx + qa * qdy < qab
-                && !qIsNull(a) && !qIsNull(b))
+                && !qIsNull(a) && !qIsNull(b)) {
                 // If the point is inside the ellipse,
                 // show the original pixel.
                 line[x] = qRgba(0, 0, 0, 0);
-            else {
+            } else {
                 // The opacity of the pixel depends on the relation between
                 // it's radius and the corner radius.
-                qreal k = this->d->radius(dxa, dyb) / maxRadius;
+                qreal k = this->radius(dxa, dyb) / maxRadius;
                 int opacity = int(k * alpha - softness);
                 opacity = qBound(0, opacity, 255);
                 line[x] = qRgba(red, green, blue, opacity);
@@ -268,9 +268,7 @@ void VignetteElement::updateVignette()
         }
     }
 
-    this->d->m_mutex.lock();
-    this->d->m_vignette = vignette;
-    this->d->m_mutex.unlock();
+    this->m_vignette = vignette;
 }
 
 #include "moc_vignetteelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Vignette/src/vignetteelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Vignette/src/vignetteelement.h
@@ -62,17 +62,16 @@ class VignetteElement: public AkElement
         VignetteElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void colorChanged(QRgb color);
         void aspectChanged(qreal aspect);
         void scaleChanged(qreal scale);
         void softnessChanged(qreal softness);
-        void curSizeChanged(const QSize &curSize);
 
     public slots:
         void setColor(QRgb color);
@@ -83,9 +82,6 @@ class VignetteElement: public AkElement
         void resetAspect();
         void resetScale();
         void resetSoftness();
-
-    private slots:
-        void updateVignette();
 };
 
 #endif // VIGNETTEELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VirtualCamera/share/qml/CameraControl.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/VirtualCamera/share/qml/CameraControl.qml
@@ -33,7 +33,7 @@ GridLayout {
     property variant model: []
     property int minimumLeftWidth: 0
     property int minimumRightWidth: 0
-    readonly property alias leftWidth: lblRange.width
+    readonly property alias leftWidth: txtControlName.width
     readonly property alias rightWidth: spbRange.width
 
     signal controlChanged(string controlName, int value)
@@ -49,7 +49,7 @@ GridLayout {
     }
 
     Label {
-        id: lblRange
+        id: txtControlName
         text: controlParams.length > 0? controlParams[0]: ""
         Layout.minimumWidth: minimumLeftWidth
     }
@@ -61,6 +61,7 @@ GridLayout {
         value: grdCameraControl.value
         Layout.fillWidth: true
         visible: false
+        Accessible.name: txtControlName.text
 
         onValueChanged: {
             if (visible) {
@@ -78,6 +79,7 @@ GridLayout {
         Layout.minimumWidth: minimumRightWidth
         visible: false
         editable: true
+        Accessible.name: txtControlName.text
 
         onValueChanged: {
             if (visible)
@@ -97,6 +99,7 @@ GridLayout {
         Switch {
             id: chkBool
             checked: grdCameraControl.value !== 0
+            Accessible.name: txtControlName.text
 
             onCheckedChanged: {
                 if (visible)
@@ -112,6 +115,8 @@ GridLayout {
         Layout.fillWidth: true
         Layout.columnSpan: 2
         visible: false
+        //Accessible.description: lblControlName.text
+        Accessible.name: txtControlName.text
 
         onCurrentIndexChanged: {
             if (visible)
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VirtualCamera/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/VirtualCamera/share/qml/main.qml
@@ -28,7 +28,7 @@ ColumnLayout {
     {
         let controls = virtualCamera.controls()
 
-        for(let i = clyControls.children.length - 1; i >= 0 ; i--)
+        for (let i = clyControls.children.length - 1; i >= 0 ; i--)
             clyControls.children[i].destroy()
 
         let minimumLeftWidth = 0
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VirtualCamera/src/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/VirtualCamera/src/CMakeLists.txt
@@ -62,7 +62,6 @@ target_include_directories(VirtualCamera
 target_compile_definitions(VirtualCameraSrc PRIVATE AVKYS_PLUGIN_VIRTUALCAMERA)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(VirtualCameraSrc avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS VirtualCameraSrc RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VirtualCamera/src/akvcam/src/vcamak.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/VirtualCamera/src/akvcam/src/vcamak.cpp
@@ -38,10 +38,12 @@
 #include <sys/ioctl.h>
 #include <unistd.h>
 #include <libkmod.h>
+#include <akcaps.h>
 #include <akelement.h>
 #include <akfrac.h>
 #include <akpacket.h>
-#include <akcaps.h>
+#include <akvideoconverter.h>
+#include <akvideoformatspec.h>
 
 #include "vcamak.h"
 
@@ -67,8 +69,8 @@ enum DeviceType
 
 struct CaptureBuffer
 {
-    char *start;
-    size_t length;
+    char *start[VIDEO_MAX_PLANES];
+    size_t length[VIDEO_MAX_PLANES];
 };
 
 using RwMode = __u32;
@@ -111,8 +113,10 @@ class VCamAkPrivate
         QMutex m_controlsMutex;
         QString m_error;
         AkVideoCaps m_currentCaps;
+        AkVideoConverter m_videoConverter;
         QString m_picture;
         QString m_rootMethod;
+        v4l2_format m_v4l2Format;
         IoMethod m_ioMethod {IoMethodUnknown};
         int m_fd {-1};
         int m_nBuffers {32};
@@ -122,6 +126,7 @@ class VCamAkPrivate
         ~VCamAkPrivate();
 
         inline int xioctl(int fd, ulong request, void *arg) const;
+        inline int planesCount(const v4l2_format &format) const;
         bool sudo(const QString &script);
         QStringList availableRootMethods() const;
         QString whereBin(const QString &binary) const;
@@ -150,19 +155,21 @@ class VCamAkPrivate
         inline const V4L2AkFormatMap &v4l2AkFormatMap() const;
         inline const V4L2AkFormat &formatByV4L2(uint32_t v4l2) const;
         inline const V4L2AkFormat &formatByAk(AkVideoCaps::PixelFormat ak) const;
+        inline const V4L2AkFormat &formatByStr(const QString &str) const;
         inline const V4l2CtrlTypeMap &ctrlTypeToStr() const;
         AkVideoCapsList formatFps(int fd,
                                   const struct v4l2_fmtdesc &format,
                                   __u32 width,
                                   __u32 height) const;
         AkVideoCapsList formats(int fd) const;
-        void setFps(int fd, const v4l2_fract &fps);
-        bool initReadWrite(quint32 bufferSize);
-        bool initMemoryMap();
-        bool initUserPointer(quint32 bufferSize);
-        bool startOutput();
-        void stopOutput();
-        QString fourccToStr(quint32 format) const;
+        void setFps(int fd, __u32 bufferType, const v4l2_fract &fps);
+        bool initReadWrite(const v4l2_format &format);
+        bool initMemoryMap(const v4l2_format &format);
+        bool initUserPointer(const v4l2_format &format);
+        bool startOutput(const v4l2_format &format);
+        void stopOutput(const v4l2_format &format);
+        void writeFrame(char * const *planeData,
+                        const AkVideoPacket &videoPacket);
         void updateDevices();
         QString cleanDescription(const QString &description) const;
         QVector<int> requestDeviceNR(size_t count) const;
@@ -1476,6 +1483,9 @@ bool VCamAk::destroyAllDevices()
 
 bool VCamAk::init()
 {
+    if (this->d->m_device.isEmpty() || this->d->m_devices.isEmpty())
+        return false;
+
     this->d->m_localControls.clear();
     auto outputs = this->d->connectedDevices(this->d->m_device);
 
@@ -1503,73 +1513,117 @@ bool VCamAk::init()
         return false;
     }
 
+    auto outputFormats = this->d->m_devicesFormats.value(this->d->m_device);
+
+    if (outputFormats.empty()) {
+        qDebug() << "VirtualCamera: Output formats were not configured";
+        close(this->d->m_fd);
+        this->d->m_fd = -1;
+
+        return false;
+    }
+
+    AkVideoCaps outputCaps = this->d->m_currentCaps.nearest(outputFormats);
+
+    if (!outputCaps) {
+        qDebug() << "VirtualCamera: Can't find a similar format:"
+                 << this->d->m_currentCaps;
+        close(this->d->m_fd);
+        this->d->m_fd = -1;
+
+        return false;
+    }
+
+    outputCaps.setFormat(AkVideoCaps::Format_rgb24);
+    auto v4l2PixelFormat = this->d->formatByAk(outputCaps.format()).v4l2;
+    int width = outputCaps.width();
+    int height = outputCaps.height();
+    auto specs = AkVideoCaps::formatSpecs(outputCaps.format());
+
     v4l2_format fmt;
     memset(&fmt, 0, sizeof(v4l2_format));
-    fmt.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+    fmt.type = specs.planes() > 1?
+                   V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
+                   V4L2_BUF_TYPE_VIDEO_OUTPUT;
     this->d->xioctl(this->d->m_fd, VIDIOC_G_FMT, &fmt);
-    fmt.fmt.pix.pixelformat = this->d->formatByAk(this->d->m_currentCaps.format()).v4l2;
-    fmt.fmt.pix.width = __u32(this->d->m_currentCaps.width());
-    fmt.fmt.pix.height = __u32(this->d->m_currentCaps.height());
+
+    if (fmt.type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
+        fmt.fmt.pix.pixelformat = v4l2PixelFormat;
+        fmt.fmt.pix.width = width;
+        fmt.fmt.pix.height = height;
+    } else {
+        fmt.fmt.pix_mp.pixelformat = v4l2PixelFormat;
+        fmt.fmt.pix_mp.width = width;
+        fmt.fmt.pix_mp.height = height;
+    }
 
     if (this->d->xioctl(this->d->m_fd, VIDIOC_S_FMT, &fmt) < 0) {
-        qDebug() << "VirtualCamera:  Can't set format:"
-                 << this->d->m_currentCaps;
+        qDebug() << "VirtualCamera: Can't set format:"
+                 << outputCaps;
         close(this->d->m_fd);
         this->d->m_fd = -1;
 
         return false;
     }
 
-    v4l2_fract fps = {__u32(this->d->m_currentCaps.fps().num()),
-                      __u32(this->d->m_currentCaps.fps().den())};
-    this->d->setFps(this->d->m_fd, fps);
+    memcpy(&this->d->m_v4l2Format, &fmt, sizeof(v4l2_format));
+    v4l2_fract fps = {__u32(outputCaps.fps().num()),
+                      __u32(outputCaps.fps().den())};
+    this->d->setFps(this->d->m_fd, fmt.type, fps);
+    this->d->m_videoConverter.setOutputCaps(outputCaps);
 
     if (this->d->m_ioMethod == IoMethodReadWrite
         && capabilities.capabilities & V4L2_CAP_READWRITE
-        && this->d->initReadWrite(fmt.fmt.pix.sizeimage)) {
+        && this->d->initReadWrite(fmt)) {
     } else if (this->d->m_ioMethod == IoMethodMemoryMap
              && capabilities.capabilities & V4L2_CAP_STREAMING
-             && this->d->initMemoryMap()) {
+             && this->d->initMemoryMap(fmt)) {
     } else if (this->d->m_ioMethod == IoMethodUserPointer
              && capabilities.capabilities & V4L2_CAP_STREAMING
-             && this->d->initUserPointer(fmt.fmt.pix.sizeimage)) {
+             && this->d->initUserPointer(fmt)) {
     } else
         this->d->m_ioMethod = IoMethodUnknown;
 
     if (this->d->m_ioMethod != IoMethodUnknown)
-        return this->d->startOutput();
+        return this->d->startOutput(fmt);
 
     if (capabilities.capabilities & V4L2_CAP_STREAMING) {
-        if (this->d->initMemoryMap())
+        if (this->d->initMemoryMap(fmt))
             this->d->m_ioMethod = IoMethodMemoryMap;
-        else if (this->d->initUserPointer(fmt.fmt.pix.sizeimage))
+        else if (this->d->initUserPointer(fmt))
             this->d->m_ioMethod = IoMethodUserPointer;
     }
 
     if (this->d->m_ioMethod == IoMethodUnknown) {
         if (capabilities.capabilities & V4L2_CAP_READWRITE
-            && this->d->initReadWrite(fmt.fmt.pix.sizeimage))
+            && this->d->initReadWrite(fmt))
             this->d->m_ioMethod = IoMethodReadWrite;
         else
             return false;
     }
 
-    return this->d->startOutput();
+    return this->d->startOutput(fmt);
 }
 
 void VCamAk::uninit()
 {
-    this->d->stopOutput();
+    this->d->stopOutput(this->d->m_v4l2Format);
+    int planesCount = this->d->planesCount(this->d->m_v4l2Format);
 
     if (!this->d->m_buffers.isEmpty()) {
-        if (this->d->m_ioMethod == IoMethodReadWrite)
-            delete [] this->d->m_buffers[0].start;
-        else if (this->d->m_ioMethod == IoMethodMemoryMap)
+        if (this->d->m_ioMethod == IoMethodReadWrite) {
+            for (auto &buffer: this->d->m_buffers)
+                for (int i = 0; i < planesCount; i++)
+                    delete [] buffer.start[i];
+        } else if (this->d->m_ioMethod == IoMethodMemoryMap) {
             for (auto &buffer: this->d->m_buffers)
-                munmap(buffer.start, buffer.length);
-        else if (this->d->m_ioMethod == IoMethodUserPointer)
+                for (int i = 0; i < planesCount; i++)
+                    munmap(buffer.start[i], buffer.length[i]);
+        } else if (this->d->m_ioMethod == IoMethodUserPointer) {
             for (auto &buffer: this->d->m_buffers)
-                delete [] buffer.start;
+                for (int i = 0; i < planesCount; i++)
+                    delete [] buffer.start[i];
+        }
     }
 
     close(this->d->m_fd);
@@ -1854,33 +1908,28 @@ bool VCamAk::write(const AkVideoPacket &
         this->d->m_localControls = curControls;
     }
 
-    auto packet_ = AkVideoPacket(packet).convert(this->d->m_currentCaps.format());
-
-    v4l2_format fmt;
-    memset(&fmt, 0, sizeof(v4l2_format));
-    fmt.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-    this->d->xioctl(this->d->m_fd, VIDIOC_G_FMT, &fmt);
-    packet_ = packet_.scaled(fmt.fmt.pix.width, fmt.fmt.pix.height);
+    this->d->m_videoConverter.begin();
+    auto videoPacket = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
 
-    if (!packet_)
+    if (!videoPacket)
         return false;
 
     if (this->d->m_ioMethod == IoMethodReadWrite) {
-        memcpy(this->d->m_buffers[0].start,
-               packet_.buffer().data(),
-               qMin<size_t>(this->d->m_buffers[0].length,
-                            packet_.buffer().size()));
-
-        return ::write(this->d->m_fd,
-                       this->d->m_buffers[0].start,
-                       this->d->m_buffers[0].length) >= 0;
-    }
+        this->d->writeFrame(this->d->m_buffers[0].start, videoPacket);
+        int planesCount = this->d->planesCount(this->d->m_v4l2Format);
 
-    if (this->d->m_ioMethod == IoMethodMemoryMap
+        for (int i = 0; i < planesCount; i++) {
+            if (::write(this->d->m_fd,
+                        this->d->m_buffers[0].start[i],
+                        this->d->m_buffers[0].length[i]) < 0)
+                return false;
+        }
+    } else if (this->d->m_ioMethod == IoMethodMemoryMap
         || this->d->m_ioMethod == IoMethodUserPointer) {
         v4l2_buffer buffer;
         memset(&buffer, 0, sizeof(v4l2_buffer));
-        buffer.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+        buffer.type = this->d->m_v4l2Format.type;
         buffer.memory = (this->d->m_ioMethod == IoMethodMemoryMap)?
                             V4L2_MEMORY_MMAP:
                             V4L2_MEMORY_USERPTR;
@@ -1888,13 +1937,9 @@ bool VCamAk::write(const AkVideoPacket &
         if (this->d->xioctl(this->d->m_fd, VIDIOC_DQBUF, &buffer) < 0)
             return false;
 
-        if (buffer.index >= quint32(this->d->m_buffers.size()))
-            return false;
-
-        memcpy(this->d->m_buffers[int(buffer.index)].start,
-               packet_.buffer().data(),
-               qMin<size_t>(buffer.bytesused,
-                            packet_.buffer().size()));
+        if (buffer.index < quint32(this->d->m_buffers.size()))
+            this->d->writeFrame(this->d->m_buffers[int(buffer.index)].start,
+                    videoPacket);
 
         return this->d->xioctl(this->d->m_fd, VIDIOC_QBUF, &buffer) >= 0;
     }
@@ -1942,6 +1987,13 @@ int VCamAkPrivate::xioctl(int fd, ulong
     return r;
 }
 
+int VCamAkPrivate::planesCount(const v4l2_format &format) const
+{
+    return format.type == V4L2_BUF_TYPE_VIDEO_OUTPUT?
+                1:
+                format.fmt.pix_mp.num_planes;
+}
+
 bool VCamAkPrivate::sudo(const QString &script)
 {
     if (this->m_rootMethod.isEmpty()) {
@@ -1962,10 +2014,21 @@ bool VCamAkPrivate::sudo(const QString &
         return false;
     }
 
+    auto shBin = this->whereBin("sh");
+
+    if (shBin.isEmpty()) {
+        static const QString msg = "Can't find default shell";
+        qDebug() << msg;
+        this->m_error += msg + " ";
+
+        return false;
+    }
+
     QProcess su;
-    su.start(sudoBin, QStringList {});
+    su.start(sudoBin, QStringList {shBin});
 
     if (su.waitForStarted()) {
+       qDebug() << "executing shell script with 'sh'" << Qt::endl << script.toUtf8();
        su.write(script.toUtf8());
        su.closeWriteChannel();
     }
@@ -2074,8 +2137,7 @@ QVariantList VCamAkPrivate::capsFps(int
                                     __u32 height) const
 {
     QVariantList caps;
-    auto fmt = this->formatByV4L2(format.pixelformat);
-    auto fourcc = fmt.ak? fmt.str: this->fourccToStr(format.pixelformat);
+    auto fmt = this->formatByV4L2(format.pixelformat).ak;
 
 #ifdef VIDIOC_ENUM_FRAMEINTERVALS
     v4l2_frmivalenum frmival {};
@@ -2100,20 +2162,14 @@ QVariantList VCamAkPrivate::capsFps(int
             fps = AkFrac(frmival.stepwise.min.denominator,
                          frmival.stepwise.max.numerator);
 
-        AkCaps videoCaps;
-        videoCaps.setMimeType("video/unknown");
-        videoCaps.setProperty("fourcc", fourcc);
-        videoCaps.setProperty("width", width);
-        videoCaps.setProperty("height", height);
-        videoCaps.setProperty("fps", fps.toString());
-        caps << QVariant::fromValue(videoCaps);
+        caps << QVariant::fromValue(AkVideoCaps(fmt, width, height, fps));
     }
 
     if (caps.isEmpty()) {
 #endif
         struct v4l2_streamparm params;
         memset(&params, 0, sizeof(v4l2_streamparm));
-        params.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+        params.type = format.type;
 
         if (this->xioctl(fd, VIDIOC_G_PARM, &params) >= 0) {
             AkFrac fps;
@@ -2124,13 +2180,7 @@ QVariantList VCamAkPrivate::capsFps(int
             else
                 fps = AkFrac(30, 1);
 
-            AkCaps videoCaps;
-            videoCaps.setMimeType("video/unknown");
-            videoCaps.setProperty("fourcc", fourcc);
-            videoCaps.setProperty("width", width);
-            videoCaps.setProperty("height", height);
-            videoCaps.setProperty("fps", fps.toString());
-            caps << QVariant::fromValue(videoCaps);
+            caps << QVariant::fromValue(AkVideoCaps(fmt, width, height, fps));
         }
 #ifdef VIDIOC_ENUM_FRAMEINTERVALS
     }
@@ -2366,10 +2416,10 @@ QVariantMap VCamAkPrivate::mapDiff(const
     return map;
 }
 
-inline const V4L2AkFormatMap &VCamAkPrivate::v4l2AkFormatMap() const
+const V4L2AkFormatMap &VCamAkPrivate::v4l2AkFormatMap() const
 {
-    static const V4L2AkFormatMap formatMap = {
-        {0                  , AkVideoCaps::Format_none    , ""     },
+    static const V4L2AkFormatMap formatMap {
+        {0                  , AkVideoCaps::Format_none    , ""},
 
         // RGB formats
         {V4L2_PIX_FMT_RGB32 , AkVideoCaps::Format_0rgb    , "RGB32"},
@@ -2382,8 +2432,8 @@ inline const V4L2AkFormatMap &VCamAkPriv
         {V4L2_PIX_FMT_BGR24 , AkVideoCaps::Format_bgr24   , "BGR24"},
 
         // YUV formats
-        {V4L2_PIX_FMT_UYVY  , AkVideoCaps::Format_uyvy422 , "UYVY" },
-        {V4L2_PIX_FMT_YUYV  , AkVideoCaps::Format_yuyv422 , "YUY2" },
+        {V4L2_PIX_FMT_UYVY  , AkVideoCaps::Format_uyvy422 , "UYVY"},
+        {V4L2_PIX_FMT_YUYV  , AkVideoCaps::Format_yuyv422 , "YUY2"},
     };
 
     return formatMap;
@@ -2411,6 +2461,17 @@ const V4L2AkFormat &VCamAkPrivate::forma
     return formatMap.first();
 }
 
+const V4L2AkFormat &VCamAkPrivate::formatByStr(const QString &str) const
+{
+    auto &formatMap = this->v4l2AkFormatMap();
+
+    for (auto &format: formatMap)
+        if (format.str == str)
+            return format;
+
+    return formatMap.first();
+}
+
 const V4l2CtrlTypeMap &VCamAkPrivate::ctrlTypeToStr() const
 {
     static const V4l2CtrlTypeMap ctrlTypeToStr = {
@@ -2471,7 +2532,7 @@ AkVideoCapsList VCamAkPrivate::formatFps
 #endif
         v4l2_streamparm params;
         memset(&params, 0, sizeof(v4l2_streamparm));
-        params.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+        params.type = format.type;
 
         if (this->xioctl(fd, VIDIOC_G_PARM, &params) >= 0) {
             AkFrac fps;
@@ -2496,82 +2557,90 @@ AkVideoCapsList VCamAkPrivate::formatFps
 
 AkVideoCapsList VCamAkPrivate::formats(int fd) const
 {
-    __u32 type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+    QVector<v4l2_buf_type> bufferTypes;
     v4l2_capability capability;
     memset(&capability, 0, sizeof(v4l2_capability));
 
     if (this->xioctl(fd, VIDIOC_QUERYCAP, &capability) >= 0
         && capability.capabilities & V4L2_CAP_VIDEO_OUTPUT) {
-        type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+        bufferTypes = {V4L2_BUF_TYPE_VIDEO_OUTPUT,
+                       V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE};
+    } else {
+        bufferTypes = {V4L2_BUF_TYPE_VIDEO_CAPTURE,
+                       V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE};
     }
 
     AkVideoCapsList caps;
 
+    for (auto &bufferType: bufferTypes) {
 #ifndef VIDIOC_ENUM_FRAMESIZES
-    v4l2_format fmt;
-    memset(&fmt, 0, sizeof(v4l2_format));
-    fmt.type = type;
-    uint width = 0;
-    uint height = 0;
-
-    // Check if it has at least a default format.
-    if (this->xioctl(fd, VIDIOC_G_FMT, &fmt) >= 0) {
-        width = fmt.fmt.pix.width;
-        height = fmt.fmt.pix.height;
-    }
+        v4l2_format fmt;
+        memset(&fmt, 0, sizeof(v4l2_format));
+        fmt.type = bufferType;
+        uint width = 0;
+        uint height = 0;
+
+        // Check if it has at least a default format.
+        if (this->xioctl(fd, VIDIOC_G_FMT, &fmt) >= 0) {
+            width = fmt.fmt.pix.width;
+            height = fmt.fmt.pix.height;
+        }
 
-    if (width <= 0 || height <= 0)
-        return {};
+        if (width <= 0 || height <= 0)
+            continue;
 #endif
 
-    // Enumerate all supported formats.
-    v4l2_fmtdesc fmtdesc;
-    memset(&fmtdesc, 0, sizeof(v4l2_fmtdesc));
-    fmtdesc.type = type;
-
-    for (fmtdesc.index = 0;
-         this->xioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc) >= 0;
-         fmtdesc.index++) {
+        // Enumerate all supported formats.
+        v4l2_fmtdesc fmtdesc;
+        memset(&fmtdesc, 0, sizeof(v4l2_fmtdesc));
+        fmtdesc.type = bufferType;
+
+        for (fmtdesc.index = 0;
+             this->xioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc) >= 0;
+             fmtdesc.index++) {
 #ifdef VIDIOC_ENUM_FRAMESIZES
-        v4l2_frmsizeenum frmsize;
-        memset(&frmsize, 0, sizeof(v4l2_frmsizeenum));
-        frmsize.pixel_format = fmtdesc.pixelformat;
-
-        // Enumerate frame sizes.
-        for (frmsize.index = 0;
-             this->xioctl(fd, VIDIOC_ENUM_FRAMESIZES, &frmsize) >= 0;
-             frmsize.index++) {
-            if (frmsize.type == V4L2_FRMSIZE_TYPE_DISCRETE) {
-                caps << this->formatFps(fd,
-                                        fmtdesc,
-                                        frmsize.discrete.width,
-                                        frmsize.discrete.height);
-            } else {
+            v4l2_frmsizeenum frmsize;
+            memset(&frmsize, 0, sizeof(v4l2_frmsizeenum));
+            frmsize.pixel_format = fmtdesc.pixelformat;
+
+            // Enumerate frame sizes.
+            for (frmsize.index = 0;
+                 this->xioctl(fd, VIDIOC_ENUM_FRAMESIZES, &frmsize) >= 0;
+                 frmsize.index++) {
+                if (frmsize.type == V4L2_FRMSIZE_TYPE_DISCRETE) {
+                    caps << this->formatFps(fd,
+                                            fmtdesc,
+                                            frmsize.discrete.width,
+                                            frmsize.discrete.height);
+                } else {
 #if 0
-                for (uint height = frmsize.stepwise.min_height;
-                     height < frmsize.stepwise.max_height;
-                     height += frmsize.stepwise.step_height)
-                    for (uint width = frmsize.stepwise.min_width;
-                         width < frmsize.stepwise.max_width;
-                         width += frmsize.stepwise.step_width) {
-                        caps << this->formatFps(fd, fmtdesc, width, height);
-                    }
+                    for (uint height = frmsize.stepwise.min_height;
+                         height < frmsize.stepwise.max_height;
+                         height += frmsize.stepwise.step_height)
+                        for (uint width = frmsize.stepwise.min_width;
+                             width < frmsize.stepwise.max_width;
+                             width += frmsize.stepwise.step_width) {
+                            caps << this->formatFps(fd, fmtdesc, width, height);
+                        }
 #endif
+                }
             }
-        }
 #else
-        caps << this->capsFps(fd, fmtdesc, width, height);
+            caps << this->formatFps(fd, fmtdesc, width, height);
 #endif
+        }
     }
 
     return caps;
 }
 
-void VCamAkPrivate::setFps(int fd, const v4l2_fract &fps)
+void VCamAkPrivate::setFps(int fd,
+                           __u32 bufferType,
+                           const v4l2_fract &fps)
 {
     v4l2_streamparm streamparm;
     memset(&streamparm, 0, sizeof(v4l2_streamparm));
-    streamparm.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+    streamparm.type = bufferType;
 
     if (this->xioctl(fd, VIDIOC_G_PARM, &streamparm) >= 0)
         if (streamparm.parm.capture.capability & V4L2_CAP_TIMEPERFRAME) {
@@ -2581,28 +2650,45 @@ void VCamAkPrivate::setFps(int fd, const
         }
 }
 
-bool VCamAkPrivate::initReadWrite(quint32 bufferSize)
+bool VCamAkPrivate::initReadWrite(const v4l2_format &format)
 {
+    int planesCount = this->planesCount(format);
     this->m_buffers.resize(1);
-    this->m_buffers[0].length = bufferSize;
-    this->m_buffers[0].start = new char[bufferSize];
+    bool error = false;
+
+    for (auto &buffer: this->m_buffers)
+        for (int i = 0; i < planesCount; i++) {
+            buffer.length[i] = format.fmt.pix.sizeimage;
+            buffer.start[i] = new char[format.fmt.pix.sizeimage];
+
+            if (!buffer.start[i]) {
+                error = true;
+
+                break;
+            }
+
+            memset(buffer.start[i], 0, buffer.length[i]);
+        }
+
+    if (error) {
+        for (auto &buffer: this->m_buffers)
+            for (int i = 0; i < planesCount; i++)
+                if (buffer.start[i])
+                    delete [] buffer.start[i];
 
-    if (!this->m_buffers[0].start) {
         this->m_buffers.clear();
 
         return false;
     }
 
-    memset(this->m_buffers[0].start, 0, bufferSize);
-
     return true;
 }
 
-bool VCamAkPrivate::initMemoryMap()
+bool VCamAkPrivate::initMemoryMap(const v4l2_format &format)
 {
     v4l2_requestbuffers requestBuffers;
     memset(&requestBuffers, 0, sizeof(v4l2_requestbuffers));
-    requestBuffers.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+    requestBuffers.type = format.type;
     requestBuffers.memory = V4L2_MEMORY_MMAP;
     requestBuffers.count = __u32(this->m_nBuffers);
 
@@ -2612,41 +2698,78 @@ bool VCamAkPrivate::initMemoryMap()
     if (requestBuffers.count < 1)
         return false;
 
+    int planesCount = this->planesCount(format);
+
+    if (planesCount < 1)
+        return false;
+
     this->m_buffers.resize(int(requestBuffers.count));
     bool error = false;
 
     for (int i = 0; i < int(requestBuffers.count); i++) {
+        v4l2_plane planes[planesCount];
+        memset(planes, 0, planesCount * sizeof(v4l2_plane));
+
         v4l2_buffer buffer;
         memset(&buffer, 0, sizeof(v4l2_buffer));
-        buffer.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+        buffer.type = format.type;
         buffer.memory = V4L2_MEMORY_MMAP;
         buffer.index = __u32(i);
 
+        if (format.type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) {
+            buffer.length = planesCount;
+            buffer.m.planes = planes;
+        }
+
         if (this->xioctl(this->m_fd, VIDIOC_QUERYBUF, &buffer) < 0) {
             error = true;
 
             break;
         }
 
-        this->m_buffers[i].length = buffer.length;
-        this->m_buffers[i].start =
-                reinterpret_cast<char *>(mmap(nullptr,
-                                              buffer.length,
-                                              PROT_READ | PROT_WRITE,
-                                              MAP_SHARED,
-                                              this->m_fd,
-                                              buffer.m.offset));
+        if (format.type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
+            this->m_buffers[i].length[0] = buffer.length;
+            this->m_buffers[i].start[0] =
+                    reinterpret_cast<char *>(mmap(nullptr,
+                                                  buffer.length,
+                                                  PROT_READ | PROT_WRITE,
+                                                  MAP_SHARED,
+                                                  this->m_fd,
+                                                  buffer.m.offset));
 
-        if (this->m_buffers[i].start == MAP_FAILED) {
-            error = true;
+            if (this->m_buffers[i].start == MAP_FAILED) {
+                error = true;
 
-            break;
+                break;
+            }
+        } else {
+            for (int j = 0; j < planesCount; j++) {
+                this->m_buffers[i].length[j] = buffer.m.planes[j].length;
+                this->m_buffers[i].start[j] =
+                        reinterpret_cast<char *>(mmap(nullptr,
+                                                      buffer.m.planes[j].length,
+                                                      PROT_READ | PROT_WRITE,
+                                                      MAP_SHARED,
+                                                      this->m_fd,
+                                                      buffer.m.planes[j].m.mem_offset));
+
+                if(this->m_buffers[i].start[j] == MAP_FAILED){
+                    error = true;
+
+                    break;
+                }
+            }
+
+            if (error)
+                break;
         }
     }
 
     if (error) {
         for (auto &buffer: this->m_buffers)
-            munmap(buffer.start, buffer.length);
+            for (int i = 0; i < planesCount; i++)
+                if (buffer.start[i] != MAP_FAILED)
+                    munmap(buffer.start[i], buffer.length[i]);
 
         this->m_buffers.clear();
 
@@ -2656,36 +2779,58 @@ bool VCamAkPrivate::initMemoryMap()
     return true;
 }
 
-bool VCamAkPrivate::initUserPointer(quint32 bufferSize)
+bool VCamAkPrivate::initUserPointer(const v4l2_format &format)
 {
     v4l2_requestbuffers requestBuffers;
     memset(&requestBuffers, 0, sizeof(v4l2_requestbuffers));
-    requestBuffers.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+    requestBuffers.type = format.type;
     requestBuffers.memory = V4L2_MEMORY_USERPTR;
     requestBuffers.count = __u32(this->m_nBuffers);
 
     if (this->xioctl(this->m_fd, VIDIOC_REQBUFS, &requestBuffers) < 0)
         return false;
 
+    int planesCount = this->planesCount(format);
     this->m_buffers.resize(int(requestBuffers.count));
     bool error = false;
 
     for (int i = 0; i < int(requestBuffers.count); i++) {
-        this->m_buffers[i].length = bufferSize;
-        this->m_buffers[i].start = new char[bufferSize];
+        if (format.type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
+            this->m_buffers[i].length[0] = format.fmt.pix.sizeimage;
+            this->m_buffers[i].start[0] = new char[format.fmt.pix.sizeimage];
 
-        if (!this->m_buffers[i].start) {
-            error = true;
+            if (!this->m_buffers[i].start[0]) {
+                error = true;
 
-            break;
-        }
+                break;
+            }
+
+            memset(this->m_buffers[i].start[0], 0, format.fmt.pix.sizeimage);
+        } else {
+            for (int j = 0; j < format.fmt.pix_mp.num_planes; j++) {
+                auto imageSize = format.fmt.pix_mp.plane_fmt[i].sizeimage;
+                this->m_buffers[i].length[i] = imageSize;
+                this->m_buffers[i].start[i] = new char[imageSize];
 
-        memset(this->m_buffers[i].start, 0, bufferSize);
+                if (!this->m_buffers[i].start[i]) {
+                    error = true;
+
+                    break;
+                }
+
+                memset(this->m_buffers[i].start[i], 0, imageSize);
+            }
+
+            if (error)
+                break;
+        }
     }
 
     if (error) {
         for (auto &buffer: this->m_buffers)
-            delete [] buffer.start;
+            for (int i = 0; i < planesCount; i++)
+                if (buffer.start[i])
+                    delete [] buffer.start[i];
 
         this->m_buffers.clear();
 
@@ -2695,7 +2840,7 @@ bool VCamAkPrivate::initUserPointer(quin
     return true;
 }
 
-bool VCamAkPrivate::startOutput()
+bool VCamAkPrivate::startOutput(const v4l2_format &format)
 {
     bool error = false;
 
@@ -2703,7 +2848,7 @@ bool VCamAkPrivate::startOutput()
         for (int i = 0; i < this->m_buffers.size(); i++) {
             v4l2_buffer buffer;
             memset(&buffer, 0, sizeof(v4l2_buffer));
-            buffer.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+            buffer.type = format.type;
             buffer.memory = V4L2_MEMORY_MMAP;
             buffer.index = __u32(i);
 
@@ -2711,28 +2856,47 @@ bool VCamAkPrivate::startOutput()
                 error = true;
         }
 
-        v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+        auto type = v4l2_buf_type(format.type);
 
         if (this->xioctl(this->m_fd, VIDIOC_STREAMON, &type) < 0)
             error = true;
     } else if (this->m_ioMethod == IoMethodUserPointer) {
-        for (int i = 0; i < this->m_buffers.size(); i++) {
-            v4l2_buffer buffer;
-            memset(&buffer, 0, sizeof(v4l2_buffer));
-            buffer.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-            buffer.memory = V4L2_MEMORY_USERPTR;
-            buffer.index = __u32(i);
-            buffer.m.userptr = ulong(this->m_buffers[i].start);
-            buffer.length = __u32(this->m_buffers[i].length);
+        int planesCount = this->planesCount(format);
 
-            if (this->xioctl(this->m_fd, VIDIOC_QBUF, &buffer) < 0)
-                error = true;
-        }
+        if (planesCount > 0) {
+            for (int i = 0; i < this->m_buffers.size(); i++) {
+                v4l2_buffer buffer;
+                memset(&buffer, 0, sizeof(v4l2_buffer));
+                buffer.type = format.type;
+                buffer.memory = V4L2_MEMORY_USERPTR;
+                buffer.index = __u32(i);
+
+                if (this->m_v4l2Format.type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
+                    buffer.m.userptr = ulong(this->m_buffers[i].start[0]);
+                    buffer.length = __u32(this->m_buffers[i].length[0]);
+                } else {
+                    v4l2_plane planes[planesCount];
+                    memset(planes, 0, planesCount * sizeof(v4l2_plane));
+                    buffer.length = format.fmt.pix_mp.num_planes;
+                    buffer.m.planes = planes;
+
+                    for (int j = 0; j < buffer.length; j++) {
+                        planes[j].m.userptr = ulong(this->m_buffers[i].start[j]);
+                        planes[j].length = __u32(this->m_buffers[i].length[j]);
+                    }
+                }
 
-        v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+                if (this->xioctl(this->m_fd, VIDIOC_QBUF, &buffer) < 0)
+                    error = true;
+            }
 
-        if (this->xioctl(this->m_fd, VIDIOC_STREAMON, &type) < 0)
+            auto type = v4l2_buf_type(format.type);
+
+            if (this->xioctl(this->m_fd, VIDIOC_STREAMON, &type) < 0)
+                error = true;
+        } else {
             error = true;
+        }
     }
 
     if (error)
@@ -2741,22 +2905,44 @@ bool VCamAkPrivate::startOutput()
     return !error;
 }
 
-void VCamAkPrivate::stopOutput()
+void VCamAkPrivate::stopOutput(const v4l2_format &format)
 {
     if (this->m_ioMethod == IoMethodMemoryMap
         || this->m_ioMethod == IoMethodUserPointer) {
-        v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+        auto type = v4l2_buf_type(format.type);
         this->xioctl(this->m_fd, VIDIOC_STREAMOFF, &type);
     }
 }
 
-QString VCamAkPrivate::fourccToStr(quint32 format) const
+void VCamAkPrivate::writeFrame(char * const *planeData,
+                               const AkVideoPacket &videoPacket)
 {
-    char fourcc[5];
-    memcpy(fourcc, &format, sizeof(quint32));
-    fourcc[4] = 0;
-
-    return QString(fourcc);
+    if (this->m_v4l2Format.type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
+        auto oData = planeData[0];
+        auto iLineSize = videoPacket.lineSize(0);
+        auto oLineSize = this->m_v4l2Format.fmt.pix.bytesperline;
+        auto lineSize = qMin<size_t>(iLineSize, oLineSize);
+
+        for (int y = 0; y < this->m_v4l2Format.fmt.pix.height; ++y)
+            memcpy(oData + y * oLineSize,
+                   videoPacket.constLine(0, y),
+                   lineSize);
+    } else {
+        for (int plane = 0; plane < this->planesCount(this->m_v4l2Format); ++plane) {
+            auto oData = planeData[plane];
+            auto oLineSize = this->m_v4l2Format.fmt.pix_mp.plane_fmt[plane].bytesperline;
+            auto iLineSize = videoPacket.lineSize(plane);
+            auto lineSize = qMin<size_t>(iLineSize, oLineSize);
+            auto heightDiv = videoPacket.heightDiv(plane);
+
+            for (int y = 0; y < this->m_v4l2Format.fmt.pix_mp.height; ++y) {
+                int ys = y >> heightDiv;
+                memcpy(oData + ys * oLineSize,
+                       videoPacket.constLine(plane, y),
+                       lineSize);
+            }
+        }
+    }
 }
 
 void VCamAkPrivate::updateDevices()
@@ -3039,7 +3225,9 @@ inline QString VCamAkPrivate::stringFrom
         {VIDIOC_G_EXT_CTRLS        , "VIDIOC_G_EXT_CTRLS"        },
         {VIDIOC_S_EXT_CTRLS        , "VIDIOC_S_EXT_CTRLS"        },
         {VIDIOC_TRY_EXT_CTRLS      , "VIDIOC_TRY_EXT_CTRLS"      },
+#ifdef VIDIOC_ENUM_FRAMESIZES
         {VIDIOC_ENUM_FRAMESIZES    , "VIDIOC_ENUM_FRAMESIZES"    },
+#endif
         {VIDIOC_ENUM_FRAMEINTERVALS, "VIDIOC_ENUM_FRAMEINTERVALS"},
         {VIDIOC_G_ENC_INDEX        , "VIDIOC_G_ENC_INDEX"        },
         {VIDIOC_ENCODER_CMD        , "VIDIOC_ENCODER_CMD"        },
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VirtualCamera/src/akvcam/src/vcamak.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VirtualCamera/src/akvcam/src/vcamak.h
@@ -32,45 +32,45 @@ class VCamAk: public VCam
         VCamAk(QObject *parent=nullptr);
         ~VCamAk();
 
-        Q_INVOKABLE QString error() const;
-        Q_INVOKABLE bool isInstalled() const;
-        Q_INVOKABLE QString installedVersion() const;
-        Q_INVOKABLE QStringList webcams() const;
-        Q_INVOKABLE QString device() const;
-        Q_INVOKABLE QString description(const QString &webcam) const;
-        Q_INVOKABLE QList<AkVideoCaps::PixelFormat> supportedOutputPixelFormats() const;
-        Q_INVOKABLE AkVideoCaps::PixelFormat defaultOutputPixelFormat() const;
-        Q_INVOKABLE AkVideoCapsList caps(const QString &webcam) const;
-        Q_INVOKABLE AkVideoCaps currentCaps() const;
-        Q_INVOKABLE QVariantList controls() const;
-        Q_INVOKABLE bool setControls(const QVariantMap &controls);
-        Q_INVOKABLE QList<quint64> clientsPids() const;
-        Q_INVOKABLE QString clientExe(quint64 pid) const;
-        Q_INVOKABLE QString picture() const;
-        Q_INVOKABLE QString rootMethod() const;
-        Q_INVOKABLE QStringList availableRootMethods() const;
+        Q_INVOKABLE QString error() const override;
+        Q_INVOKABLE bool isInstalled() const override;
+        Q_INVOKABLE QString installedVersion() const override;
+        Q_INVOKABLE QStringList webcams() const override;
+        Q_INVOKABLE QString device() const override;
+        Q_INVOKABLE QString description(const QString &webcam) const override;
+        Q_INVOKABLE QList<AkVideoCaps::PixelFormat> supportedOutputPixelFormats() const override;
+        Q_INVOKABLE AkVideoCaps::PixelFormat defaultOutputPixelFormat() const override;
+        Q_INVOKABLE AkVideoCapsList caps(const QString &webcam) const override;
+        Q_INVOKABLE AkVideoCaps currentCaps() const override;
+        Q_INVOKABLE QVariantList controls() const override;
+        Q_INVOKABLE bool setControls(const QVariantMap &controls) override;
+        Q_INVOKABLE QList<quint64> clientsPids() const override;
+        Q_INVOKABLE QString clientExe(quint64 pid) const override;
+        Q_INVOKABLE QString picture() const override;
+        Q_INVOKABLE QString rootMethod() const override;
+        Q_INVOKABLE QStringList availableRootMethods() const override;
         Q_INVOKABLE QString deviceCreate(const QString &description,
-                                         const AkVideoCapsList &caps);
+                                         const AkVideoCapsList &caps) override;
         Q_INVOKABLE bool deviceEdit(const QString &deviceId,
                                     const QString &description,
-                                    const AkVideoCapsList &caps);
+                                    const AkVideoCapsList &caps) override;
         Q_INVOKABLE bool changeDescription(const QString &deviceId,
-                                           const QString &description);
-        Q_INVOKABLE bool deviceDestroy(const QString &deviceId);
-        Q_INVOKABLE bool destroyAllDevices();
+                                           const QString &description) override;
+        Q_INVOKABLE bool deviceDestroy(const QString &deviceId) override;
+        Q_INVOKABLE bool destroyAllDevices() override;
 
     private:
         VCamAkPrivate *d;
 
     public slots:
-        bool init();
-        void uninit();
-        void setDevice(const QString &device);
-        void setCurrentCaps(const AkVideoCaps &currentCaps);
-        void setPicture(const QString &picture);
-        void setRootMethod(const QString &rootMethod);
-        bool applyPicture();
-        bool write(const AkVideoPacket &packet);
+        bool init() override;
+        void uninit() override;
+        void setDevice(const QString &device) override;
+        void setCurrentCaps(const AkVideoCaps &currentCaps) override;
+        void setPicture(const QString &picture) override;
+        void setRootMethod(const QString &rootMethod) override;
+        bool applyPicture() override;
+        bool write(const AkVideoPacket &packet) override;
 };
 
 #endif // VCAMAK_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VirtualCamera/src/cmio/src/vcamcmio.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/VirtualCamera/src/cmio/src/vcamcmio.cpp
@@ -34,6 +34,7 @@
 #include <QWaitCondition>
 #include <QXmlStreamReader>
 #include <akfrac.h>
+#include <akvideoconverter.h>
 
 #include "vcamcmio.h"
 
@@ -84,8 +85,11 @@ class VCamCMIOPrivate
         QMutex m_controlsMutex;
         QString m_error;
         AkVideoCaps m_currentCaps;
+        AkVideoConverter m_videoConverter;
         QString m_picture;
         QString m_rootMethod;
+        bool m_isInitialized {false};
+        bool m_runEventsProc {true};
 
         VCamCMIOPrivate(VCamCMIO *self=nullptr);
         ~VCamCMIOPrivate();
@@ -679,11 +683,19 @@ bool VCamCMIO::destroyAllDevices()
 
 bool VCamCMIO::init()
 {
+    this->d->m_isInitialized = false;
+
+    if (this->d->m_device.isEmpty() || this->d->m_devices.isEmpty())
+        return false;
+
     auto manager = this->d->manager();
 
     if (manager.isEmpty())
         return false;
 
+    auto outputCaps = this->d->m_currentCaps;
+    outputCaps.setFormat(AkVideoCaps::Format_rgb24);
+
     QString params;
     QTextStream paramsStream(&params);
     paramsStream << "\""
@@ -693,16 +705,19 @@ bool VCamCMIO::init()
                  << " "
                  << this->d->m_device
                  << " "
-                 << this->d->cmioAkFormatMap().value(this->d->m_currentCaps.format())
+                 << this->d->cmioAkFormatMap().value(outputCaps.format())
                  << " "
-                 << this->d->m_currentCaps.width()
+                 << outputCaps.width()
                  << " "
-                 << this->d->m_currentCaps.height();
+                 << outputCaps.height();
     this->d->m_streamProc = popen(params.toStdString().c_str(), "w");
 
     if (this->d->m_streamProc)
         this->d->m_curFormat = this->d->m_currentCaps;
 
+    this->d->m_videoConverter.setOutputCaps(outputCaps);
+    this->d->m_isInitialized = true;
+
     return this->d->m_streamProc != nullptr;
 }
 
@@ -713,7 +728,7 @@ void VCamCMIO::uninit()
         this->d->m_streamProc = nullptr;
     }
 
-    this->d->m_curFormat.clear();
+    this->d->m_curFormat = AkVideoCaps();
 }
 
 void VCamCMIO::setDevice(const QString &device)
@@ -824,6 +839,9 @@ bool VCamCMIO::applyPicture()
 
 bool VCamCMIO::write(const AkVideoPacket &frame)
 {
+    if (!this->d->m_isInitialized)
+        return false;
+
     if (!this->d->m_streamProc)
         return false;
 
@@ -838,17 +856,25 @@ bool VCamCMIO::write(const AkVideoPacket
         this->d->m_localControls = curControls;
     }
 
-    auto scaled = frame.scaled(this->d->m_curFormat.width(),
-                               this->d->m_curFormat.height())
-                        .convert(this->d->m_curFormat.format());
+    this->d->m_videoConverter.begin();
+    auto videoPacket = this->d->m_videoConverter.convert(frame);
+    this->d->m_videoConverter.end();
 
-    if (!scaled)
+    if (!videoPacket)
         return false;
 
-    return fwrite(scaled.buffer().data(),
-                  size_t(scaled.buffer().size()),
-                  1,
-                  this->d->m_streamProc) > 0;
+    bool ok = true;
+
+    for (int y = 0; y < videoPacket.caps().height(); y++) {
+        auto line = videoPacket.constLine(0, y);
+        auto lineSize = videoPacket.bytesUsed(0);
+        ok = fwrite(line, lineSize, 1, this->d->m_streamProc) > 0;
+
+        if (!ok)
+            break;
+    }
+
+    return ok;
 }
 
 VCamCMIOPrivate::VCamCMIOPrivate(VCamCMIO *self):
@@ -864,7 +890,7 @@ VCamCMIOPrivate::VCamCMIOPrivate(VCamCMI
         QObject::connect(this->m_eventsProc,
                          &QProcess::readyReadStandardOutput,
                          [this] () {
-            while (this->m_eventsProc->canReadLine()) {
+            while (this->m_runEventsProc && this->m_eventsProc->canReadLine()) {
                 auto event = this->m_eventsProc->readLine().trimmed();
                 qDebug() << "Event:" << event;
 
@@ -885,7 +911,9 @@ VCamCMIOPrivate::VCamCMIOPrivate(VCamCMI
 VCamCMIOPrivate::~VCamCMIOPrivate()
 {
     if (this->m_eventsProc) {
-        this->m_eventsProc->terminate();
+        this->m_runEventsProc = false;
+        //this->m_eventsProc->terminate();
+        this->m_eventsProc->kill();
         this->m_eventsProc->waitForFinished();
         delete this->m_eventsProc;
     }
@@ -1051,12 +1079,14 @@ QVariantList VCamCMIOPrivate::controls(c
         case QXmlStreamReader::StartElement: {
             pathList << xmlInfo.name().toString();
 
-            if (path.isEmpty() && xmlInfo.name() != "info")
+            if (path.isEmpty() && xmlInfo.name() != QStringLiteral("info"))
                 return {};
 
-            if (path == "info/devices" && xmlInfo.name() == "device")
+            if (path == "info/devices"
+                && xmlInfo.name() == QStringLiteral("device"))
                 curDeviceControls.clear();
-            else if (path == "info/devices/device/controls" && xmlInfo.name() == "control")
+            else if (path == "info/devices/device/controls"
+                     && xmlInfo.name() == QStringLiteral("control"))
                 deviceControl = {};
 
             break;
@@ -1245,12 +1275,14 @@ void VCamCMIOPrivate::updateDevices()
         case QXmlStreamReader::StartElement: {
             pathList << xmlInfo.name().toString();
 
-            if (path.isEmpty() && xmlInfo.name() != "info")
+            if (path.isEmpty() && xmlInfo.name() != QStringLiteral("info"))
                 return;
 
-            if (path == "info/devices" && xmlInfo.name() == "device")
+            if (path == "info/devices"
+                && xmlInfo.name() == QStringLiteral("device"))
                 curDeviceCaps.clear();
-            else if (path == "info/devices/device/formats" && xmlInfo.name() == "format")
+            else if (path == "info/devices/device/formats"
+                     && xmlInfo.name() == QStringLiteral("format"))
                 curFormat = {};
 
             break;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VirtualCamera/src/cmio/src/vcamcmio.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VirtualCamera/src/cmio/src/vcamcmio.h
@@ -32,45 +32,45 @@ class VCamCMIO: public VCam
         VCamCMIO(QObject *parent=nullptr);
         ~VCamCMIO();
 
-        Q_INVOKABLE QString error() const;
-        Q_INVOKABLE bool isInstalled() const;
-        Q_INVOKABLE QString installedVersion() const;
-        Q_INVOKABLE QStringList webcams() const;
-        Q_INVOKABLE QString device() const;
-        Q_INVOKABLE QString description(const QString &webcam) const;
-        Q_INVOKABLE QList<AkVideoCaps::PixelFormat> supportedOutputPixelFormats() const;
-        Q_INVOKABLE AkVideoCaps::PixelFormat defaultOutputPixelFormat() const;
-        Q_INVOKABLE AkVideoCapsList caps(const QString &webcam) const;
-        Q_INVOKABLE AkVideoCaps currentCaps() const;
-        Q_INVOKABLE QVariantList controls() const;
-        Q_INVOKABLE bool setControls(const QVariantMap &controls);
-        Q_INVOKABLE QList<quint64> clientsPids() const;
-        Q_INVOKABLE QString clientExe(quint64 pid) const;
-        Q_INVOKABLE QString picture() const;
-        Q_INVOKABLE QString rootMethod() const;
-        Q_INVOKABLE QStringList availableRootMethods() const;
+        Q_INVOKABLE QString error() const override;
+        Q_INVOKABLE bool isInstalled() const override;
+        Q_INVOKABLE QString installedVersion() const override;
+        Q_INVOKABLE QStringList webcams() const override;
+        Q_INVOKABLE QString device() const override;
+        Q_INVOKABLE QString description(const QString &webcam) const override;
+        Q_INVOKABLE QList<AkVideoCaps::PixelFormat> supportedOutputPixelFormats() const override;
+        Q_INVOKABLE AkVideoCaps::PixelFormat defaultOutputPixelFormat() const override;
+        Q_INVOKABLE AkVideoCapsList caps(const QString &webcam) const override;
+        Q_INVOKABLE AkVideoCaps currentCaps() const override;
+        Q_INVOKABLE QVariantList controls() const override;
+        Q_INVOKABLE bool setControls(const QVariantMap &controls) override;
+        Q_INVOKABLE QList<quint64> clientsPids() const override;
+        Q_INVOKABLE QString clientExe(quint64 pid) const override;
+        Q_INVOKABLE QString picture() const override;
+        Q_INVOKABLE QString rootMethod() const override;
+        Q_INVOKABLE QStringList availableRootMethods() const override;
         Q_INVOKABLE QString deviceCreate(const QString &description,
-                                         const AkVideoCapsList &caps);
+                                         const AkVideoCapsList &caps) override;
         Q_INVOKABLE bool deviceEdit(const QString &deviceId,
                                     const QString &description,
-                                    const AkVideoCapsList &caps);
+                                    const AkVideoCapsList &caps) override;
         Q_INVOKABLE bool changeDescription(const QString &deviceId,
-                                           const QString &description);
-        Q_INVOKABLE bool deviceDestroy(const QString &deviceId);
-        Q_INVOKABLE bool destroyAllDevices();
+                                           const QString &description) override;
+        Q_INVOKABLE bool deviceDestroy(const QString &deviceId) override;
+        Q_INVOKABLE bool destroyAllDevices() override;
 
     private:
         VCamCMIOPrivate *d;
 
     public slots:
-        bool init();
-        void uninit();
-        void setDevice(const QString &device);
-        void setCurrentCaps(const AkVideoCaps &currentCaps);
-        void setPicture(const QString &picture);
-        void setRootMethod(const QString &rootMethod);
-        bool applyPicture();
-        bool write(const AkVideoPacket &packet);
+        bool init() override;
+        void uninit() override;
+        void setDevice(const QString &device) override;
+        void setCurrentCaps(const AkVideoCaps &currentCaps) override;
+        void setPicture(const QString &picture) override;
+        void setRootMethod(const QString &rootMethod) override;
+        bool applyPicture() override;
+        bool write(const AkVideoPacket &packet) override;
 
     friend class VCamCMIOPrivate;
 };
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VirtualCamera/src/dshow/src/vcamdshow.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/VirtualCamera/src/dshow/src/vcamdshow.cpp
@@ -35,6 +35,7 @@
 #include <QXmlStreamReader>
 #include <windows.h>
 #include <akfrac.h>
+#include <akvideoconverter.h>
 
 #include "vcamdshow.h"
 
@@ -95,8 +96,11 @@ class VCamDShowPrivate
         QMutex m_controlsMutex;
         QString m_error;
         AkVideoCaps m_currentCaps;
+        AkVideoConverter m_videoConverter;
         QString m_picture;
         QString m_rootMethod;
+        bool m_isInitialized {false};
+        bool m_runEventsProc {true};
 
         VCamDShowPrivate(VCamDShow *self=nullptr);
         ~VCamDShowPrivate();
@@ -886,11 +890,19 @@ bool VCamDShow::destroyAllDevices()
 
 bool VCamDShow::init()
 {
+    this->d->m_isInitialized = false;
+
+    if (this->d->m_device.isEmpty() || this->d->m_devices.isEmpty())
+        return false;
+
     auto manager = this->d->manager();
 
     if (manager.isEmpty())
         return false;
 
+    auto outputCaps = this->d->m_currentCaps;
+    outputCaps.setFormat(AkVideoCaps::Format_rgb24);
+
     QString params;
     QTextStream paramsStream(&params);
     paramsStream << "\""
@@ -900,11 +912,11 @@ bool VCamDShow::init()
                  << " "
                  << this->d->m_device
                  << " "
-                 << this->d->dshowAkFormatMap().value(this->d->m_currentCaps.format())
+                 << this->d->dshowAkFormatMap().value(outputCaps.format())
                  << " "
-                 << this->d->m_currentCaps.width()
+                 << outputCaps.width()
                  << " "
-                 << this->d->m_currentCaps.height();
+                 << outputCaps.height();
 
     this->d->m_streamProc.stdinReadPipe = nullptr;
     this->d->m_streamProc.stdinWritePipe = nullptr;
@@ -957,7 +969,8 @@ bool VCamDShow::init()
         return false;
     }
 
-    this->d->m_curFormat = this->d->m_currentCaps;
+    this->d->m_videoConverter.setOutputCaps(outputCaps);
+    this->d->m_isInitialized = true;
 
     return true;
 }
@@ -976,8 +989,6 @@ void VCamDShow::uninit()
         CloseHandle(this->d->m_streamProc.procInfo.hProcess);
         CloseHandle(this->d->m_streamProc.procInfo.hThread);
     }
-
-    this->d->m_curFormat.clear();
 }
 
 void VCamDShow::setDevice(const QString &device)
@@ -1145,6 +1156,9 @@ bool VCamDShow::applyPicture()
 
 bool VCamDShow::write(const AkVideoPacket &frame)
 {
+    if (!this->d->m_isInitialized)
+        return false;
+
     if (!this->d->m_streamProc.stdinReadPipe)
         return false;
 
@@ -1159,11 +1173,11 @@ bool VCamDShow::write(const AkVideoPacke
         this->d->m_localControls = curControls;
     }
 
-    auto scaled = frame.scaled(this->d->m_curFormat.width(),
-                               this->d->m_curFormat.height())
-                        .convert(this->d->m_curFormat.format());
+    this->d->m_videoConverter.begin();
+    auto videoPacket = this->d->m_videoConverter.convert(frame);
+    this->d->m_videoConverter.end();
 
-    if (!scaled)
+    if (!videoPacket)
         return false;
 
     this->d->m_streamProc.stdinMutex.lock();
@@ -1172,9 +1186,9 @@ bool VCamDShow::write(const AkVideoPacke
     if (this->d->m_streamProc.stdinWritePipe) {
         ok = true;
 
-        for (int y = 0; y < scaled.caps().height(); y++) {
-            auto line = scaled.constLine(0, y);
-            auto lineSize = scaled.caps().bytesPerLine(0);
+        for (int y = 0; y < videoPacket.caps().height(); y++) {
+            auto line = videoPacket.constLine(0, y);
+            auto lineSize = videoPacket.bytesUsed(0);
             DWORD bytesWritten = 0;
             ok = WriteFile(this->d->m_streamProc.stdinWritePipe,
                            line,
@@ -1205,7 +1219,7 @@ VCamDShowPrivate::VCamDShowPrivate(VCamD
         QObject::connect(this->m_eventsProc,
                          &QProcess::readyReadStandardOutput,
                          [this] () {
-            while (this->m_eventsProc->canReadLine()) {
+            while (this->m_runEventsProc && this->m_eventsProc->canReadLine()) {
                 auto event = this->m_eventsProc->readLine().trimmed();
                 qDebug() << "Event:" << event;
 
@@ -1226,7 +1240,9 @@ VCamDShowPrivate::VCamDShowPrivate(VCamD
 VCamDShowPrivate::~VCamDShowPrivate()
 {
     if (this->m_eventsProc) {
-        this->m_eventsProc->terminate();
+        this->m_runEventsProc = false;
+        //this->m_eventsProc->terminate();
+        this->m_eventsProc->kill();
         this->m_eventsProc->waitForFinished();
         delete this->m_eventsProc;
     }
@@ -1393,12 +1409,14 @@ QVariantList VCamDShowPrivate::controls(
         case QXmlStreamReader::StartElement: {
             pathList << xmlInfo.name().toString();
 
-            if (path.isEmpty() && xmlInfo.name() != "info")
+            if (path.isEmpty() && xmlInfo.name() != QStringLiteral("info"))
                 return {};
 
-            if (path == "info/devices" && xmlInfo.name() == "device")
+            if (path == "info/devices"
+                && xmlInfo.name() == QStringLiteral("device"))
                 curDeviceControls.clear();
-            else if (path == "info/devices/device/controls" && xmlInfo.name() == "control")
+            else if (path == "info/devices/device/controls"
+                     && xmlInfo.name() == QStringLiteral("control"))
                 deviceControl = {};
 
             break;
@@ -1652,12 +1670,13 @@ void VCamDShowPrivate::updateDevices()
         case QXmlStreamReader::StartElement: {
             pathList << xmlInfo.name().toString();
 
-            if (path.isEmpty() && xmlInfo.name() != "info")
+            if (path.isEmpty() && xmlInfo.name() != QStringLiteral("info"))
                 return;
 
-            if (path == "info/devices" && xmlInfo.name() == "device")
+            if (path == "info/devices" && xmlInfo.name() == QStringLiteral("device"))
                 curDeviceCaps.clear();
-            else if (path == "info/devices/device/formats" && xmlInfo.name() == "format")
+            else if (path == "info/devices/device/formats"
+                     && xmlInfo.name() == QStringLiteral("format"))
                 curFormat = {};
 
             break;
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VirtualCamera/src/dshow/src/vcamdshow.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VirtualCamera/src/dshow/src/vcamdshow.h
@@ -32,45 +32,45 @@ class VCamDShow: public VCam
         VCamDShow(QObject *parent=nullptr);
         ~VCamDShow();
 
-        Q_INVOKABLE QString error() const;
-        Q_INVOKABLE bool isInstalled() const;
-        Q_INVOKABLE QString installedVersion() const;
-        Q_INVOKABLE QStringList webcams() const;
-        Q_INVOKABLE QString device() const;
-        Q_INVOKABLE QString description(const QString &webcam) const;
-        Q_INVOKABLE QList<AkVideoCaps::PixelFormat> supportedOutputPixelFormats() const;
-        Q_INVOKABLE AkVideoCaps::PixelFormat defaultOutputPixelFormat() const;
-        Q_INVOKABLE AkVideoCapsList caps(const QString &webcam) const;
-        Q_INVOKABLE AkVideoCaps currentCaps() const;
-        Q_INVOKABLE QVariantList controls() const;
-        Q_INVOKABLE bool setControls(const QVariantMap &controls);
-        Q_INVOKABLE QList<quint64> clientsPids() const;
-        Q_INVOKABLE QString clientExe(quint64 pid) const;
-        Q_INVOKABLE QString picture() const;
-        Q_INVOKABLE QString rootMethod() const;
-        Q_INVOKABLE QStringList availableRootMethods() const;
+        Q_INVOKABLE QString error() const override;
+        Q_INVOKABLE bool isInstalled() const override;
+        Q_INVOKABLE QString installedVersion() const override;
+        Q_INVOKABLE QStringList webcams() const override;
+        Q_INVOKABLE QString device() const override;
+        Q_INVOKABLE QString description(const QString &webcam) const override;
+        Q_INVOKABLE QList<AkVideoCaps::PixelFormat> supportedOutputPixelFormats() const override;
+        Q_INVOKABLE AkVideoCaps::PixelFormat defaultOutputPixelFormat() const override;
+        Q_INVOKABLE AkVideoCapsList caps(const QString &webcam) const override;
+        Q_INVOKABLE AkVideoCaps currentCaps() const override;
+        Q_INVOKABLE QVariantList controls() const override;
+        Q_INVOKABLE bool setControls(const QVariantMap &controls) override;
+        Q_INVOKABLE QList<quint64> clientsPids() const override;
+        Q_INVOKABLE QString clientExe(quint64 pid) const override;
+        Q_INVOKABLE QString picture() const override;
+        Q_INVOKABLE QString rootMethod() const override;
+        Q_INVOKABLE QStringList availableRootMethods() const override;
         Q_INVOKABLE QString deviceCreate(const QString &description,
-                                         const AkVideoCapsList &caps);
+                                         const AkVideoCapsList &caps) override;
         Q_INVOKABLE bool deviceEdit(const QString &deviceId,
                                     const QString &description,
-                                    const AkVideoCapsList &caps);
+                                    const AkVideoCapsList &caps) override;
         Q_INVOKABLE bool changeDescription(const QString &deviceId,
-                                           const QString &description);
-        Q_INVOKABLE bool deviceDestroy(const QString &deviceId);
-        Q_INVOKABLE bool destroyAllDevices();
+                                           const QString &description) override;
+        Q_INVOKABLE bool deviceDestroy(const QString &deviceId) override;
+        Q_INVOKABLE bool destroyAllDevices() override;
 
     private:
         VCamDShowPrivate *d;
 
     public slots:
-        bool init();
-        void uninit();
-        void setDevice(const QString &device);
-        void setCurrentCaps(const AkVideoCaps &currentCaps);
-        void setPicture(const QString &picture);
-        void setRootMethod(const QString &rootMethod);
-        bool applyPicture();
-        bool write(const AkVideoPacket &packet);
+        bool init() override;
+        void uninit() override;
+        void setDevice(const QString &device) override;
+        void setCurrentCaps(const AkVideoCaps &currentCaps) override;
+        void setPicture(const QString &picture) override;
+        void setRootMethod(const QString &rootMethod) override;
+        bool applyPicture() override;
+        bool write(const AkVideoPacket &packet) override;
 };
 
 #endif // VCAMDSHOW_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VirtualCamera/src/v4l2lb/pspec.json
+++ webcamoid-9.0.0/libAvKys/Plugins/VirtualCamera/src/v4l2lb/pspec.json
@@ -9,7 +9,6 @@
             "priority": 900,
             "depends": [
                 "VideoFilter/Flip",
-                "VideoFilter/Scale",
                 "VideoFilter/SwapRB"
             ],
             "type": "qtplugin"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VirtualCamera/src/v4l2lb/src/vcamv4l2lb.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/VirtualCamera/src/v4l2lb/src/vcamv4l2lb.cpp
@@ -41,6 +41,8 @@
 #include <akfrac.h>
 #include <akpacket.h>
 #include <akpluginmanager.h>
+#include <akvideoconverter.h>
+#include <akvideoformatspec.h>
 
 #include "vcamv4l2lb.h"
 
@@ -62,8 +64,8 @@ enum DeviceType
 
 struct CaptureBuffer
 {
-    char *start;
-    size_t length;
+    char *start[VIDEO_MAX_PLANES];
+    size_t length[VIDEO_MAX_PLANES];
 };
 
 using RwMode = __u32;
@@ -120,12 +122,12 @@ class VCamV4L2LoopBackPrivate
         QMap<QString, DeviceControlValues> m_deviceControlValues;
         QMutex m_controlsMutex;
         AkElementPtr m_flipFilter   {akPluginManager->create<AkElement>("VideoFilter/Flip")};
-        AkElementPtr m_scaleFilter  {akPluginManager->create<AkElement>("VideoFilter/Scale")};
         AkElementPtr m_swapRBFilter {akPluginManager->create<AkElement>("VideoFilter/SwapRB")};
         QString m_error;
         AkVideoCaps m_currentCaps;
-        AkVideoCaps m_outputCaps;
+        AkVideoConverter m_videoConverter;
         QString m_rootMethod;
+        v4l2_format m_v4l2Format;
         IoMethod m_ioMethod {IoMethodUnknown};
         int m_fd {-1};
         int m_nBuffers {32};
@@ -135,6 +137,7 @@ class VCamV4L2LoopBackPrivate
         ~VCamV4L2LoopBackPrivate();
 
         inline int xioctl(int fd, ulong request, void *arg) const;
+        inline int planesCount(const v4l2_format &format) const;
         bool sudo(const QString &script);
         QStringList availableRootMethods() const;
         QString whereBin(const QString &binary) const;
@@ -159,11 +162,6 @@ class VCamV4L2LoopBackPrivate
         inline const V4L2AkFormat &formatByStr(const QString &str) const;
         inline const V4l2CtrlTypeMap &ctrlTypeToStr() const;
         inline const DeviceControls &deviceControls() const;
-        AkVideoCapsList formatFps(int fd,
-                                  const struct v4l2_fmtdesc &format,
-                                  __u32 width,
-                                  __u32 height) const;
-        AkVideoCapsList formats(int fd) const;
         QList<QStringList> combineMatrix(const QList<QStringList> &matrix) const;
         void combineMatrixP(const QList<QStringList> &matrix,
                             size_t index,
@@ -173,13 +171,15 @@ class VCamV4L2LoopBackPrivate
         QList<DeviceInfo> readDevicesConfigs() const;
         AkVideoCapsList formatsFromSettings(const QString &deviceId,
                                             const QList<DeviceInfo> &devicesInfo) const;
-        void setFps(int fd, const v4l2_fract &fps);
-        bool initReadWrite(quint32 bufferSize);
-        bool initMemoryMap();
-        bool initUserPointer(quint32 bufferSize);
+        void setFps(int fd, __u32 bufferType, const v4l2_fract &fps);
+        bool initReadWrite(const v4l2_format &format);
+        bool initMemoryMap(const v4l2_format &format);
+        bool initUserPointer(const v4l2_format &format);
         void initDefaultFormats();
-        bool startOutput();
-        void stopOutput();
+        bool startOutput(const v4l2_format &format);
+        void stopOutput(const v4l2_format &format);
+        void writeFrame(char * const *planeData,
+                        const AkVideoPacket &videoPacket);
         void updateDevices();
         QString cleanDescription(const QString &description) const;
         QVector<int> requestDeviceNR(size_t count) const;
@@ -188,11 +188,6 @@ class VCamV4L2LoopBackPrivate
         inline QStringList v4l2Devices() const;
         QList<DeviceInfo> devicesInfo() const;
         inline QString stringFromIoctl(ulong cmd) const;
-        template<typename T>
-        static inline T alignUp(const T &value, const T &align)
-        {
-            return (value + align - 1) & ~(align - 1);
-        }
 };
 
 VCamV4L2LoopBack::VCamV4L2LoopBack(QObject *parent):
@@ -323,10 +318,7 @@ AkVideoCaps::PixelFormat VCamV4L2LoopBac
 
 AkVideoCapsList VCamV4L2LoopBack::caps(const QString &deviceId) const
 {
-    if (!this->d->m_devicesFormats.contains(deviceId))
-        return {};
-
-    return this->d->m_devicesFormats[deviceId];
+    return this->d->m_devicesFormats.value(deviceId);
 }
 
 AkVideoCaps VCamV4L2LoopBack::currentCaps() const
@@ -891,14 +883,19 @@ bool VCamV4L2LoopBack::init()
         return false;
     }
 
-    v4l2_format fmt;
-    memset(&fmt, 0, sizeof(v4l2_format));
-    fmt.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-    this->d->xioctl(this->d->m_fd, VIDIOC_G_FMT, &fmt);
-
-    auto outputFormats = this->caps(this->d->m_device);
+    auto outputFormats = this->d->m_devicesFormats.value(this->d->m_device);
 
     if (outputFormats.empty()) {
+        qDebug() << "VirtualCamera: Output formats were not configured";
+        close(this->d->m_fd);
+        this->d->m_fd = -1;
+
+        return false;
+    }
+
+    AkVideoCaps outputCaps = this->d->m_currentCaps.nearest(outputFormats);
+
+    if (!outputCaps) {
         qDebug() << "VirtualCamera: Can't find a similar format:"
                  << this->d->m_currentCaps;
         close(this->d->m_fd);
@@ -907,71 +904,95 @@ bool VCamV4L2LoopBack::init()
         return false;
     }
 
-    this->d->m_outputCaps = this->d->m_currentCaps.nearest(outputFormats);
-    fmt.fmt.pix.pixelformat =
-            this->d->formatByAk(this->d->m_outputCaps.format()).v4l2;
-    fmt.fmt.pix.width = __u32(this->d->m_outputCaps.width());
-    fmt.fmt.pix.height = __u32(this->d->m_outputCaps.height());
+    auto v4l2PixelFormat = this->d->formatByAk(outputCaps.format()).v4l2;
+    int width = outputCaps.width();
+    int height = outputCaps.height();
+    auto specs = AkVideoCaps::formatSpecs(outputCaps.format());
+
+    v4l2_format fmt;
+    memset(&fmt, 0, sizeof(v4l2_format));
+    fmt.type = specs.planes() > 1?
+                   V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
+                   V4L2_BUF_TYPE_VIDEO_OUTPUT;
+    this->d->xioctl(this->d->m_fd, VIDIOC_G_FMT, &fmt);
+
+    if (fmt.type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
+        fmt.fmt.pix.pixelformat = v4l2PixelFormat;
+        fmt.fmt.pix.width = width;
+        fmt.fmt.pix.height = height;
+    } else {
+        fmt.fmt.pix_mp.pixelformat = v4l2PixelFormat;
+        fmt.fmt.pix_mp.width = width;
+        fmt.fmt.pix_mp.height = height;
+    }
 
     if (this->d->xioctl(this->d->m_fd, VIDIOC_S_FMT, &fmt) < 0) {
         qDebug() << "VirtualCamera: Can't set format:"
-                 << this->d->m_currentCaps;
+                 << outputCaps;
         close(this->d->m_fd);
         this->d->m_fd = -1;
 
         return false;
     }
 
-    v4l2_fract fps = {__u32(this->d->m_outputCaps.fps().num()),
-                      __u32(this->d->m_outputCaps.fps().den())};
-    this->d->setFps(this->d->m_fd, fps);
+    memcpy(&this->d->m_v4l2Format, &fmt, sizeof(v4l2_format));
+    v4l2_fract fps = {__u32(outputCaps.fps().num()),
+                      __u32(outputCaps.fps().den())};
+    this->d->setFps(this->d->m_fd, fmt.type, fps);
+    this->d->m_videoConverter.setOutputCaps(outputCaps);
 
     if (this->d->m_ioMethod == IoMethodReadWrite
         && capabilities.capabilities & V4L2_CAP_READWRITE
-        && this->d->initReadWrite(fmt.fmt.pix.sizeimage)) {
+        && this->d->initReadWrite(fmt)) {
     } else if (this->d->m_ioMethod == IoMethodMemoryMap
              && capabilities.capabilities & V4L2_CAP_STREAMING
-             && this->d->initMemoryMap()) {
+             && this->d->initMemoryMap(fmt)) {
     } else if (this->d->m_ioMethod == IoMethodUserPointer
              && capabilities.capabilities & V4L2_CAP_STREAMING
-             && this->d->initUserPointer(fmt.fmt.pix.sizeimage)) {
+             && this->d->initUserPointer(fmt)) {
     } else
         this->d->m_ioMethod = IoMethodUnknown;
 
     if (this->d->m_ioMethod != IoMethodUnknown)
-        return this->d->startOutput();
+        return this->d->startOutput(fmt);
 
     if (capabilities.capabilities & V4L2_CAP_STREAMING) {
-        if (this->d->initMemoryMap())
+        if (this->d->initMemoryMap(fmt))
             this->d->m_ioMethod = IoMethodMemoryMap;
-        else if (this->d->initUserPointer(fmt.fmt.pix.sizeimage))
+        else if (this->d->initUserPointer(fmt))
             this->d->m_ioMethod = IoMethodUserPointer;
     }
 
     if (this->d->m_ioMethod == IoMethodUnknown) {
         if (capabilities.capabilities & V4L2_CAP_READWRITE
-            && this->d->initReadWrite(fmt.fmt.pix.sizeimage))
+            && this->d->initReadWrite(fmt))
             this->d->m_ioMethod = IoMethodReadWrite;
         else
             return false;
     }
 
-    return this->d->startOutput();
+    return this->d->startOutput(fmt);
 }
 
 void VCamV4L2LoopBack::uninit()
 {
-    this->d->stopOutput();
+    this->d->stopOutput(this->d->m_v4l2Format);
+    int planesCount = this->d->planesCount(this->d->m_v4l2Format);
 
     if (!this->d->m_buffers.isEmpty()) {
-        if (this->d->m_ioMethod == IoMethodReadWrite)
-            delete [] this->d->m_buffers[0].start;
-        else if (this->d->m_ioMethod == IoMethodMemoryMap)
+        if (this->d->m_ioMethod == IoMethodReadWrite) {
             for (auto &buffer: this->d->m_buffers)
-                munmap(buffer.start, buffer.length);
-        else if (this->d->m_ioMethod == IoMethodUserPointer)
+                for (int i = 0; i < planesCount; i++)
+                    delete [] buffer.start[i];
+        } else if (this->d->m_ioMethod == IoMethodMemoryMap) {
             for (auto &buffer: this->d->m_buffers)
-                delete [] buffer.start;
+                for (int i = 0; i < planesCount; i++)
+                    munmap(buffer.start[i], buffer.length[i]);
+        } else if (this->d->m_ioMethod == IoMethodUserPointer) {
+            for (auto &buffer: this->d->m_buffers)
+                for (int i = 0; i < planesCount; i++)
+                    delete [] buffer.start[i];
+        }
     }
 
     close(this->d->m_fd);
@@ -1092,32 +1113,30 @@ bool VCamV4L2LoopBack::write(const AkVid
     if (values.value("Swap Read and Blue", false))
         packet_ = this->d->m_swapRBFilter->iStream(packet_);
 
-    this->d->m_scaleFilter->setProperty("width", this->d->m_outputCaps.width());
-    this->d->m_scaleFilter->setProperty("height", this->d->m_outputCaps.height());
-    this->d->m_scaleFilter->setProperty("scaling", values.value("Scaling Mode", 0));
-    this->d->m_scaleFilter->setProperty("aspectRatio", values.value("Aspect Ratio Mode", 0));
-    packet_ = this->d->m_scaleFilter->iStream(packet_);
-    packet_ = AkVideoPacket(packet_).convert(this->d->m_outputCaps.format());
+    this->d->m_videoConverter.setScalingMode(AkVideoConverter::ScalingMode(values.value("Scaling Mode", 0)));
+    this->d->m_videoConverter.setAspectRatioMode(AkVideoConverter::AspectRatioMode(values.value("Aspect Ratio Mode", 0)));
+    this->d->m_videoConverter.begin();
+    auto videoPacket = this->d->m_videoConverter.convert(packet_);
+    this->d->m_videoConverter.end();
 
-    if (!packet_)
+    if (!videoPacket)
         return false;
 
     if (this->d->m_ioMethod == IoMethodReadWrite) {
-        memcpy(this->d->m_buffers[0].start,
-               packet_.buffer().data(),
-               qMin<size_t>(this->d->m_buffers[0].length,
-                            packet_.buffer().size()));
+        this->d->writeFrame(this->d->m_buffers[0].start, videoPacket);
+        int planesCount = this->d->planesCount(this->d->m_v4l2Format);
 
-        return ::write(this->d->m_fd,
-                       this->d->m_buffers[0].start,
-                       this->d->m_buffers[0].length) >= 0;
-    }
-
-    if (this->d->m_ioMethod == IoMethodMemoryMap
+        for (int i = 0; i < planesCount; i++) {
+            if (::write(this->d->m_fd,
+                           this->d->m_buffers[0].start[i],
+                           this->d->m_buffers[0].length[i]) < 0)
+                return false;
+        }
+    } else if (this->d->m_ioMethod == IoMethodMemoryMap
         || this->d->m_ioMethod == IoMethodUserPointer) {
         v4l2_buffer buffer;
         memset(&buffer, 0, sizeof(v4l2_buffer));
-        buffer.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+        buffer.type = this->d->m_v4l2Format.type;
         buffer.memory = (this->d->m_ioMethod == IoMethodMemoryMap)?
                             V4L2_MEMORY_MMAP:
                             V4L2_MEMORY_USERPTR;
@@ -1125,13 +1144,9 @@ bool VCamV4L2LoopBack::write(const AkVid
         if (this->d->xioctl(this->d->m_fd, VIDIOC_DQBUF, &buffer) < 0)
             return false;
 
-        if (buffer.index >= quint32(this->d->m_buffers.size()))
-            return false;
-
-        memcpy(this->d->m_buffers[int(buffer.index)].start,
-               packet_.buffer().data(),
-               qMin<size_t>(buffer.bytesused,
-                            packet_.buffer().size()));
+        if (buffer.index < quint32(this->d->m_buffers.size()))
+            this->d->writeFrame(this->d->m_buffers[int(buffer.index)].start,
+                    videoPacket);
 
         return this->d->xioctl(this->d->m_fd, VIDIOC_QBUF, &buffer) >= 0;
     }
@@ -1142,6 +1157,7 @@ bool VCamV4L2LoopBack::write(const AkVid
 VCamV4L2LoopBackPrivate::VCamV4L2LoopBackPrivate(VCamV4L2LoopBack *self):
     self(self)
 {
+    this->initDefaultFormats();
     this->m_fsWatcher = new QFileSystemWatcher({"/dev"}, self);
     QObject::connect(this->m_fsWatcher,
                      &QFileSystemWatcher::directoryChanged,
@@ -1149,7 +1165,6 @@ VCamV4L2LoopBackPrivate::VCamV4L2LoopBac
                      [this] () {
         this->updateDevices();
     });
-    this->initDefaultFormats();
     this->updateDevices();
 }
 
@@ -1180,6 +1195,13 @@ int VCamV4L2LoopBackPrivate::xioctl(int
     return r;
 }
 
+int VCamV4L2LoopBackPrivate::planesCount(const v4l2_format &format) const
+{
+    return format.type == V4L2_BUF_TYPE_VIDEO_OUTPUT?
+                1:
+                format.fmt.pix_mp.num_planes;
+}
+
 bool VCamV4L2LoopBackPrivate::sudo(const QString &script)
 {
     if (this->m_rootMethod.isEmpty()) {
@@ -1200,10 +1222,21 @@ bool VCamV4L2LoopBackPrivate::sudo(const
         return false;
     }
 
+    auto shBin = this->whereBin("sh");
+
+    if (shBin.isEmpty()) {
+        static const QString msg = "Can't find default shell";
+        qDebug() << msg;
+        this->m_error += msg + " ";
+
+        return false;
+    }
+
     QProcess su;
-    su.start(sudoBin, QStringList {});
+    su.start(sudoBin, QStringList {shBin});
 
     if (su.waitForStarted()) {
+       qDebug() << "executing shell script with 'sh'" << Qt::endl << script.toUtf8();
        su.write(script.toUtf8());
        su.closeWriteChannel();
     }
@@ -1492,7 +1525,7 @@ QVariantMap VCamV4L2LoopBackPrivate::map
 
 inline const V4L2AkFormatMap &VCamV4L2LoopBackPrivate::v4l2AkFormatMap() const
 {
-    static const V4L2AkFormatMap formatMap = {
+    static const V4L2AkFormatMap formatMap {
         {0                  , AkVideoCaps::Format_none    , ""     },
 
         // RGB formats
@@ -1582,142 +1615,6 @@ const DeviceControls &VCamV4L2LoopBackPr
     return deviceControls;
 }
 
-AkVideoCapsList VCamV4L2LoopBackPrivate::formatFps(int fd,
-                                                   const v4l2_fmtdesc &format,
-                                                   __u32 width,
-                                                   __u32 height) const
-{
-    AkVideoCapsList caps;
-
-#ifdef VIDIOC_ENUM_FRAMEINTERVALS
-    v4l2_frmivalenum frmival;
-    memset(&frmival, 0, sizeof(v4l2_frmivalenum));
-    frmival.pixel_format = format.pixelformat;
-    frmival.width = width;
-    frmival.height = height;
-
-    for (frmival.index = 0;
-         this->xioctl(fd, VIDIOC_ENUM_FRAMEINTERVALS, &frmival) >= 0;
-         frmival.index++) {
-        if (!frmival.discrete.numerator
-            || !frmival.discrete.denominator)
-            continue;
-
-        AkFrac fps;
-
-        if (frmival.type == V4L2_FRMIVAL_TYPE_DISCRETE)
-            fps = AkFrac(frmival.discrete.denominator,
-                         frmival.discrete.numerator);
-        else
-            fps = AkFrac(frmival.stepwise.min.denominator,
-                         frmival.stepwise.max.numerator);
-
-        caps << AkVideoCaps(this->formatByV4L2(format.pixelformat).ak,
-                            int(width),
-                            int(height),
-                            fps);
-    }
-
-    if (caps.isEmpty()) {
-#endif
-        v4l2_streamparm params;
-        memset(&params, 0, sizeof(v4l2_streamparm));
-        params.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-
-        if (this->xioctl(fd, VIDIOC_G_PARM, &params) >= 0) {
-            AkFrac fps;
-
-            if (params.parm.capture.capability & V4L2_CAP_TIMEPERFRAME)
-                fps = AkFrac(params.parm.capture.timeperframe.denominator,
-                             params.parm.capture.timeperframe.numerator);
-            else
-                fps = AkFrac(30, 1);
-
-            caps << AkVideoCaps(this->formatByV4L2(format.pixelformat).ak,
-                                int(width),
-                                int(height),
-                                fps);
-        }
-#ifdef VIDIOC_ENUM_FRAMEINTERVALS
-    }
-#endif
-
-    return caps;
-}
-
-AkVideoCapsList VCamV4L2LoopBackPrivate::formats(int fd) const
-{
-    __u32 type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-    v4l2_capability capability;
-    memset(&capability, 0, sizeof(v4l2_capability));
-
-    if (this->xioctl(fd, VIDIOC_QUERYCAP, &capability) >= 0
-        && capability.capabilities & V4L2_CAP_VIDEO_OUTPUT) {
-        type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-    }
-
-    AkVideoCapsList caps;
-
-#ifndef VIDIOC_ENUM_FRAMESIZES
-    v4l2_format fmt;
-    memset(&fmt, 0, sizeof(v4l2_format));
-    fmt.type = type;
-    uint width = 0;
-    uint height = 0;
-
-    // Check if it has at least a default format.
-    if (this->xioctl(fd, VIDIOC_G_FMT, &fmt) >= 0) {
-        width = fmt.fmt.pix.width;
-        height = fmt.fmt.pix.height;
-    }
-
-    if (width <= 0 || height <= 0)
-        return {};
-#endif
-
-    // Enumerate all supported formats.
-    v4l2_fmtdesc fmtdesc;
-    memset(&fmtdesc, 0, sizeof(v4l2_fmtdesc));
-    fmtdesc.type = type;
-
-    for (fmtdesc.index = 0;
-         this->xioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc) >= 0;
-         fmtdesc.index++) {
-#ifdef VIDIOC_ENUM_FRAMESIZES
-        v4l2_frmsizeenum frmsize;
-        memset(&frmsize, 0, sizeof(v4l2_frmsizeenum));
-        frmsize.pixel_format = fmtdesc.pixelformat;
-
-        // Enumerate frame sizes.
-        for (frmsize.index = 0;
-             this->xioctl(fd, VIDIOC_ENUM_FRAMESIZES, &frmsize) >= 0;
-             frmsize.index++) {
-            if (frmsize.type == V4L2_FRMSIZE_TYPE_DISCRETE) {
-                caps << this->formatFps(fd,
-                                        fmtdesc,
-                                        frmsize.discrete.width,
-                                        frmsize.discrete.height);
-            } else {
-#if 0
-                for (uint height = frmsize.stepwise.min_height;
-                     height < frmsize.stepwise.max_height;
-                     height += frmsize.stepwise.step_height)
-                    for (uint width = frmsize.stepwise.min_width;
-                         width < frmsize.stepwise.max_width;
-                         width += frmsize.stepwise.step_width) {
-                        caps << this->formatFps(fd, fmtdesc, width, height);
-                    }
-#endif
-            }
-        }
-#else
-        caps << this->capsFps(fd, fmtdesc, width, height);
-#endif
-    }
-
-    return caps;
-}
-
 QList<QStringList> VCamV4L2LoopBackPrivate::combineMatrix(const QList<QStringList> &matrix) const
 {
     QStringList combined;
@@ -1897,11 +1794,13 @@ AkVideoCapsList VCamV4L2LoopBackPrivate:
     return {};
 }
 
-void VCamV4L2LoopBackPrivate::setFps(int fd, const v4l2_fract &fps)
+void VCamV4L2LoopBackPrivate::setFps(int fd,
+                                     __u32 bufferType,
+                                     const v4l2_fract &fps)
 {
     v4l2_streamparm streamparm;
     memset(&streamparm, 0, sizeof(v4l2_streamparm));
-    streamparm.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+    streamparm.type = bufferType;
 
     if (this->xioctl(fd, VIDIOC_G_PARM, &streamparm) >= 0)
         if (streamparm.parm.capture.capability & V4L2_CAP_TIMEPERFRAME) {
@@ -1911,28 +1810,45 @@ void VCamV4L2LoopBackPrivate::setFps(int
         }
 }
 
-bool VCamV4L2LoopBackPrivate::initReadWrite(quint32 bufferSize)
+bool VCamV4L2LoopBackPrivate::initReadWrite(const v4l2_format &format)
 {
+    int planesCount = this->planesCount(format);
     this->m_buffers.resize(1);
-    this->m_buffers[0].length = bufferSize;
-    this->m_buffers[0].start = new char[bufferSize];
+    bool error = false;
+
+    for (auto &buffer: this->m_buffers)
+        for (int i = 0; i < planesCount; i++) {
+            buffer.length[i] = format.fmt.pix.sizeimage;
+            buffer.start[i] = new char[format.fmt.pix.sizeimage];
+
+            if (!buffer.start[i]) {
+                error = true;
+
+                break;
+            }
+
+            memset(buffer.start[i], 0, buffer.length[i]);
+        }
+
+    if (error) {
+        for (auto &buffer: this->m_buffers)
+            for (int i = 0; i < planesCount; i++)
+                if (buffer.start[i])
+                    delete [] buffer.start[i];
 
-    if (!this->m_buffers[0].start) {
         this->m_buffers.clear();
 
         return false;
     }
 
-    memset(this->m_buffers[0].start, 0, bufferSize);
-
     return true;
 }
 
-bool VCamV4L2LoopBackPrivate::initMemoryMap()
+bool VCamV4L2LoopBackPrivate::initMemoryMap(const v4l2_format &format)
 {
     v4l2_requestbuffers requestBuffers;
     memset(&requestBuffers, 0, sizeof(v4l2_requestbuffers));
-    requestBuffers.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+    requestBuffers.type = format.type;
     requestBuffers.memory = V4L2_MEMORY_MMAP;
     requestBuffers.count = __u32(this->m_nBuffers);
 
@@ -1942,41 +1858,78 @@ bool VCamV4L2LoopBackPrivate::initMemory
     if (requestBuffers.count < 1)
         return false;
 
+    int planesCount = this->planesCount(format);
+
+    if (planesCount < 1)
+        return false;
+
     this->m_buffers.resize(int(requestBuffers.count));
     bool error = false;
 
     for (int i = 0; i < int(requestBuffers.count); i++) {
+        v4l2_plane planes[planesCount];
+        memset(planes, 0, planesCount * sizeof(v4l2_plane));
+
         v4l2_buffer buffer;
         memset(&buffer, 0, sizeof(v4l2_buffer));
-        buffer.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+        buffer.type = format.type;
         buffer.memory = V4L2_MEMORY_MMAP;
         buffer.index = __u32(i);
 
+        if (format.type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) {
+            buffer.length = planesCount;
+            buffer.m.planes = planes;
+        }
+
         if (this->xioctl(this->m_fd, VIDIOC_QUERYBUF, &buffer) < 0) {
             error = true;
 
             break;
         }
 
-        this->m_buffers[i].length = buffer.length;
-        this->m_buffers[i].start =
-                reinterpret_cast<char *>(mmap(nullptr,
-                                              buffer.length,
-                                              PROT_READ | PROT_WRITE,
-                                              MAP_SHARED,
-                                              this->m_fd,
-                                              buffer.m.offset));
+        if (format.type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
+            this->m_buffers[i].length[0] = buffer.length;
+            this->m_buffers[i].start[0] =
+                    reinterpret_cast<char *>(mmap(nullptr,
+                                                  buffer.length,
+                                                  PROT_READ | PROT_WRITE,
+                                                  MAP_SHARED,
+                                                  this->m_fd,
+                                                  buffer.m.offset));
 
-        if (this->m_buffers[i].start == MAP_FAILED) {
-            error = true;
+            if (this->m_buffers[i].start == MAP_FAILED) {
+                error = true;
 
-            break;
+                break;
+            }
+        } else {
+            for (int j = 0; j < planesCount; j++) {
+                this->m_buffers[i].length[j] = buffer.m.planes[j].length;
+                this->m_buffers[i].start[j] =
+                        reinterpret_cast<char *>(mmap(nullptr,
+                                                      buffer.m.planes[j].length,
+                                                      PROT_READ | PROT_WRITE,
+                                                      MAP_SHARED,
+                                                      this->m_fd,
+                                                      buffer.m.planes[j].m.mem_offset));
+
+                if(this->m_buffers[i].start[j] == MAP_FAILED){
+                    error = true;
+
+                    break;
+                }
+            }
+
+            if (error)
+                break;
         }
     }
 
     if (error) {
         for (auto &buffer: this->m_buffers)
-            munmap(buffer.start, buffer.length);
+            for (int i = 0; i < planesCount; i++)
+                if (buffer.start[i] != MAP_FAILED)
+                    munmap(buffer.start[i], buffer.length[i]);
 
         this->m_buffers.clear();
 
@@ -1986,36 +1939,58 @@ bool VCamV4L2LoopBackPrivate::initMemory
     return true;
 }
 
-bool VCamV4L2LoopBackPrivate::initUserPointer(quint32 bufferSize)
+bool VCamV4L2LoopBackPrivate::initUserPointer(const v4l2_format &format)
 {
     v4l2_requestbuffers requestBuffers;
     memset(&requestBuffers, 0, sizeof(v4l2_requestbuffers));
-    requestBuffers.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+    requestBuffers.type = format.type;
     requestBuffers.memory = V4L2_MEMORY_USERPTR;
     requestBuffers.count = __u32(this->m_nBuffers);
 
     if (this->xioctl(this->m_fd, VIDIOC_REQBUFS, &requestBuffers) < 0)
         return false;
 
+    int planesCount = this->planesCount(format);
     this->m_buffers.resize(int(requestBuffers.count));
     bool error = false;
 
     for (int i = 0; i < int(requestBuffers.count); i++) {
-        this->m_buffers[i].length = bufferSize;
-        this->m_buffers[i].start = new char[bufferSize];
+        if (format.type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
+            this->m_buffers[i].length[0] = format.fmt.pix.sizeimage;
+            this->m_buffers[i].start[0] = new char[format.fmt.pix.sizeimage];
 
-        if (!this->m_buffers[i].start) {
-            error = true;
+            if (!this->m_buffers[i].start[0]) {
+                error = true;
 
-            break;
-        }
+                break;
+            }
+
+            memset(this->m_buffers[i].start[0], 0, format.fmt.pix.sizeimage);
+        } else {
+            for (int j = 0; j < format.fmt.pix_mp.num_planes; j++) {
+                auto imageSize = format.fmt.pix_mp.plane_fmt[i].sizeimage;
+                this->m_buffers[i].length[i] = imageSize;
+                this->m_buffers[i].start[i] = new char[imageSize];
+
+                if (!this->m_buffers[i].start[i]) {
+                    error = true;
+
+                    break;
+                }
 
-        memset(this->m_buffers[i].start, 0, bufferSize);
+                memset(this->m_buffers[i].start[i], 0, imageSize);
+            }
+
+            if (error)
+                break;
+        }
     }
 
     if (error) {
         for (auto &buffer: this->m_buffers)
-            delete [] buffer.start;
+            for (int i = 0; i < planesCount; i++)
+                if (buffer.start[i])
+                    delete [] buffer.start[i];
 
         this->m_buffers.clear();
 
@@ -2027,13 +2002,13 @@ bool VCamV4L2LoopBackPrivate::initUserPo
 
 void VCamV4L2LoopBackPrivate::initDefaultFormats()
 {
-    QVector<AkVideoCaps::PixelFormat> pixelFormats = {
+    static const QVector<AkVideoCaps::PixelFormat> pixelFormats {
         AkVideoCaps::Format_yuyv422,
         AkVideoCaps::Format_uyvy422,
         AkVideoCaps::Format_0rgb,
         AkVideoCaps::Format_rgb24,
     };
-    QVector<QPair<int , int>> resolutions = {
+    static const QVector<QPair<int , int>> resolutions {
         { 640,  480},
         { 160,  120},
         { 320,  240},
@@ -2050,7 +2025,7 @@ void VCamV4L2LoopBackPrivate::initDefaul
                                                   {30, 1});
 }
 
-bool VCamV4L2LoopBackPrivate::startOutput()
+bool VCamV4L2LoopBackPrivate::startOutput(const v4l2_format &format)
 {
     bool error = false;
 
@@ -2058,7 +2033,7 @@ bool VCamV4L2LoopBackPrivate::startOutpu
         for (int i = 0; i < this->m_buffers.size(); i++) {
             v4l2_buffer buffer;
             memset(&buffer, 0, sizeof(v4l2_buffer));
-            buffer.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+            buffer.type = format.type;
             buffer.memory = V4L2_MEMORY_MMAP;
             buffer.index = __u32(i);
 
@@ -2066,28 +2041,47 @@ bool VCamV4L2LoopBackPrivate::startOutpu
                 error = true;
         }
 
-        v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+        auto type = v4l2_buf_type(format.type);
 
         if (this->xioctl(this->m_fd, VIDIOC_STREAMON, &type) < 0)
             error = true;
     } else if (this->m_ioMethod == IoMethodUserPointer) {
-        for (int i = 0; i < this->m_buffers.size(); i++) {
-            v4l2_buffer buffer;
-            memset(&buffer, 0, sizeof(v4l2_buffer));
-            buffer.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-            buffer.memory = V4L2_MEMORY_USERPTR;
-            buffer.index = __u32(i);
-            buffer.m.userptr = ulong(this->m_buffers[i].start);
-            buffer.length = __u32(this->m_buffers[i].length);
+        int planesCount = this->planesCount(format);
 
-            if (this->xioctl(this->m_fd, VIDIOC_QBUF, &buffer) < 0)
-                error = true;
-        }
+        if (planesCount > 0) {
+            for (int i = 0; i < this->m_buffers.size(); i++) {
+                v4l2_buffer buffer;
+                memset(&buffer, 0, sizeof(v4l2_buffer));
+                buffer.type = format.type;
+                buffer.memory = V4L2_MEMORY_USERPTR;
+                buffer.index = __u32(i);
+
+                if (this->m_v4l2Format.type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
+                    buffer.m.userptr = ulong(this->m_buffers[i].start[0]);
+                    buffer.length = __u32(this->m_buffers[i].length[0]);
+                } else {
+                    v4l2_plane planes[planesCount];
+                    memset(planes, 0, planesCount * sizeof(v4l2_plane));
+                    buffer.length = format.fmt.pix_mp.num_planes;
+                    buffer.m.planes = planes;
+
+                    for (int j = 0; j < buffer.length; j++) {
+                        planes[j].m.userptr = ulong(this->m_buffers[i].start[j]);
+                        planes[j].length = __u32(this->m_buffers[i].length[j]);
+                    }
+                }
+
+                if (this->xioctl(this->m_fd, VIDIOC_QBUF, &buffer) < 0)
+                    error = true;
+            }
 
-        v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+            auto type = v4l2_buf_type(format.type);
 
-        if (this->xioctl(this->m_fd, VIDIOC_STREAMON, &type) < 0)
+            if (this->xioctl(this->m_fd, VIDIOC_STREAMON, &type) < 0)
+                error = true;
+        } else {
             error = true;
+        }
     }
 
     if (error)
@@ -2096,15 +2090,46 @@ bool VCamV4L2LoopBackPrivate::startOutpu
     return !error;
 }
 
-void VCamV4L2LoopBackPrivate::stopOutput()
+void VCamV4L2LoopBackPrivate::stopOutput(const v4l2_format &format)
 {
     if (this->m_ioMethod == IoMethodMemoryMap
         || this->m_ioMethod == IoMethodUserPointer) {
-        v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
+        auto type = v4l2_buf_type(format.type);
         this->xioctl(this->m_fd, VIDIOC_STREAMOFF, &type);
     }
 }
 
+void VCamV4L2LoopBackPrivate::writeFrame(char * const *planeData,
+                                         const AkVideoPacket &videoPacket)
+{
+    if (this->m_v4l2Format.type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
+        auto oData = planeData[0];
+        auto iLineSize = videoPacket.lineSize(0);
+        auto oLineSize = this->m_v4l2Format.fmt.pix.bytesperline;
+        auto lineSize = qMin<size_t>(iLineSize, oLineSize);
+
+        for (int y = 0; y < this->m_v4l2Format.fmt.pix.height; ++y)
+            memcpy(oData + y * oLineSize,
+                   videoPacket.constLine(0, y),
+                   lineSize);
+    } else {
+        for (int plane = 0; plane < this->planesCount(this->m_v4l2Format); ++plane) {
+            auto oData = planeData[plane];
+            auto oLineSize = this->m_v4l2Format.fmt.pix_mp.plane_fmt[plane].bytesperline;
+            auto iLineSize = videoPacket.lineSize(plane);
+            auto lineSize = qMin<size_t>(iLineSize, oLineSize);
+            auto heightDiv = videoPacket.heightDiv(plane);
+
+            for (int y = 0; y < this->m_v4l2Format.fmt.pix_mp.height; ++y) {
+                int ys = y >> heightDiv;
+                memcpy(oData + ys * oLineSize,
+                       videoPacket.constLine(plane, y),
+                       lineSize);
+            }
+        }
+    }
+}
+
 void VCamV4L2LoopBackPrivate::updateDevices()
 {
     decltype(this->m_devices) devices;
@@ -2379,7 +2404,9 @@ inline QString VCamV4L2LoopBackPrivate::
         {VIDIOC_G_EXT_CTRLS        , "VIDIOC_G_EXT_CTRLS"        },
         {VIDIOC_S_EXT_CTRLS        , "VIDIOC_S_EXT_CTRLS"        },
         {VIDIOC_TRY_EXT_CTRLS      , "VIDIOC_TRY_EXT_CTRLS"      },
+#ifdef VIDIOC_ENUM_FRAMESIZES
         {VIDIOC_ENUM_FRAMESIZES    , "VIDIOC_ENUM_FRAMESIZES"    },
+#endif
         {VIDIOC_ENUM_FRAMEINTERVALS, "VIDIOC_ENUM_FRAMEINTERVALS"},
         {VIDIOC_G_ENC_INDEX        , "VIDIOC_G_ENC_INDEX"        },
         {VIDIOC_ENCODER_CMD        , "VIDIOC_ENCODER_CMD"        },
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VirtualCamera/src/v4l2lb/src/vcamv4l2lb.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VirtualCamera/src/v4l2lb/src/vcamv4l2lb.h
@@ -32,42 +32,42 @@ class VCamV4L2LoopBack: public VCam
         VCamV4L2LoopBack(QObject *parent=nullptr);
         ~VCamV4L2LoopBack();
 
-        Q_INVOKABLE QString error() const;
-        Q_INVOKABLE bool isInstalled() const;
-        Q_INVOKABLE QString installedVersion() const;
-        Q_INVOKABLE QStringList webcams() const;
-        Q_INVOKABLE QString device() const;
-        Q_INVOKABLE QString description(const QString &webcam) const;
-        Q_INVOKABLE QList<AkVideoCaps::PixelFormat> supportedOutputPixelFormats() const;
-        Q_INVOKABLE AkVideoCaps::PixelFormat defaultOutputPixelFormat() const;
-        Q_INVOKABLE AkVideoCapsList caps(const QString &webcam) const;
-        Q_INVOKABLE AkVideoCaps currentCaps() const;
-        Q_INVOKABLE QVariantList controls() const;
-        Q_INVOKABLE bool setControls(const QVariantMap &controls);
-        Q_INVOKABLE QList<quint64> clientsPids() const;
-        Q_INVOKABLE QString clientExe(quint64 pid) const;
-        Q_INVOKABLE QString rootMethod() const;
-        Q_INVOKABLE QStringList availableRootMethods() const;
+        Q_INVOKABLE QString error() const override;
+        Q_INVOKABLE bool isInstalled() const override;
+        Q_INVOKABLE QString installedVersion() const override;
+        Q_INVOKABLE QStringList webcams() const override;
+        Q_INVOKABLE QString device() const override;
+        Q_INVOKABLE QString description(const QString &webcam) const override;
+        Q_INVOKABLE QList<AkVideoCaps::PixelFormat> supportedOutputPixelFormats() const override;
+        Q_INVOKABLE AkVideoCaps::PixelFormat defaultOutputPixelFormat() const override;
+        Q_INVOKABLE AkVideoCapsList caps(const QString &webcam) const override;
+        Q_INVOKABLE AkVideoCaps currentCaps() const override;
+        Q_INVOKABLE QVariantList controls() const override;
+        Q_INVOKABLE bool setControls(const QVariantMap &controls) override;
+        Q_INVOKABLE QList<quint64> clientsPids() const override;
+        Q_INVOKABLE QString clientExe(quint64 pid) const override;
+        Q_INVOKABLE QString rootMethod() const override;
+        Q_INVOKABLE QStringList availableRootMethods() const override;
         Q_INVOKABLE QString deviceCreate(const QString &description,
-                                         const AkVideoCapsList &caps);
+                                         const AkVideoCapsList &caps) override;
         Q_INVOKABLE bool deviceEdit(const QString &deviceId,
                                     const QString &description,
-                                    const AkVideoCapsList &caps);
+                                    const AkVideoCapsList &caps) override;
         Q_INVOKABLE bool changeDescription(const QString &deviceId,
-                                           const QString &description);
-        Q_INVOKABLE bool deviceDestroy(const QString &deviceId);
-        Q_INVOKABLE bool destroyAllDevices();
+                                           const QString &description) override;
+        Q_INVOKABLE bool deviceDestroy(const QString &deviceId) override;
+        Q_INVOKABLE bool destroyAllDevices() override;
 
     private:
         VCamV4L2LoopBackPrivate *d;
 
     public slots:
-        bool init();
-        void uninit();
-        void setDevice(const QString &device);
-        void setCurrentCaps(const AkVideoCaps &currentCaps);
-        void setRootMethod(const QString &rootMethod);
-        bool write(const AkVideoPacket &packet);
+        bool init() override;
+        void uninit() override;
+        void setDevice(const QString &device) override;
+        void setCurrentCaps(const AkVideoCaps &currentCaps) override;
+        void setRootMethod(const QString &rootMethod) override;
+        bool write(const AkVideoPacket &packet) override;
 };
 
 #endif // VCAMV4L2LB_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VirtualCamera/src/vcam.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VirtualCamera/src/vcam.h
@@ -22,6 +22,7 @@
 
 #include <QObject>
 #include <QVariant>
+#include <akvideocaps.h>
 #include <akvideopacket.h>
 
 class VCam;
@@ -101,7 +102,7 @@ class VCam: public QObject
         void currentCapsChanged(const AkVideoCaps &error);
         void pictureChanged(const QString &picture);
         void rootMethodChanged(const QString &rootMethod);
-        void controlsChanged(const QVariantMap &controls) const;
+        void controlsChanged(const QVariantMap &controls);
 
     public slots:
         virtual bool init();
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VirtualCamera/src/virtualcamera.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VirtualCamera/src/virtualcamera.h
@@ -30,8 +30,8 @@ class VirtualCamera: public QObject, pub
 
     public:
         VirtualCamera();
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // VIRTUALCAMERA_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VirtualCamera/src/virtualcameraelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/VirtualCamera/src/virtualcameraelement.cpp
@@ -21,23 +21,22 @@
 #include <QDateTime>
 #include <QDir>
 #include <QImage>
+#include <QMutex>
 #include <QQmlComponent>
 #include <QQmlContext>
 #include <QQmlEngine>
 #include <QSharedPointer>
-#include <QMutex>
-#include <akcaps.h>
 #include <akfrac.h>
 #include <akpacket.h>
 #include <akplugininfo.h>
 #include <akpluginmanager.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "virtualcameraelement.h"
 #include "vcam.h"
 
 #define MAX_CAMERAS 64
-#define PREFERRED_ROUNDING 32
 
 class VirtualCameraElementPrivate
 {
@@ -104,12 +103,13 @@ VirtualCameraElement::~VirtualCameraElem
 QString VirtualCameraElement::error() const
 {
     this->d->m_mutex.lock();
-    QString error;
+    auto vcam = this->d->m_vcam;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_vcam)
-        error = this->d->m_vcam->error();
+    QString error;
 
-    this->d->m_mutex.unlock();
+    if (vcam)
+        error = vcam->error();
 
     return error;
 }
@@ -117,12 +117,13 @@ QString VirtualCameraElement::error() co
 QStringList VirtualCameraElement::medias() const
 {
     this->d->m_mutex.lock();
-    QStringList medias;
+    auto vcam = this->d->m_vcam;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_vcam)
-        medias = this->d->m_vcam->webcams();
+    QStringList medias;
 
-    this->d->m_mutex.unlock();
+    if (vcam)
+        medias = vcam->webcams();
 
     return medias;
 }
@@ -130,12 +131,13 @@ QStringList VirtualCameraElement::medias
 QString VirtualCameraElement::media() const
 {
     this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
+    this->d->m_mutex.unlock();
+
     QString media;
 
-    if (this->d->m_vcam)
-        media = this->d->m_vcam->device();
-
-    this->d->m_mutex.unlock();
+    if (vcam)
+        media = vcam->device();
 
     return media;
 }
@@ -153,12 +155,13 @@ int VirtualCameraElement::maxCameras() c
 AkVideoCaps::PixelFormatList VirtualCameraElement::supportedOutputPixelFormats() const
 {
     this->d->m_mutex.lock();
-    AkVideoCaps::PixelFormatList formats;
+    auto vcam = this->d->m_vcam;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_vcam)
-        formats = this->d->m_vcam->supportedOutputPixelFormats();
+    AkVideoCaps::PixelFormatList formats;
 
-    this->d->m_mutex.unlock();
+    if (vcam)
+        formats = vcam->supportedOutputPixelFormats();
 
     return formats;
 }
@@ -166,19 +169,20 @@ AkVideoCaps::PixelFormatList VirtualCame
 AkVideoCaps::PixelFormat VirtualCameraElement::defaultOutputPixelFormat() const
 {
     this->d->m_mutex.lock();
-    AkVideoCaps::PixelFormat format = AkVideoCaps::Format_none;
+    auto vcam = this->d->m_vcam;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_vcam)
-        format = this->d->m_vcam->defaultOutputPixelFormat();
+    AkVideoCaps::PixelFormat format = AkVideoCaps::Format_none;
 
-    this->d->m_mutex.unlock();
+    if (vcam)
+        format = vcam->defaultOutputPixelFormat();
 
     return format;
 }
 
-int VirtualCameraElement::defaultStream(const QString &mimeType) const
+int VirtualCameraElement::defaultStream(AkCaps::CapsType type) const
 {
-    if (mimeType == "video/x-raw")
+    if (type == AkCaps::CapsVideo)
         return 0;
 
     return -1;
@@ -187,12 +191,13 @@ int VirtualCameraElement::defaultStream(
 QString VirtualCameraElement::description(const QString &media) const
 {
     this->d->m_mutex.lock();
-    QString description;
+    auto vcam = this->d->m_vcam;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_vcam)
-        description = this->d->m_vcam->description(media);
+    QString description;
 
-    this->d->m_mutex.unlock();
+    if (vcam)
+        description = vcam->description(media);
 
     return description;
 }
@@ -203,12 +208,13 @@ AkCaps VirtualCameraElement::caps(int st
         return {};
 
     this->d->m_mutex.lock();
-    AkCaps caps;
+    auto vcam = this->d->m_vcam;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_vcam)
-        caps = this->d->m_vcam->currentCaps();
+    AkCaps caps;
 
-    this->d->m_mutex.unlock();
+    if (vcam)
+        caps = vcam->currentCaps();
 
     return caps;
 }
@@ -216,12 +222,13 @@ AkCaps VirtualCameraElement::caps(int st
 AkVideoCapsList VirtualCameraElement::outputCaps(const QString &webcam) const
 {
     this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
+    this->d->m_mutex.unlock();
+
     AkVideoCapsList caps;
 
-    if (this->d->m_vcam)
-        caps = this->d->m_vcam->caps(webcam);
-
-    this->d->m_mutex.unlock();
+    if (vcam)
+        caps = vcam->caps(webcam);
 
     return caps;
 }
@@ -235,21 +242,16 @@ QVariantMap VirtualCameraElement::addStr
     if (streamIndex != 0)
         return {};
 
-    AkVideoCaps videoCaps(streamCaps);
-    videoCaps.setFormat(AkVideoCaps::Format_rgb24);
-    videoCaps.setWidth(VirtualCameraElementPrivate::roundTo(videoCaps.width(),
-                                                            PREFERRED_ROUNDING));
-    videoCaps.setHeight(VirtualCameraElementPrivate::roundTo(videoCaps.height(),
-                                                             PREFERRED_ROUNDING));
-
     this->d->m_streamIndex = streamIndex;
+
     this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_vcam)
-        this->d->m_vcam->setCurrentCaps(videoCaps);
+    if (vcam)
+        vcam->setCurrentCaps(streamCaps);
 
-    this->d->m_mutex.unlock();
-    QVariantMap outputParams = {
+    QVariantMap outputParams {
         {"caps", QVariant::fromValue(streamCaps)}
     };
 
@@ -267,21 +269,15 @@ QVariantMap VirtualCameraElement::update
     if (!streamCaps)
         return {};
 
-    AkVideoCaps videoCaps(streamCaps);
-    videoCaps.setFormat(AkVideoCaps::Format_rgb24);
-    videoCaps.setWidth(VirtualCameraElementPrivate::roundTo(videoCaps.width(),
-                                                            PREFERRED_ROUNDING));
-    videoCaps.setHeight(VirtualCameraElementPrivate::roundTo(videoCaps.height(),
-                                                             PREFERRED_ROUNDING));
-
     this->d->m_streamIndex = streamIndex;
-    this->d->m_mutex.lock();
-
-    if (this->d->m_vcam)
-        this->d->m_vcam->setCurrentCaps(videoCaps);
 
+    this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
 
+    if (vcam)
+        vcam->setCurrentCaps(streamCaps);
+
     QVariantMap outputParams {
         {"caps", QVariant::fromValue(streamCaps)}
     };
@@ -296,18 +292,18 @@ QString VirtualCameraElement::createWebc
     QString error;
 
     this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
+    this->d->m_mutex.unlock();
 
-    if (this->d->m_vcam) {
-        webcam = this->d->m_vcam->deviceCreate(description, formats);
+    if (vcam) {
+        webcam = vcam->deviceCreate(description, formats);
 
         if (webcam.isEmpty())
-            error = this->d->m_vcam->error();
+            error = vcam->error();
     } else {
         error = "Invalid submodule";
     }
 
-    this->d->m_mutex.unlock();
-
     if (error.isEmpty())
         emit this->mediasChanged(this->medias());
     else
@@ -321,13 +317,14 @@ bool VirtualCameraElement::editWebcam(co
                                       const AkVideoCapsList &formats)
 {
     bool ok = false;
-    this->d->m_mutex.lock();
-
-    if (this->d->m_vcam)
-        ok = this->d->m_vcam->deviceEdit(webcam, description, formats);
 
+    this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
 
+    if (vcam)
+        ok = vcam->deviceEdit(webcam, description, formats);
+
     if (ok)
         emit this->mediasChanged(this->medias());
 
@@ -338,13 +335,14 @@ bool VirtualCameraElement::changeDescrip
                                              const QString &description)
 {
     bool ok = false;
-    this->d->m_mutex.lock();
-
-    if (this->d->m_vcam)
-        ok = this->d->m_vcam->changeDescription(webcam, description);
 
+    this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
 
+    if (vcam)
+        ok = vcam->changeDescription(webcam, description);
+
     if (ok)
         emit this->mediasChanged(this->medias());
 
@@ -354,13 +352,14 @@ bool VirtualCameraElement::changeDescrip
 bool VirtualCameraElement::removeWebcam(const QString &webcam)
 {
     bool ok = false;
-    this->d->m_mutex.lock();
-
-    if (this->d->m_vcam)
-        ok = this->d->m_vcam->deviceDestroy(webcam);
 
+    this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
 
+    if (vcam)
+        ok = vcam->deviceDestroy(webcam);
+
     if (ok)
         emit this->mediasChanged(this->medias());
 
@@ -370,13 +369,14 @@ bool VirtualCameraElement::removeWebcam(
 bool VirtualCameraElement::removeAllWebcams()
 {
     bool ok = false;
-    this->d->m_mutex.lock();
-
-    if (this->d->m_vcam)
-        ok = this->d->m_vcam->destroyAllDevices();
 
+    this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
 
+    if (vcam)
+        ok = vcam->destroyAllDevices();
+
     if (ok)
         emit this->mediasChanged(this->medias());
 
@@ -385,27 +385,29 @@ bool VirtualCameraElement::removeAllWebc
 
 QVariantList VirtualCameraElement::controls() const
 {
-    this->d->m_mutex.lock();
     QVariantList controls;
 
-    if (this->d->m_vcam)
-        controls = this->d->m_vcam->controls();
-
+    this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
 
+    if (vcam)
+        controls = vcam->controls();
+
     return controls;
 }
 
 bool VirtualCameraElement::setControls(const QVariantMap &controls)
 {
-    this->d->m_mutex.lock();
     bool result = false;
 
-    if (this->d->m_vcam)
-        result = this->d->m_vcam->setControls(controls);
-
+    this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
 
+    if (vcam)
+        result = vcam->setControls(controls);
+
     return result;
 }
 
@@ -420,92 +422,99 @@ bool VirtualCameraElement::resetControls
 
 QList<quint64> VirtualCameraElement::clientsPids() const
 {
-    this->d->m_mutex.lock();
     QList<quint64> pids;
 
-    if (this->d->m_vcam)
-        pids = this->d->m_vcam->clientsPids();
-
+    this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
 
+    if (vcam)
+        pids = vcam->clientsPids();
+
     return pids;
 }
 
 QString VirtualCameraElement::clientExe(quint64 pid) const
 {
-    this->d->m_mutex.lock();
     QString exe;
 
-    if (this->d->m_vcam)
-        exe = this->d->m_vcam->clientExe(pid);
-
+    this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
 
+    if (vcam)
+        exe = vcam->clientExe(pid);
+
     return exe;
 }
 
 bool VirtualCameraElement::driverInstalled() const
 {
-    this->d->m_mutex.lock();
     bool installed = false;
 
-    if (this->d->m_vcam)
-        installed = this->d->m_vcam->isInstalled();
-
+    this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
 
+    if (vcam)
+        installed = vcam->isInstalled();
+
     return installed;
 }
 
 QString VirtualCameraElement::driverVersion() const
 {
-    this->d->m_mutex.lock();
     QString version;
 
-    if (this->d->m_vcam)
-        version = this->d->m_vcam->installedVersion();
-
+    this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
 
+    if (vcam)
+        version = vcam->installedVersion();
+
     return version;
 }
 
 QString VirtualCameraElement::picture() const
 {
-    this->d->m_mutex.lock();
     QString picture;
 
-    if (this->d->m_vcam)
-        picture = this->d->m_vcam->picture();
-
+    this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
 
+    if (vcam)
+        picture = vcam->picture();
+
     return picture;
 }
 
 QString VirtualCameraElement::rootMethod() const
 {
-    this->d->m_mutex.lock();
     QString rootMethod;
 
-    if (this->d->m_vcam)
-        rootMethod = this->d->m_vcam->rootMethod();
-
+    this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
 
+    if (vcam)
+        rootMethod = vcam->rootMethod();
+
     return rootMethod;
 }
 
 QStringList VirtualCameraElement::availableRootMethods() const
 {
-    this->d->m_mutex.lock();
     QStringList methods;
 
-    if (this->d->m_vcam)
-        methods = this->d->m_vcam->availableRootMethods();
-
+    this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
 
+    if (vcam)
+        methods = vcam->availableRootMethods();
+
     return methods;
 }
 
@@ -528,100 +537,104 @@ void VirtualCameraElement::controlInterf
 AkPacket VirtualCameraElement::iVideoStream(const AkVideoPacket &packet)
 {
     if (this->state() == AkElement::ElementStatePlaying) {
-        auto videoPacket = packet.convert(AkVideoCaps::Format_rgb24);
         this->d->m_mutex.lock();
-
-        if (this->d->m_vcam)
-            this->d->m_vcam->write(videoPacket);
-
+        auto vcam = this->d->m_vcam;
         this->d->m_mutex.unlock();
+
+        if (vcam)
+            vcam->write(packet);
     }
 
-    akSend(packet)
+    if (packet)
+        emit this->oStream(packet);
+
+    return packet;
 }
 
 bool VirtualCameraElement::applyPicture()
 {
     bool result = false;
-    this->d->m_mutex.lock();
-
-    if (this->d->m_vcam)
-        result = this->d->m_vcam->applyPicture();
 
+    this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
 
+    if (vcam)
+        result = vcam->applyPicture();
+
     return result;
 }
 
 void VirtualCameraElement::setMedia(const QString &media)
 {
     this->d->m_mutex.lock();
-
-    if (this->d->m_vcam)
-        this->d->m_vcam->setDevice(media);
-
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
+
+    if (vcam)
+        vcam->setDevice(media);
 }
 
 void VirtualCameraElement::setPicture(const QString &picture)
 {
     this->d->m_mutex.lock();
-
-    if (this->d->m_vcam)
-        this->d->m_vcam->setPicture(picture);
-
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
+
+    if (vcam)
+        vcam->setPicture(picture);
 }
 
 void VirtualCameraElement::setRootMethod(const QString &rootMethod)
 {
     this->d->m_mutex.lock();
-
-    if (this->d->m_vcam)
-        this->d->m_vcam->setRootMethod(rootMethod);
-
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
+
+    if (vcam)
+        vcam->setRootMethod(rootMethod);
 }
 
 void VirtualCameraElement::resetMedia()
 {
     this->d->m_mutex.lock();
-
-    if (this->d->m_vcam)
-        this->d->m_vcam->resetPicture();
-
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
+
+    if (vcam)
+        vcam->resetPicture();
 }
 
 void VirtualCameraElement::resetPicture()
 {
     this->d->m_mutex.lock();
-
-    if (this->d->m_vcam)
-        this->d->m_vcam->setPicture(":/VirtualCamera/share/TestFrame/TestFrame.bmp");
-
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
+
+    if (vcam)
+        vcam->setPicture(":/VirtualCamera/share/TestFrame/TestFrame.bmp");
 }
 
 void VirtualCameraElement::resetRootMethod()
 {
     this->d->m_mutex.lock();
-
-    if (this->d->m_vcam)
-        this->d->m_vcam->resetRootMethod();
-
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
+
+    if (vcam)
+        vcam->resetRootMethod();
 }
 
 void VirtualCameraElement::clearStreams()
 {
     this->d->m_streamIndex = -1;
-    this->d->m_mutex.lock();
-
-    if (this->d->m_vcam)
-        this->d->m_vcam->resetCurrentCaps();
 
+    this->d->m_mutex.lock();
+    auto vcam = this->d->m_vcam;
     this->d->m_mutex.unlock();
+
+    if (vcam)
+        vcam->resetCurrentCaps();
 }
 
 bool VirtualCameraElement::setState(AkElement::ElementState state)
@@ -634,20 +647,17 @@ bool VirtualCameraElement::setState(AkEl
         case AkElement::ElementStatePaused:
         case AkElement::ElementStatePlaying: {
             this->d->m_mutex.lock();
+            auto vcam = this->d->m_vcam;
+            this->d->m_mutex.unlock();
 
-            if (!this->d->m_vcam) {
-                this->d->m_mutex.unlock();
+            if (!vcam) {
 
                 return false;
             }
 
-            if (!this->d->m_vcam->init()) {
-                this->d->m_mutex.unlock();
-
+            if (!vcam->init())
                 return false;
-            }
 
-            this->d->m_mutex.unlock();
             this->d->m_playing = true;
 
             return AkElement::setState(state);
@@ -660,17 +670,18 @@ bool VirtualCameraElement::setState(AkEl
     }
     case AkElement::ElementStatePaused: {
         switch (state) {
-        case AkElement::ElementStateNull:
+        case AkElement::ElementStateNull: {
             this->d->m_playing = false;
 
             this->d->m_mutex.lock();
-
-            if (this->d->m_vcam)
-                this->d->m_vcam->uninit();
-
+            auto vcam = this->d->m_vcam;
             this->d->m_mutex.unlock();
 
+            if (vcam)
+                vcam->uninit();
+
             return AkElement::setState(state);
+        }
         case AkElement::ElementStatePlaying:
             return AkElement::setState(state);
         case AkElement::ElementStatePaused:
@@ -681,17 +692,18 @@ bool VirtualCameraElement::setState(AkEl
     }
     case AkElement::ElementStatePlaying: {
         switch (state) {
-        case AkElement::ElementStateNull:
+        case AkElement::ElementStateNull: {
             this->d->m_playing = false;
 
             this->d->m_mutex.lock();
-
-            if (this->d->m_vcam)
-                this->d->m_vcam->uninit();
-
+            auto vcam = this->d->m_vcam;
             this->d->m_mutex.unlock();
 
+            if (vcam)
+                vcam->uninit();
+
             return AkElement::setState(state);
+        }
         case AkElement::ElementStatePaused:
             return AkElement::setState(state);
         case AkElement::ElementStatePlaying:
@@ -728,7 +740,6 @@ void VirtualCameraElementPrivate::linksC
 
     auto state = self->state();
     self->setState(AkElement::ElementStateNull);
-    this->m_mutex.lock();
 
     AkVideoCaps videoCaps;
     QString rootMethod;
@@ -740,6 +751,7 @@ void VirtualCameraElementPrivate::linksC
         rootMethod = this->m_vcam->rootMethod();
     }
 
+    this->m_mutex.lock();
     this->m_vcam = akPluginManager->create<VCam>("VideoSink/VirtualCamera/Impl/*");
     this->m_mutex.unlock();
     this->m_vcamImpl = links["VideoSink/VirtualCamera/Impl/*"];
--- webcamoid-9.0.0.orig/libAvKys/Plugins/VirtualCamera/src/virtualcameraelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/VirtualCamera/src/virtualcameraelement.h
@@ -20,6 +20,7 @@
 #ifndef VIRTUALCAMERAELEMENT_H
 #define VIRTUALCAMERAELEMENT_H
 
+#include <akcaps.h>
 #include <QVariantMap>
 #include <akelement.h>
 #include <akvideocaps.h>
@@ -86,7 +87,7 @@ class VirtualCameraElement: public AkEle
         Q_INVOKABLE int maxCameras() const;
         Q_INVOKABLE AkVideoCaps::PixelFormatList supportedOutputPixelFormats() const;
         Q_INVOKABLE AkVideoCaps::PixelFormat defaultOutputPixelFormat() const;
-        Q_INVOKABLE int defaultStream(const QString &mimeType) const;
+        Q_INVOKABLE int defaultStream(AkCaps::CapsType type) const;
         Q_INVOKABLE QString description(const QString &media) const;
         Q_INVOKABLE AkCaps caps(int stream) const;
         Q_INVOKABLE AkVideoCapsList outputCaps(const QString &webcam) const;
@@ -119,14 +120,14 @@ class VirtualCameraElement: public AkEle
         VirtualCameraElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void errorChanged(const QString &error);
-        void mediasChanged(const QStringList &medias) const;
+        void mediasChanged(const QStringList &medias);
         void mediaChanged(const QString &media);
         void streamsChanged(const QList<int> &streams);
         void maxCamerasChanged(int maxCameras);
@@ -144,7 +145,7 @@ class VirtualCameraElement: public AkEle
         void resetPicture();
         void resetRootMethod();
         void clearStreams();
-        bool setState(AkElement::ElementState state);
+        bool setState(AkElement::ElementState state) override;
 };
 
 #endif // VIRTUALCAMERAELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Warhol/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Warhol/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Warhol
 target_compile_definitions(Warhol PRIVATE AVKYS_PLUGIN_WARHOL)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Warhol avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Warhol RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Warhol/pspec.json
+++ webcamoid-9.0.0/libAvKys/Plugins/Warhol/pspec.json
@@ -6,6 +6,7 @@
             "description": "Warhol",
             "id": "VideoFilter/Warhol",
             "implements": ["Element", "VideoFilter"],
+            "depends": ["VideoFilter/Otsu"],
             "type": "qtplugin"
         }
     ]
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Warhol/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Warhol/share/qml/main.qml
@@ -20,22 +20,259 @@
 import QtQuick 2.12
 import QtQuick.Controls 2.5
 import QtQuick.Layouts 1.3
+import Ak 1.0
+import AkControls 1.0 as AK
 
 GridLayout {
-    columns: 2
+    columns: 3
+
+    Connections {
+        target: Warhol
+
+        function onFrameLenChanged(frameLen)
+        {
+            sldFrameLen.value = frameLen
+            spbFrameLen.value = frameLen
+        }
+
+        function onLevelsChanged(levels)
+        {
+            sldLevels.value = levels
+            spbLevels.value = levels
+        }
+
+        function onSaturationChanged(saturation)
+        {
+            sldSaturation.value = saturation
+            spbSaturation.value = saturation
+        }
+
+        function onLuminanceChanged(luminance)
+        {
+            sldLuminance.value = luminance
+            spbLuminance.value = luminance
+        }
+
+        function onPaletteOffsetChanged(paletteOffset)
+        {
+            sldPaletteOffset.value = paletteOffset
+            spbPaletteOffset.value = paletteOffset
+        }
+
+        function onShadowThLowChanged(shadowThLow)
+        {
+            sldShadowTh.first.value = shadowThLow
+            spbShadowThLow.value = shadowThLow
+        }
+
+        function onShadowThHiChanged(shadowThHi)
+        {
+            sldShadowTh.second.value = shadowThHi
+            spbShadowThHi.value = shadowThHi
+        }
+    }
 
     Label {
-        text: qsTr("N° of frames")
+        text: qsTr("<b>Palette</b>")
+        topPadding: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+        bottomPadding: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+        wrapMode: Text.Wrap
+        Layout.columnSpan: 3
+        Layout.fillWidth: true
     }
-    TextField {
-        text: Warhol.nFrames
-        placeholderText: qsTr("N° of frames")
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /\d+/
-        }
+    Label {
+        id: txtFrameLen
+        text: qsTr("Frame length")
+    }
+    Slider {
+        id: sldFrameLen
+        value: Warhol.frameLen
+        stepSize: 1
+        from: 1
+        to: 4
+        Layout.fillWidth: true
+        Accessible.name: txtFrameLen.text
+
+        onValueChanged: Warhol.frameLen = value
+    }
+    SpinBox {
+        id: spbFrameLen
+        value: Warhol.frameLen
+        from: sldFrameLen.from
+        to: sldFrameLen.to
+        stepSize: sldFrameLen.stepSize
+        editable: true
+        Accessible.name: txtFrameLen.text
+
+        onValueChanged: Warhol.frameLen = Number(value)
+    }
+    Label {
+        id: txtLevels
+        text: qsTr("Levels")
+    }
+    Slider {
+        id: sldLevels
+        value: Warhol.levels
+        stepSize: 1
+        from: 2
+        to: 4
         Layout.fillWidth: true
+        Accessible.name: txtLevels.text
+
+        onValueChanged: Warhol.levels = value
+    }
+    SpinBox {
+        id: spbLevels
+        value: Warhol.levels
+        from: sldLevels.from
+        to: sldLevels.to
+        stepSize: sldLevels.stepSize
+        editable: true
+        Accessible.name: txtLevels.text
+
+        onValueChanged: Warhol.levels = Number(value)
+    }
+    Label {
+        id: txtSaturation
+        text: qsTr("Saturation")
+    }
+    Slider {
+        id: sldSaturation
+        value: Warhol.saturation
+        stepSize: 1
+        to: 255
+        Layout.fillWidth: true
+        Accessible.name: txtSaturation.text
+
+        onValueChanged: Warhol.saturation = value
+    }
+    SpinBox {
+        id: spbSaturation
+        value: Warhol.saturation
+        from: sldSaturation.from
+        to: sldSaturation.to
+        stepSize: sldSaturation.stepSize
+        editable: true
+        Accessible.name: txtSaturation.text
 
-        onTextChanged: Warhol.nFrames = Number(text)
+        onValueChanged: Warhol.saturation = Number(value)
+    }
+    Label {
+        id: txtLuminance
+        text: qsTr("Luminance")
+    }
+    Slider {
+        id: sldLuminance
+        value: Warhol.luminance
+        stepSize: 1
+        to: 255
+        Layout.fillWidth: true
+        Accessible.name: txtLuminance.text
+
+        onValueChanged: Warhol.luminance = value
+    }
+    SpinBox {
+        id: spbLuminance
+        value: Warhol.luminance
+        from: sldLuminance.from
+        to: sldLuminance.to
+        stepSize: sldLuminance.stepSize
+        editable: true
+        Accessible.name: txtLuminance.text
+
+        onValueChanged: Warhol.luminance = Number(value)
+    }
+    Label {
+        id: txtPaletteOffset
+        text: qsTr("Hue offset")
+    }
+    Slider {
+        id: sldPaletteOffset
+        value: Warhol.paletteOffset
+        stepSize: 1
+        to: 360
+        Layout.fillWidth: true
+        Accessible.name: txtPaletteOffset.text
+
+        onValueChanged: Warhol.paletteOffset = value
+    }
+    SpinBox {
+        id: spbPaletteOffset
+        value: Warhol.paletteOffset
+        from: sldPaletteOffset.from
+        to: sldPaletteOffset.to
+        stepSize: sldPaletteOffset.stepSize
+        editable: true
+        Accessible.name: txtPaletteOffset.text
+
+        onValueChanged: Warhol.paletteOffset = Number(value)
+    }
+
+    Label {
+        text: qsTr("<b>Shadow</b>")
+        topPadding: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+        bottomPadding: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+        wrapMode: Text.Wrap
+        Layout.columnSpan: 3
+        Layout.fillWidth: true
+    }
+    Label {
+        id: txtShadowThLow
+        text: qsTr("Shadow threshold")
+    }
+    RowLayout {
+        Layout.columnSpan: 2
+
+        SpinBox {
+            id: spbShadowThLow
+            value: Warhol.shadowThLow
+            to: sldShadowTh.to
+            stepSize: sldShadowTh.stepSize
+            editable: true
+            Accessible.name: qsTr("Shadow threshold low")
+
+            onValueChanged: Warhol.shadowThLow = Number(value)
+        }
+        RangeSlider {
+            id: sldShadowTh
+            first.value: Warhol.shadowThLow
+            second.value: Warhol.shadowThHi
+            stepSize: 1
+            to: 255
+            Layout.fillWidth: true
+            Accessible.name: txtShadowThLow.text
+
+            first.onValueChanged: Warhol.shadowThLow = first.value
+            second.onValueChanged: Warhol.shadowThHi = second.value
+        }
+        SpinBox {
+            id: spbShadowThHi
+            value: Warhol.shadowThHi
+            to: sldShadowTh.to
+            stepSize: sldShadowTh.stepSize
+            editable: true
+            Accessible.name: qsTr("Shadow threshold hi")
+
+            onValueChanged: Warhol.shadowThHi = Number(value)
+        }
+    }
+    Label {
+        id: txtShadowColor
+        text: qsTr("Shadow color")
+    }
+    RowLayout {
+        Layout.columnSpan: 2
+
+        Item {
+            Layout.fillWidth: true
+        }
+        AK.ColorButton {
+            currentColor: AkUtils.fromRgba(Warhol.shadowColor)
+            title: qsTr("Choose the color of the shadow")
+            showAlphaChannel: true
+            Accessible.description: txtShadowColor.text
+
+            onCurrentColorChanged: Warhol.shadowColor = AkUtils.toRgba(currentColor)
+        }
     }
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Warhol/src/warhol.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Warhol/src/warhol.h
@@ -29,8 +29,8 @@ class Warhol: public QObject, public AkP
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // WARHOL_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Warhol/src/warholelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Warhol/src/warholelement.cpp
@@ -17,9 +17,14 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
+#include <QColor>
 #include <QQmlContext>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akpluginmanager.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
+#include <akvideomixer.h>
 #include <akvideopacket.h>
 
 #include "warholelement.h"
@@ -27,28 +32,84 @@
 class WarholElementPrivate
 {
     public:
-        QVector<quint32> m_colorTable;
-        int m_nFrames {3};
+        int m_frameLen {2};
+        int m_levels {3};
+        int m_saturation {127};
+        int m_luminance {127};
+        int m_paletteOffset {0};
+        int m_shadowThLow {0};
+        int m_shadowThHi {31};
+        QRgb m_shadowColor {qRgb(0, 0, 0)};
+        QRgb *m_palette {nullptr};
+        AkElementPtr m_otsuFilter {akPluginManager->create<AkElement>("VideoFilter/Otsu")};
+        AkVideoConverter m_videoConverter;
+        AkVideoMixer m_videoMixer;
+
+        void createPalette(int frameLen,
+                           int levels,
+                           int saturation,
+                           int luminance,
+                           int paletteOffset);
+        AkVideoPacket colorize(const AkVideoPacket &otsu,
+                               int frame,
+                               int levels) const;
+        AkVideoPacket blackLevel(const AkVideoPacket &src,
+                                 QRgb color,
+                                 int thresholdLow,
+                                 int thresholdHi) const;
 };
 
 WarholElement::WarholElement(): AkElement()
 {
     this->d = new WarholElementPrivate;
-    this->d->m_colorTable = {
-        0x000080, 0x008000, 0x800000,
-        0x00e000, 0x808000, 0x800080,
-        0x808080, 0x008080, 0xe0e000
-    };
 }
 
 WarholElement::~WarholElement()
 {
+    if (this->d->m_palette)
+        delete [] this->d->m_palette;
+
     delete this->d;
 }
 
-int WarholElement::nFrames() const
+int WarholElement::frameLen() const
+{
+    return this->d->m_frameLen;
+}
+
+int WarholElement::levels() const
+{
+    return this->d->m_levels;
+}
+
+int WarholElement::saturation() const
+{
+    return this->d->m_saturation;
+}
+
+int WarholElement::luminance() const
+{
+    return this->d->m_luminance;
+}
+
+int WarholElement::paletteOffset() const
 {
-    return this->d->m_nFrames;
+    return this->d->m_paletteOffset;
+}
+
+int WarholElement::shadowThLow() const
+{
+    return this->d->m_shadowThLow;
+}
+
+int WarholElement::shadowThHi() const
+{
+    return this->d->m_shadowThHi;
+}
+
+QRgb WarholElement::shadowColor() const
+{
+    return this->d->m_shadowColor;
 }
 
 QString WarholElement::controlInterfaceProvide(const QString &controlId) const
@@ -69,46 +130,290 @@ void WarholElement::controlInterfaceConf
 
 AkPacket WarholElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
-    int nFrames = this->d->m_nFrames;
-
-    for (int y = 0; y < src.height(); y++) {
-        auto oLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
-
-        for (int x = 0; x < src.width(); x++) {
-            int p = (x * nFrames) % src.width();
-            int q = (y * nFrames) % src.height();
-            int i = ((y * nFrames) / src.height()) * nFrames +
-                    ((x * nFrames) / src.width());
-
-            i = qBound(0, i, this->d->m_colorTable.size() - 1);
-            auto iLine = reinterpret_cast<const QRgb *>(src.constScanLine(q));
-            oLine[x] = (iLine[p] ^ this->d->m_colorTable[i]) | 0xff000000;
+    int frameLen = qMax(this->d->m_frameLen, 1);
+    int subWidth = packet.caps().width() / frameLen;
+    int subHeight = packet.caps().height() / frameLen;
+
+    this->d->m_videoConverter.begin();
+    this->d->m_videoConverter.setOutputCaps({AkVideoCaps::Format_graya8pack,
+                                             subWidth,
+                                             subHeight,
+                                             {}});
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    int levels = qBound(2, this->d->m_levels, 4);
+    this->d->createPalette(frameLen,
+                           levels,
+                           qBound(0, this->d->m_saturation, 255),
+                           qBound(0, this->d->m_luminance, 255),
+                           qBound(0, this->d->m_paletteOffset, 360));
+    this->d->m_otsuFilter->setProperty("levels", levels);
+    AkVideoPacket otsu = this->d->m_otsuFilter->iStream(src);
+
+    auto shadowThLow = qBound(0, this->d->m_shadowThLow, 255);
+    auto shadowThHi = qBound(0, this->d->m_shadowThHi, 255);
+
+    if (shadowThLow > shadowThHi)
+        std::swap(shadowThLow, shadowThHi);
+
+    bool drawBack = shadowThHi > 0;
+    AkVideoPacket black;
+
+    if (drawBack)
+        black = this->d->blackLevel(src,
+                                    this->d->m_shadowColor,
+                                    shadowThLow,
+                                    shadowThHi);
+
+    AkVideoPacket dst({AkVideoCaps::Format_argbpack,
+                       subWidth * frameLen,
+                       subHeight * frameLen,
+                       src.caps().fps()});
+    dst.copyMetadata(src);
+
+    for (int j = 0; j < frameLen; j++) {
+        int jOffset = j * frameLen;
+
+        for (int i = 0; i < frameLen; i++) {
+            auto frame = this->d->colorize(otsu, i + jOffset, levels);
+
+            this->d->m_videoMixer.setFlags(AkVideoMixer::MixerFlagLightweightCache
+                                           | AkVideoMixer::MixerFlagForceBlit);
+            this->d->m_videoMixer.begin(&dst);
+            this->d->m_videoMixer.draw(i * subWidth, j * subHeight, frame);
+            this->d->m_videoMixer.end();
+
+            if (drawBack) {
+                this->d->m_videoMixer.setFlags(AkVideoMixer::MixerFlagLightweightCache);
+                this->d->m_videoMixer.begin(&dst);
+                this->d->m_videoMixer.draw(i * subWidth, j * subHeight, black);
+                this->d->m_videoMixer.end();
+            }
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
+}
+
+void WarholElement::setFrameLen(int frameLen)
+{
+    if (this->d->m_frameLen == frameLen)
+        return;
+
+    this->d->m_frameLen = frameLen;
+    emit this->frameLenChanged(frameLen);
+}
+
+void WarholElement::setLevels(int levels)
+{
+    if (this->d->m_levels == levels)
+        return;
+
+    this->d->m_levels = levels;
+    emit this->levelsChanged(levels);
+}
+
+void WarholElement::setSaturation(int saturation)
+{
+    if (this->d->m_saturation == saturation)
+        return;
+
+    this->d->m_saturation = saturation;
+    emit this->saturationChanged(saturation);
+}
+
+void WarholElement::setLuminance(int luminance)
+{
+    if (this->d->m_luminance == luminance)
+        return;
+
+    this->d->m_luminance = luminance;
+    emit this->luminanceChanged(luminance);
+}
+
+void WarholElement::setPaletteOffset(int paletteOffset)
+{
+    if (this->d->m_paletteOffset == paletteOffset)
+        return;
+
+    this->d->m_paletteOffset = paletteOffset;
+    emit this->paletteOffsetChanged(paletteOffset);
+}
+
+void WarholElement::setShadowThLow(int shadowThLow)
+{
+    if (this->d->m_shadowThLow == shadowThLow)
+        return;
+
+    this->d->m_shadowThLow = shadowThLow;
+    emit this->shadowThLowChanged(shadowThLow);
+}
+
+void WarholElement::setShadowThHi(int shadowThHi)
+{
+    if (this->d->m_shadowThHi == shadowThHi)
+        return;
+
+    this->d->m_shadowThHi = shadowThHi;
+    emit this->shadowThHiChanged(shadowThHi);
+}
+
+void WarholElement::setShadowColor(QRgb shadowColor)
+{
+    if (this->d->m_shadowColor == shadowColor)
+        return;
+
+    this->d->m_shadowColor = shadowColor;
+    emit this->shadowColorChanged(shadowColor);
+}
+
+void WarholElement::resetFrameLen()
+{
+    this->setFrameLen(2);
+}
+
+void WarholElement::resetLevels()
+{
+    this->setLevels(3);
+}
+
+void WarholElement::resetSaturation()
+{
+    this->setSaturation(127);
+}
+
+void WarholElement::resetLuminance()
+{
+    this->setLuminance(127);
+}
+
+void WarholElement::resetPaletteOffset()
+{
+    this->setPaletteOffset(0);
 }
 
-void WarholElement::setNFrames(int nFrames)
+void WarholElement::resetShadowThLow()
 {
-    if (this->d->m_nFrames == nFrames)
+    this->setShadowThLow(0);
+}
+
+void WarholElement::resetShadowThHi()
+{
+    this->setShadowThHi(31);
+}
+
+void WarholElement::resetShadowColor()
+{
+    this->setShadowColor(qRgb(0, 0, 0));
+}
+
+void WarholElementPrivate::createPalette(int frameLen,
+                                         int levels,
+                                         int saturation,
+                                         int luminance,
+                                         int paletteOffset)
+{
+    if (this->m_palette) {
+        delete [] this->m_palette;
+        this->m_palette = nullptr;
+    }
+
+    auto frames = size_t(frameLen) * size_t(frameLen);
+    auto paletteSize = frames * size_t(levels);
+
+    if (paletteSize < 1)
         return;
 
-    this->d->m_nFrames = nFrames;
-    emit this->nFramesChanged(nFrames);
+    this->m_palette = new QRgb [paletteSize];
+
+    for (size_t j = 0; j < frames; j++) {
+        auto jOffset = j * levels;
+        auto framePalette = this->m_palette + jOffset;
+
+        for (size_t i = 0; i < levels; i++) {
+            int hue = (paletteOffset + 360 * (i * frames + jOffset) / paletteSize) % 360;
+            auto color = QColor::fromHsl(hue, saturation, luminance);
+            framePalette[i] = color.rgb();
+        }
+    }
 }
 
-void WarholElement::resetNFrames()
+AkVideoPacket WarholElementPrivate::colorize(const AkVideoPacket &otsu,
+                                             int frame,
+                                             int levels) const
 {
-    this->setNFrames(3);
+    auto ocaps = otsu.caps();
+    ocaps.setFormat(AkVideoCaps::Format_argbpack);
+    AkVideoPacket dst(ocaps);
+    dst.copyMetadata(otsu);
+
+    auto framePalette = this->m_palette + frame * levels;
+    int lumaToLevel[256];
+
+    for (int luma = 0; luma < 256; luma++)
+        lumaToLevel[luma] = (levels * luma) >> 8;
+
+    for (int y = 0; y < otsu.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const quint16 *>(otsu.constLine(0, y));
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < otsu.caps().width(); x++) {
+            auto &pixel = srcLine[x];
+            auto &color = framePalette[lumaToLevel[pixel >> 8]];
+            dstLine[x] = qRgba(qRed(color),
+                               qGreen(color),
+                               qBlue(color),
+                               pixel & 0xff);
+        }
+    }
+
+    return dst;
+}
+
+AkVideoPacket WarholElementPrivate::blackLevel(const AkVideoPacket &src,
+                                               QRgb color,
+                                               int thresholdLow,
+                                               int thresholdHi) const
+{
+    auto ocaps = src.caps();
+    ocaps.setFormat(AkVideoCaps::Format_argbpack);
+    AkVideoPacket dst(ocaps);
+    dst.copyMetadata(src);
+
+    int r = qRed(color);
+    int g = qGreen(color);
+    int b = qBlue(color);
+    int a = qAlpha(color);
+
+    for (int y = 0; y < dst.caps().height(); y++) {
+        auto srcLine = reinterpret_cast<const quint16 *>(src.constLine(0, y));
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < dst.caps().width(); x++) {
+            auto &pixel = srcLine[x];
+            int y = pixel >> 8;
+
+            if (y < thresholdLow)
+                y = 0;
+
+            if (y > thresholdHi)
+                y = 255;
+
+            dstLine[x] = qRgba(r,
+                               g,
+                               b,
+                               ((255 - y) * (pixel & 0xff) * a) >> 16);
+        }
+    }
+
+    return dst;
 }
 
 #include "moc_warholelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Warhol/src/warholelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Warhol/src/warholelement.h
@@ -20,6 +20,8 @@
 #ifndef WARHOLELEMENT_H
 #define WARHOLELEMENT_H
 
+#include <qrgb.h>
+
 #include <akelement.h>
 
 class WarholElementPrivate;
@@ -27,33 +29,96 @@ class WarholElementPrivate;
 class WarholElement: public AkElement
 {
     Q_OBJECT
-    Q_PROPERTY(int nFrames
-               READ nFrames
-               WRITE setNFrames
-               RESET resetNFrames
-               NOTIFY nFramesChanged)
+    Q_PROPERTY(int frameLen
+               READ frameLen
+               WRITE setFrameLen
+               RESET resetFrameLen
+               NOTIFY frameLenChanged)
+    Q_PROPERTY(int levels
+               READ levels
+               WRITE setLevels
+               RESET resetLevels
+               NOTIFY levelsChanged)
+    Q_PROPERTY(int saturation
+               READ saturation
+               WRITE setSaturation
+               RESET resetSaturation
+               NOTIFY saturationChanged)
+    Q_PROPERTY(int luminance
+               READ luminance
+               WRITE setLuminance
+               RESET resetLuminance
+               NOTIFY luminanceChanged)
+    Q_PROPERTY(int paletteOffset
+               READ paletteOffset
+               WRITE setPaletteOffset
+               RESET resetPaletteOffset
+               NOTIFY paletteOffsetChanged)
+    Q_PROPERTY(int shadowThLow
+               READ shadowThLow
+               WRITE setShadowThLow
+               RESET resetShadowThLow
+               NOTIFY shadowThLowChanged)
+    Q_PROPERTY(int shadowThHi
+               READ shadowThHi
+               WRITE setShadowThHi
+               RESET resetShadowThHi
+               NOTIFY shadowThHiChanged)
+    Q_PROPERTY(QRgb shadowColor
+               READ shadowColor
+               WRITE setShadowColor
+               RESET resetShadowColor
+               NOTIFY shadowColorChanged)
 
     public:
         WarholElement();
         ~WarholElement();
 
-        Q_INVOKABLE int nFrames() const;
+        Q_INVOKABLE int frameLen() const;
+        Q_INVOKABLE int levels() const;
+        Q_INVOKABLE int saturation() const;
+        Q_INVOKABLE int luminance() const;
+        Q_INVOKABLE int paletteOffset() const;
+        Q_INVOKABLE int shadowThLow() const;
+        Q_INVOKABLE int shadowThHi() const;
+        Q_INVOKABLE QRgb shadowColor() const;
 
     private:
         WarholElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
-        void nFramesChanged(int nFrames);
+        void frameLenChanged(int frameLen);
+        void levelsChanged(int levels);
+        void saturationChanged(int saturation);
+        void luminanceChanged(int luminance);
+        void paletteOffsetChanged(int paletteOffset);
+        void shadowThLowChanged(int shadowThLow);
+        void shadowThHiChanged(int shadowThHi);
+        void shadowColorChanged(QRgb shadowColor);
 
     public slots:
-        void setNFrames(int nFrames);
-        void resetNFrames();
+        void setFrameLen(int frameLen);
+        void setLevels(int levels);
+        void setSaturation(int saturation);
+        void setLuminance(int luminance);
+        void setPaletteOffset(int paletteOffset);
+        void setShadowThLow(int shadowThLow);
+        void setShadowThHi(int shadowThHi);
+        void setShadowColor(QRgb shadowColor);
+        void resetFrameLen();
+        void resetLevels();
+        void resetSaturation();
+        void resetLuminance();
+        void resetPaletteOffset();
+        void resetShadowThLow();
+        void resetShadowThHi();
+        void resetShadowColor();
 };
 
 #endif // WARHOLELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Warp/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Warp/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Warp
 target_compile_definitions(Warp PRIVATE AVKYS_PLUGIN_WARP)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Warp avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Warp RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Warp/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Warp/share/qml/main.qml
@@ -22,20 +22,83 @@ import QtQuick.Controls 2.5
 import QtQuick.Layouts 1.3
 
 GridLayout {
-    columns: 2
+    columns: 3
+
+    Connections {
+        target: Warp
+
+        function onRipplesChanged(ripples)
+        {
+            sldRipples.value = ripples
+            spbRipples.value = ripples * spbRipples.multiplier
+        }
+
+        function onDurationChanged(duration)
+        {
+            sldDuration.value = duration
+            spbDuration.value = duration
+        }
+    }
 
     Label {
+        id: txtRipples
         text: qsTr("Ripples")
     }
-    TextField {
-        text: Warp.ripples
-        placeholderText: qsTr("Ripples")
-        selectByMouse: true
-        validator: RegExpValidator {
-            regExp: /-?(\d+\.\d+|\d+\.|\.\d+|\d+)/
+    Slider {
+        id: sldRipples
+        value: Warp.ripples
+        stepSize: 0.1
+        to: 256
+        Layout.fillWidth: true
+        Accessible.name: txtRipples.text
+
+        onValueChanged: Warp.ripples = value
+    }
+    SpinBox {
+        id: spbRipples
+        value: multiplier * Warp.ripples
+        to: multiplier * sldRipples.to
+        stepSize: multiplier * sldRipples.stepSize
+        editable: true
+        Accessible.name: txtRipples.text
+
+        readonly property int decimals: 2
+        readonly property int multiplier: Math.pow(10, decimals)
+
+        validator: DoubleValidator {
+            bottom: Math.min(spbRipples.from, spbRipples.to)
+            top:  Math.max(spbRipples.from, spbRipples.to)
+        }
+        textFromValue: function(value, locale) {
+            return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
         }
+        valueFromText: function(text, locale) {
+            return Number.fromLocaleString(locale, text) * multiplier
+        }
+        onValueModified: Warp.ripples = value / multiplier
+    }
+    Label {
+        id: txtDuration
+        text: qsTr("Duration (in seconds)")
+    }
+    Slider {
+        id: sldDuration
+        value: Warp.duration
+        stepSize: 1
+        to: 128
         Layout.fillWidth: true
+        Accessible.name: txtDuration.text
+
+        onValueChanged: Warp.duration = value
+    }
+    SpinBox {
+        id: spbDuration
+        value: Warp.duration
+        to: sldDuration.to
+        stepSize: sldDuration.stepSize
+        editable: true
+        Accessible.name: txtDuration.text
 
-        onTextChanged: Warp.ripples = Number(text)
+        onValueChanged: Warp.duration = Number(value)
     }
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Warp/src/warp.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Warp/src/warp.h
@@ -29,8 +29,8 @@ class Warp: public QObject, public AkPlu
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // WARP_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Warp/src/warpelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Warp/src/warpelement.cpp
@@ -17,10 +17,14 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
 #include <QQmlContext>
+#include <QSize>
 #include <QtMath>
+#include <qrgb.h>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "warpelement.h"
@@ -29,8 +33,13 @@ class WarpElementPrivate
 {
     public:
         qreal m_ripples {4};
+        int m_duration {20};
         QSize m_frameSize;
-        QVector<qreal> m_phiTable;
+        qreal *m_phiTable {nullptr};
+        int m_t {0};
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+
+        void updatePhyTable(int width, int height);
 };
 
 WarpElement::WarpElement(): AkElement()
@@ -40,6 +49,9 @@ WarpElement::WarpElement(): AkElement()
 
 WarpElement::~WarpElement()
 {
+    if (this->d->m_phiTable)
+        delete [] this->d->m_phiTable;
+
     delete this->d;
 }
 
@@ -48,6 +60,11 @@ qreal WarpElement::ripples() const
     return this->d->m_ripples;
 }
 
+int WarpElement::duration() const
+{
+    return this->d->m_duration;
+}
+
 QString WarpElement::controlInterfaceProvide(const QString &controlId) const
 {
     Q_UNUSED(controlId)
@@ -66,62 +83,62 @@ void WarpElement::controlInterfaceConfig
 
 AkPacket WarpElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
-
-    if (src.isNull())
-        return AkPacket();
-
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    QImage oFrame(src.size(), src.format());
-
-    if (src.size() != this->d->m_frameSize) {
-        int cx = src.width() >> 1;
-        int cy = src.height() >> 1;
-
-        qreal k = 2.0 * M_PI / sqrt(cx * cx + cy * cy);
-
-        this->d->m_phiTable.clear();
-
-        for (int y = -cy; y < cy; y++)
-            for (int x = -cx; x < cx; x++)
-                this->d->m_phiTable << k * sqrt(x * x + y * y);
-
-        this->d->m_frameSize = src.size();
-        emit this->frameSizeChanged(this->d->m_frameSize);
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+    QSize frameSize(src.caps().width(), src.caps().height());
+
+    if (frameSize != this->d->m_frameSize) {
+        this->d->updatePhyTable(src.caps().width(), src.caps().height());
+        this->d->m_frameSize = frameSize;
     }
 
-    static int tval = 0;
+    qreal fps = 30.0;
 
-    qreal dx = 30 * sin((tval + 100) * M_PI / 128)
-               + 40 * sin((tval - 10) * M_PI / 512);
+    if (src.caps().fps().num() != 0
+        && src.caps().fps().den() != 0
+        && src.caps().fps().value() > 0.0)
+        fps = src.caps().fps().value();
 
-    qreal dy = -35 * sin(tval * M_PI / 256)
-               + 40 * sin((tval + 30) * M_PI / 512);
+    int framesDuration = qRound(this->d->m_duration * fps);
 
-    qreal ripples = this->d->m_ripples * sin((tval - 70) * M_PI / 64);
+    if (framesDuration < 1)
+        framesDuration = 1;
 
-    tval = (tval + 1) & 511;
-    auto phiTable = this->d->m_phiTable.data();
+    qreal dx = 30 * qSin(4 * M_PI * (this->d->m_t + 100) / framesDuration)
+               + 40 * qSin(M_PI * (this->d->m_t - 10) / framesDuration);
+    qreal dy = -35 * qSin(2 * M_PI * this->d->m_t / framesDuration)
+               + 40 * qSin(M_PI * (this->d->m_t + 30) / framesDuration);
+    qreal ripples = this->d->m_ripples * qSin(8 * M_PI * (this->d->m_t - 70) / framesDuration);
 
-    for (int y = 0, i = 0; y < src.height(); y++) {
-        auto oLine = reinterpret_cast<QRgb *>(oFrame.scanLine(y));
+    this->d->m_t = (this->d->m_t + 1) % framesDuration;
 
-        for (int x = 0; x < src.width(); x++, i++) {
-            qreal phi = ripples * phiTable[i];
+    for (int y = 0; y < src.caps().height(); y++) {
+        auto phyLine = this->d->m_phiTable + y * src.caps().width();
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
 
-            int xOrig = int(dx * cos(phi) + x);
-            int yOrig = int(dy * sin(phi) + y);
+        for (int x = 0; x < src.caps().width(); x++) {
+            qreal phi = ripples * phyLine[x];
 
-            xOrig = qBound(0, xOrig, src.width() - 1);
-            yOrig = qBound(0, yOrig, src.height() - 1);
+            int xOrig = int(dx * qCos(phi) + x);
+            int yOrig = int(dy * qSin(phi) + y);
 
-            auto iLine = reinterpret_cast<const QRgb *>(src.constScanLine(yOrig));
-            oLine[x] = iLine[xOrig];
+            xOrig = qBound(0, xOrig, src.caps().width() - 1);
+            yOrig = qBound(0, yOrig, src.caps().height() - 1);
+            dstLine[x] = src.pixel<QRgb>(0, xOrig, yOrig);
         }
     }
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-    akSend(oPacket)
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
 }
 
 void WarpElement::setRipples(qreal ripples)
@@ -133,9 +150,48 @@ void WarpElement::setRipples(qreal rippl
     emit this->ripplesChanged(ripples);
 }
 
+void WarpElement::setDuration(int duration)
+{
+    if (this->d->m_duration == duration)
+        return;
+
+    this->d->m_duration = duration;
+    emit this->durationChanged(duration);
+}
+
 void WarpElement::resetRipples()
 {
     this->setRipples(4);
 }
 
+void WarpElement::resetDuration()
+{
+    this->setDuration(20);
+}
+
+void WarpElementPrivate::updatePhyTable(int width, int height)
+{
+    int cx = width >> 1;
+    int cy = height >> 1;
+
+    qreal k = 2.0 * M_PI / qSqrt(cx * cx + cy * cy);
+
+    if (this->m_phiTable)
+        delete [] this->m_phiTable;
+
+    this->m_phiTable = new qreal [width * height];
+
+    for (int y = 0; y < height; y++) {
+        auto phyLine = this->m_phiTable + y * width;
+        auto diffY = y - cy;
+        auto diffY2 = diffY * diffY;
+
+        for (int x = 0; x < width; x++) {
+            auto diffX = x - cx;
+            auto diffX2 = diffX * diffX;
+            phyLine[x] = k * qSqrt(diffX2 + diffY2);
+        }
+    }
+}
+
 #include "moc_warpelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Warp/src/warpelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Warp/src/warpelement.h
@@ -32,29 +32,37 @@ class WarpElement: public AkElement
                WRITE setRipples
                RESET resetRipples
                NOTIFY ripplesChanged)
+    Q_PROPERTY(qreal duration
+               READ duration
+               WRITE setDuration
+               RESET resetDuration
+               NOTIFY durationChanged)
 
     public:
         WarpElement();
         ~WarpElement();
 
         Q_INVOKABLE qreal ripples() const;
+        Q_INVOKABLE int duration() const;
 
     private:
         WarpElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
         void ripplesChanged(qreal ripples);
-        void frameSizeChanged(const QSize &frameSize);
+        void durationChanged(int duration);
 
     public slots:
         void setRipples(qreal ripples);
+        void setDuration(int duration);
         void resetRipples();
+        void resetDuration();
 };
 
 #endif // WARPELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Wave/CMakeLists.txt
+++ webcamoid-9.0.0/libAvKys/Plugins/Wave/CMakeLists.txt
@@ -58,7 +58,6 @@ target_include_directories(Wave
 target_compile_definitions(Wave PRIVATE AVKYS_PLUGIN_WAVE)
 list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
 target_link_libraries(Wave avkys ${QT_LIBS})
-set(QML_IMPORT_PATH ../../Lib/share/qml)
 
 if (WIN32)
     install(TARGETS Wave RUNTIME DESTINATION ${PLUGINSDIR})
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Wave/share/qml/main.qml
+++ webcamoid-9.0.0/libAvKys/Plugins/Wave/share/qml/main.qml
@@ -29,53 +29,79 @@ GridLayout {
     Connections {
         target: Wave
 
-        function onAmplitudeChanged(amplitude)
+        function onAmplitudeXChanged(amplitudeX)
         {
-            sldAmplitude.value = amplitude
-            spbAmplitude.value = spbAmplitude.multiplier * amplitude
+            sldAmplitudeX.value = amplitudeX
+            spbAmplitudeX.value = amplitudeX * spbAmplitudeX.multiplier
         }
 
-        function onFrequencyChanged(frequency)
+        function onFrequencyXChanged(frequencyX)
         {
-            sldFrequency.value = frequency
-            spbFrequency.value = spbFrequency.multiplier * frequency
+            sldFrequencyX.value = frequencyX
+            spbFrequencyX.value = frequencyX * spbFrequencyX.multiplier
         }
 
-        function onPhaseChanged(phase)
+        function onPhaseXChanged(phaseX)
         {
-            sldPhase.value = phase
-            spbPhase.value = spbPhase.multiplier * phase
+            sldPhaseX.value = phaseX
+            spbPhaseX.value = spbPhaseX.multiplier * phaseX
+        }
+
+        function onAmplitudeYChanged(amplitudeY)
+        {
+            sldAmplitudeY.value = amplitudeY
+            spbAmplitudeY.value = amplitudeY * spbAmplitudeY.multiplier
+        }
+
+        function onFrequencyYChanged(frequencyY)
+        {
+            sldFrequencyY.value = frequencyY
+            spbFrequencyY.value = frequencyY * spbFrequencyY.multiplier
+        }
+
+        function onPhaseYChanged(phaseY)
+        {
+            sldPhaseY.value = phaseY
+            spbPhaseY.value = spbPhaseY.multiplier * phaseY
         }
     }
 
     Label {
-        id: lblAmplitude
-        text: qsTr("Amplitude")
+        text: qsTr("<b>X-Axis</b>")
+        topPadding: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+        bottomPadding: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+        wrapMode: Text.Wrap
+        Layout.columnSpan: 3
+        Layout.fillWidth: true
+    }
+    Label {
+        id: lblAmplitudeX
+        text: qsTr("Amplitude (X)")
     }
-
     Slider {
-        id: sldAmplitude
-        value: Wave.amplitude
+        id: sldAmplitudeX
+        value: Wave.amplitudeX
         stepSize: 0.01
         to: 1
         Layout.fillWidth: true
+        Accessible.name: lblAmplitudeX.text
 
-        onValueChanged: Wave.amplitude = value
+        onValueChanged: Wave.amplitudeX = value
     }
     SpinBox {
-        id: spbAmplitude
-        value: multiplier * Wave.amplitude
-        to: multiplier * sldAmplitude.to
-        stepSize: multiplier * sldAmplitude.stepSize
+        id: spbAmplitudeX
+        value: multiplier * Wave.amplitudeX
+        to: multiplier * sldAmplitudeX.to
+        stepSize: multiplier * sldAmplitudeX.stepSize
         editable: true
+        Accessible.name: lblAmplitudeX.text
 
         readonly property int decimals: 2
         readonly property int multiplier: Math.pow(10, decimals)
 
         validator: DoubleValidator {
-            id: val
-            bottom: Math.min(spbAmplitude.from, spbAmplitude.to)
-            top:  Math.max(spbAmplitude.from, spbAmplitude.to)
+            bottom: Math.min(spbAmplitudeX.from, spbAmplitudeX.to)
+            top:  Math.max(spbAmplitudeX.from, spbAmplitudeX.to)
         }
         textFromValue: function(value, locale) {
             return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
@@ -83,35 +109,36 @@ GridLayout {
         valueFromText: function(text, locale) {
             return Number.fromLocaleString(locale, text) * multiplier
         }
-        onValueModified: Wave.amplitude = value / multiplier
+        onValueModified: Wave.amplitudeX = value / multiplier
     }
-
     Label {
-        id: lblFrequency
-        text: qsTr("Frequency")
+        id: lblFrequencyX
+        text: qsTr("Frequency (X)")
     }
     Slider {
-        id: sldFrequency
-        value: Wave.frequency
+        id: sldFrequencyX
+        value: Wave.frequencyX
         stepSize: 0.01
         to: 100
         Layout.fillWidth: true
+        Accessible.name: lblFrequencyX.text
 
-        onValueChanged: Wave.frequency = value
+        onValueChanged: Wave.frequencyX = value
     }
     SpinBox {
-        id: spbFrequency
-        value: multiplier * Wave.frequency
-        to: multiplier * sldFrequency.to
-        stepSize: multiplier * sldFrequency.stepSize
+        id: spbFrequencyX
+        value: multiplier * Wave.frequencyX
+        to: multiplier * sldFrequencyX.to
+        stepSize: multiplier * sldFrequencyX.stepSize
         editable: true
+        Accessible.name: lblFrequencyX.text
 
         readonly property int decimals: 2
         readonly property int multiplier: Math.pow(10, decimals)
 
         validator: DoubleValidator {
-            bottom: Math.min(spbFrequency.from, spbFrequency.to)
-            top:  Math.max(spbFrequency.from, spbFrequency.to)
+            bottom: Math.min(spbFrequencyX.from, spbFrequencyX.to)
+            top:  Math.max(spbFrequencyX.from, spbFrequencyX.to)
         }
         textFromValue: function(value, locale) {
             return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
@@ -119,35 +146,36 @@ GridLayout {
         valueFromText: function(text, locale) {
             return Number.fromLocaleString(locale, text) * multiplier
         }
-        onValueModified: Wave.frequency = value / multiplier
+        onValueModified: Wave.frequencyX = value / multiplier
     }
-
     Label {
-        id: lblPhase
-        text: qsTr("Phase")
+        id: lblPhaseX
+        text: qsTr("Phase (X)")
     }
     Slider {
-        id: sldPhase
-        value: Wave.phase
+        id: sldPhaseX
+        value: Wave.phaseX
         stepSize: 0.01
         to: 1
         Layout.fillWidth: true
+        Accessible.name: lblPhaseX.text
 
-        onValueChanged: Wave.phase = value
+        onValueChanged: Wave.phaseX = value
     }
     SpinBox {
-        id: spbPhase
-        value: multiplier * Wave.phase
-        to: multiplier * sldPhase.to
-        stepSize: multiplier * sldPhase.stepSize
+        id: spbPhaseX
+        value: multiplier * Wave.phaseX
+        to: multiplier * sldPhaseX.to
+        stepSize: multiplier * sldPhaseX.stepSize
         editable: true
+        Accessible.name: lblPhaseX.text
 
         readonly property int decimals: 2
         readonly property int multiplier: Math.pow(10, decimals)
 
         validator: DoubleValidator {
-            bottom: Math.min(spbPhase.from, spbPhase.to)
-            top:  Math.max(spbPhase.from, spbPhase.to)
+            bottom: Math.min(spbPhaseX.from, spbPhaseX.to)
+            top:  Math.max(spbPhaseX.from, spbPhaseX.to)
         }
         textFromValue: function(value, locale) {
             return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
@@ -155,23 +183,125 @@ GridLayout {
         valueFromText: function(text, locale) {
             return Number.fromLocaleString(locale, text) * multiplier
         }
-        onValueModified: Wave.phase = value / multiplier
+        onValueModified: Wave.phaseX = value / multiplier
+    }
+    Label {
+        text: qsTr("<b>Y-Axis</b>")
+        topPadding: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+        bottomPadding: AkUnit.create(16 * AkTheme.controlScale, "dp").pixels
+        wrapMode: Text.Wrap
+        Layout.columnSpan: 3
+        Layout.fillWidth: true
+    }
+    Label {
+        id: lblAmplitudeY
+        text: qsTr("Amplitude (Y)")
     }
+    Slider {
+        id: sldAmplitudeY
+        value: Wave.amplitudeY
+        stepSize: 0.01
+        to: 1
+        Layout.fillWidth: true
+        Accessible.name: lblAmplitudeY.text
+
+        onValueChanged: Wave.amplitudeY = value
+    }
+    SpinBox {
+        id: spbAmplitudeY
+        value: multiplier * Wave.amplitudeY
+        to: multiplier * sldAmplitudeY.to
+        stepSize: multiplier * sldAmplitudeY.stepSize
+        editable: true
+        Accessible.name: lblAmplitudeY.text
+
+        readonly property int decimals: 2
+        readonly property int multiplier: Math.pow(10, decimals)
 
+        validator: DoubleValidator {
+            bottom: Math.min(spbAmplitudeY.from, spbAmplitudeY.to)
+            top:  Math.max(spbAmplitudeY.from, spbAmplitudeY.to)
+        }
+        textFromValue: function(value, locale) {
+            return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
+        }
+        valueFromText: function(text, locale) {
+            return Number.fromLocaleString(locale, text) * multiplier
+        }
+        onValueModified: Wave.amplitudeY = value / multiplier
+    }
     Label {
-        text: qsTr("Background color")
+        id: lblFrequencyY
+        text: qsTr("Frequency (Y)")
     }
-    RowLayout {
-        Layout.columnSpan: 2
+    Slider {
+        id: sldFrequencyY
+        value: Wave.frequencyY
+        stepSize: 0.01
+        to: 100
+        Layout.fillWidth: true
+        Accessible.name: lblFrequencyY.text
+
+        onValueChanged: Wave.frequencyY = value
+    }
+    SpinBox {
+        id: spbFrequencyY
+        value: multiplier * Wave.frequencyY
+        to: multiplier * sldFrequencyY.to
+        stepSize: multiplier * sldFrequencyY.stepSize
+        editable: true
+        Accessible.name: lblFrequencyY.text
+
+        readonly property int decimals: 2
+        readonly property int multiplier: Math.pow(10, decimals)
 
-        Item {
-            Layout.fillWidth: true
+        validator: DoubleValidator {
+            bottom: Math.min(spbFrequencyY.from, spbFrequencyY.to)
+            top:  Math.max(spbFrequencyY.from, spbFrequencyY.to)
+        }
+        textFromValue: function(value, locale) {
+            return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
         }
-        AK.ColorButton {
-            currentColor: AkUtils.fromRgba(Wave.background)
-            title: qsTr("Choose the background color")
+        valueFromText: function(text, locale) {
+            return Number.fromLocaleString(locale, text) * multiplier
+        }
+        onValueModified: Wave.frequencyY = value / multiplier
+    }
+    Label {
+        id: lblPhaseY
+        text: qsTr("Phase (Y)")
+    }
+    Slider {
+        id: sldPhaseY
+        value: Wave.phaseY
+        stepSize: 0.01
+        to: 1
+        Layout.fillWidth: true
+        Accessible.name: lblPhaseY.text
 
-            onCurrentColorChanged: Wave.background = AkUtils.toRgba(currentColor)
+        onValueChanged: Wave.phaseY = value
+    }
+    SpinBox {
+        id: spbPhaseY
+        value: multiplier * Wave.phaseY
+        to: multiplier * sldPhaseY.to
+        stepSize: multiplier * sldPhaseY.stepSize
+        editable: true
+        Accessible.name: lblPhaseY.text
+
+        readonly property int decimals: 2
+        readonly property int multiplier: Math.pow(10, decimals)
+
+        validator: DoubleValidator {
+            bottom: Math.min(spbPhaseY.from, spbPhaseY.to)
+            top:  Math.max(spbPhaseY.from, spbPhaseY.to)
+        }
+        textFromValue: function(value, locale) {
+            return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
+        }
+        valueFromText: function(text, locale) {
+            return Number.fromLocaleString(locale, text) * multiplier
         }
+        onValueModified: Wave.phaseY = value / multiplier
     }
 }
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Wave/src/wave.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Wave/src/wave.h
@@ -29,8 +29,8 @@ class Wave: public QObject, public AkPlu
     Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
 
     public:
-        QObject *create(const QString &key, const QString &specification);
-        QStringList keys() const;
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
 };
 
 #endif // WAVE_H
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Wave/src/waveelement.cpp
+++ webcamoid-9.0.0/libAvKys/Plugins/Wave/src/waveelement.cpp
@@ -17,11 +17,14 @@
  * Web-Site: http://webcamoid.github.io/
  */
 
-#include <QImage>
+#include <QMutex>
 #include <QQmlContext>
+#include <QSize>
 #include <QtMath>
-#include <QMutex>
+#include <akfrac.h>
 #include <akpacket.h>
+#include <akvideocaps.h>
+#include <akvideoconverter.h>
 #include <akvideopacket.h>
 
 #include "waveelement.h"
@@ -29,65 +32,65 @@
 class WaveElementPrivate
 {
     public:
-        qreal m_amplitude {0.12};
-        qreal m_frequency {8};
-        qreal m_phase {0.0};
-        QRgb m_background {qRgb(0, 0, 0)};
+        qreal m_amplitudeX {0.06};
+        qreal m_amplitudeY {0.06};
+        qreal m_frequencyX {4};
+        qreal m_frequencyY {4};
+        qreal m_phaseX {0.0};
+        qreal m_phaseY {0.0};
         QSize m_frameSize;
-        QVector<int> m_sineMap;
+        int *m_sineMapX {nullptr};
+        int *m_sineMapY {nullptr};
         QMutex m_mutex;
+        AkVideoConverter m_videoConverter {{AkVideoCaps::Format_argbpack, 0, 0, {}}};
+
+        void updateSineMap();
 };
 
 WaveElement::WaveElement(): AkElement()
 {
     this->d = new WaveElementPrivate;
-
-    QObject::connect(this,
-                     &WaveElement::amplitudeChanged,
-                     this,
-                     &WaveElement::updateSineMap);
-    QObject::connect(this,
-                     &WaveElement::frequencyChanged,
-                     this,
-                     &WaveElement::updateSineMap);
-    QObject::connect(this,
-                     &WaveElement::phaseChanged,
-                     this,
-                     &WaveElement::updateSineMap);
-    QObject::connect(this,
-                     &WaveElement::backgroundChanged,
-                     this,
-                     &WaveElement::updateSineMap);
-    QObject::connect(this,
-                     &WaveElement::frameSizeChanged,
-                     this,
-                     &WaveElement::updateSineMap);
 }
 
 WaveElement::~WaveElement()
 {
+    if (this->d->m_sineMapX)
+        delete [] this->d->m_sineMapX;
+
+    if (this->d->m_sineMapY)
+        delete [] this->d->m_sineMapY;
 
     delete this->d;
 }
 
-qreal WaveElement::amplitude() const
+qreal WaveElement::amplitudeX() const
 {
-    return this->d->m_amplitude;
+    return this->d->m_amplitudeX;
 }
 
-qreal WaveElement::frequency() const
+qreal WaveElement::amplitudeY() const
 {
-    return this->d->m_frequency;
+    return this->d->m_amplitudeY;
 }
 
-qreal WaveElement::phase() const
+qreal WaveElement::frequencyX() const
 {
-    return this->d->m_phase;
+    return this->d->m_frequencyX;
 }
 
-QRgb WaveElement::background() const
+qreal WaveElement::frequencyY() const
 {
-    return this->d->m_background;
+    return this->d->m_frequencyY;
+}
+
+qreal WaveElement::phaseX() const
+{
+    return this->d->m_phaseX;
+}
+
+qreal WaveElement::phaseY() const
+{
+    return this->d->m_phaseY;
 }
 
 QString WaveElement::controlInterfaceProvide(const QString &controlId) const
@@ -108,142 +111,203 @@ void WaveElement::controlInterfaceConfig
 
 AkPacket WaveElement::iVideoStream(const AkVideoPacket &packet)
 {
-    auto src = packet.toImage();
+    if (this->d->m_amplitudeX <= 0.0 && this->d->m_amplitudeY <= 0.0) {
+        if (packet)
+            emit this->oStream(packet);
 
-    if (src.isNull())
-        return AkPacket();
+        return packet;
+    }
 
-    src = src.convertToFormat(QImage::Format_ARGB32);
-    qreal amplitude = this->d->m_amplitude;
+    this->d->m_videoConverter.begin();
+    auto src = this->d->m_videoConverter.convert(packet);
+    this->d->m_videoConverter.end();
+
+    if (!src)
+        return {};
+
+    AkVideoPacket dst(src.caps());
+    dst.copyMetadata(src);
+    QSize frameSize(src.caps().width(), src.caps().height());
+
+    if (frameSize != this->d->m_frameSize) {
+        this->d->m_frameSize = frameSize;
+        this->d->updateSineMap();
+    }
+
+    this->d->m_mutex.lock();
 
-    QImage oFrame(src.width(), src.height(), src.format());
-    oFrame.fill(this->d->m_background);
+    if (!this->d->m_sineMapY) {
+        this->d->m_mutex.unlock();
 
-    if (amplitude <= 0.0)
-        akSend(packet)
+        if (packet)
+            emit this->oStream(packet);
 
-    if (amplitude >= 1.0) {
-        auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
-        akSend(oPacket)
+        return packet;
     }
 
-    if (src.size() != this->d->m_frameSize) {
-        this->d->m_frameSize = src.size();
-        emit this->frameSizeChanged(src.size());
+    for (int y = 0; y < dst.caps().height(); y++) {
+        auto yOffset = y * dst.caps().width();
+        auto sinLineX = this->d->m_sineMapX + yOffset;
+        auto sinLineY = this->d->m_sineMapY + yOffset;
+        auto dstLine = reinterpret_cast<QRgb *>(dst.line(0, y));
+
+        for (int x = 0; x < dst.caps().width(); x++) {
+            int xi = sinLineX[x];
+            int yi = sinLineY[x];
+
+            if (xi >= 0 && xi < dst.caps().width()
+                && yi >= 0 && yi < dst.caps().height())
+                dstLine[x] = src.pixel<QRgb>(0, xi, yi);
+            else
+                dstLine[x] = qRgba(0, 0, 0, 0);
+        }
     }
 
-    this->d->m_mutex.lock();
-    QVector<int> sineMap(this->d->m_sineMap);
     this->d->m_mutex.unlock();
 
-    if (sineMap.isEmpty())
-        akSend(packet)
-
-    for (int y = 0; y < oFrame.height(); y++) {
-        // Get input line.
-        int yi = int(y / (1.0 - amplitude));
-
-        if (yi < 0 || yi >= src.height())
-            continue;
+    if (dst)
+        emit this->oStream(dst);
 
-        auto iLine = reinterpret_cast<const QRgb *>(src.constScanLine(yi));
+    return dst;
+}
 
-        for (int x = 0; x < oFrame.width(); x++) {
-            // Get output line.
-            int yo = y  + sineMap[x];
+inline void WaveElement::setAmplitudeX(qreal amplitudeX)
+{
+    if (qFuzzyCompare(amplitudeX, this->d->m_amplitudeX))
+        return;
 
-            if (yo < 0
-                || yo >= src.height())
-                continue;
+    this->d->m_amplitudeX = amplitudeX;
+    emit this->amplitudeXChanged(amplitudeX);
+    this->d->updateSineMap();
+}
 
-            QRgb *oLine = reinterpret_cast<QRgb *>(oFrame.scanLine(yo));
-            oLine[x] = iLine[x];
-        }
-    }
+void WaveElement::setAmplitudeY(qreal amplitudeY)
+{
+    if (qFuzzyCompare(amplitudeY, this->d->m_amplitudeY))
+        return;
 
-    auto oPacket = AkVideoPacket::fromImage(oFrame, packet);
+    this->d->m_amplitudeY = amplitudeY;
+    emit this->amplitudeYChanged(amplitudeY);
+    this->d->updateSineMap();
+}
 
-    if (oPacket)
-        emit this->oStream(oPacket);
+void WaveElement::setFrequencyX(qreal frequencyX)
+{
+    if (qFuzzyCompare(frequencyX, this->d->m_frequencyX))
+        return;
 
-    return oPacket;
+    this->d->m_frequencyX = frequencyX;
+    emit this->frequencyXChanged(frequencyX);
+    this->d->updateSineMap();
 }
 
-void WaveElement::setAmplitude(qreal amplitude)
+void WaveElement::setFrequencyY(qreal frequencyY)
 {
-    if (qFuzzyCompare(amplitude, this->d->m_amplitude))
+    if (qFuzzyCompare(frequencyY, this->d->m_frequencyY))
         return;
 
-    this->d->m_amplitude = amplitude;
-    emit this->amplitudeChanged(amplitude);
+    this->d->m_frequencyY = frequencyY;
+    emit this->frequencyYChanged(frequencyY);
+    this->d->updateSineMap();
 }
 
-void WaveElement::setFrequency(qreal frequency)
+void WaveElement::setPhaseX(qreal phaseX)
 {
-    if (qFuzzyCompare(frequency, this->d->m_frequency))
+    if (qFuzzyCompare(this->d->m_phaseX, phaseX))
         return;
 
-    this->d->m_frequency = frequency;
-    emit this->frequencyChanged(frequency);
+    this->d->m_phaseX = phaseX;
+    emit this->phaseXChanged(phaseX);
+    this->d->updateSineMap();
 }
 
-void WaveElement::setPhase(qreal phase)
+void WaveElement::setPhaseY(qreal phaseY)
 {
-    if (qFuzzyCompare(this->d->m_phase, phase))
+    if (qFuzzyCompare(this->d->m_phaseY, phaseY))
         return;
 
-    this->d->m_phase = phase;
-    emit this->phaseChanged(phase);
+    this->d->m_phaseY = phaseY;
+    emit this->phaseYChanged(phaseY);
+    this->d->updateSineMap();
 }
 
-void WaveElement::setBackground(QRgb background)
+void WaveElement::resetAmplitudeX()
 {
-    if (background == this->d->m_background)
-        return;
+    this->setAmplitudeX(0.12);
+}
 
-    this->d->m_background = background;
-    emit this->backgroundChanged(background);
+void WaveElement::resetAmplitudeY()
+{
+    this->setAmplitudeY(0.12);
 }
 
-void WaveElement::resetAmplitude()
+void WaveElement::resetFrequencyX()
 {
-    this->setAmplitude(0.12);
+    this->setFrequencyX(8);
 }
 
-void WaveElement::resetFrequency()
+void WaveElement::resetFrequencyY()
 {
-    this->setFrequency(8);
+    this->setFrequencyY(8);
 }
 
-void WaveElement::resetPhase()
+void WaveElement::resetPhaseX()
 {
-    this->setPhase(0.0);
+    this->setPhaseX(0.0);
 }
 
-void WaveElement::resetBackground()
+void WaveElement::resetPhaseY()
 {
-    this->setBackground(qRgb(0, 0, 0));
+    this->setPhaseY(0.0);
 }
 
-void WaveElement::updateSineMap()
+void WaveElementPrivate::updateSineMap()
 {
-    if (this->d->m_frameSize.isEmpty())
+    if (this->m_frameSize.isEmpty())
         return;
 
-    int width = this->d->m_frameSize.width();
-    int height = this->d->m_frameSize.height();
-    QVector<int> sineMap(width);
-    qreal phase = 2.0 * M_PI * this->d->m_phase;
+    int width = this->m_frameSize.width();
+    int height = this->m_frameSize.height();
+    auto amplitudeX = qRound(this->m_amplitudeX * width / 2);
+    amplitudeX = qBound(0, amplitudeX, (width >> 1) - 1);
+    auto amplitudeY = qRound(this->m_amplitudeY * height / 2);
+    amplitudeY = qBound(0, amplitudeY, (height >> 1) - 1);
+    qreal phaseX = 2.0 * M_PI * this->m_phaseX;
+    qreal phaseY = 2.0 * M_PI * this->m_phaseY;
+
+    this->m_mutex.lock();
+
+    if (this->m_sineMapX)
+        delete [] this->m_sineMapX;
+
+    if (this->m_sineMapY)
+        delete [] this->m_sineMapY;
+
+    this->m_sineMapX = new int [width * height];
+    this->m_sineMapY = new int [width * height];
+
+    for (int yo = 0; yo < height; yo++) {
+        auto yOffset = yo * width;
+        auto sinLineX = this->m_sineMapX + yOffset;
+        auto sinLineY = this->m_sineMapY + yOffset;
+        int xoOffset = qRound(amplitudeX
+                              * qSin(this->m_frequencyX * 2.0 * M_PI * yo / height
+                                     + phaseX));
+
+        for (int xo = 0; xo < width; xo++) {
+            int yoOffset = qRound(amplitudeY
+                                  * qSin(this->m_frequencyY * 2.0 * M_PI * xo / width
+                                         + phaseY));
 
-    for (int x = 0; x < width; x++)
-        sineMap[x] = int(0.5 * this->d->m_amplitude * height
-                         * (sin(this->d->m_frequency * 2.0 * M_PI * x / width
-                                + phase)
-                            + 1.0));
+            int xi = (xo + xoOffset - amplitudeX) * (width - 1) / (width - 2 * amplitudeX - 1);
+            int yi = (yo + yoOffset - amplitudeY) * (height - 1) / (height - 2 * amplitudeY - 1);
 
-    this->d->m_mutex.lock();
-    this->d->m_sineMap = sineMap;
-    this->d->m_mutex.unlock();
+            sinLineX[xo] = xi;
+            sinLineY[xo] = yi;
+        }
+    }
+
+    this->m_mutex.unlock();
 }
 
 #include "moc_waveelement.cpp"
--- webcamoid-9.0.0.orig/libAvKys/Plugins/Wave/src/waveelement.h
+++ webcamoid-9.0.0/libAvKys/Plugins/Wave/src/waveelement.h
@@ -28,64 +28,78 @@ class WaveElementPrivate;
 class WaveElement: public AkElement
 {
     Q_OBJECT
-    Q_PROPERTY(qreal amplitude
-               READ amplitude
-               WRITE setAmplitude
-               RESET resetAmplitude
-               NOTIFY amplitudeChanged)
-    Q_PROPERTY(qreal frequency
-               READ frequency
-               WRITE setFrequency
-               RESET resetFrequency
-               NOTIFY frequencyChanged)
-    Q_PROPERTY(qreal phase
-               READ phase
-               WRITE setPhase
-               RESET resetPhase
-               NOTIFY phaseChanged)
-    Q_PROPERTY(QRgb background
-               READ background
-               WRITE setBackground
-               RESET resetBackground
-               NOTIFY backgroundChanged)
+    Q_PROPERTY(qreal amplitudeX
+               READ amplitudeX
+               WRITE setAmplitudeX
+               RESET resetAmplitudeX
+               NOTIFY amplitudeXChanged)
+    Q_PROPERTY(qreal amplitudeY
+               READ amplitudeY
+               WRITE setAmplitudeY
+               RESET resetAmplitudeY
+               NOTIFY amplitudeYChanged)
+    Q_PROPERTY(qreal frequencyX
+               READ frequencyX
+               WRITE setFrequencyX
+               RESET resetFrequencyX
+               NOTIFY frequencyXChanged)
+    Q_PROPERTY(qreal frequencyY
+               READ frequencyY
+               WRITE setFrequencyY
+               RESET resetFrequencyY
+               NOTIFY frequencyYChanged)
+    Q_PROPERTY(qreal phaseX
+               READ phaseX
+               WRITE setPhaseX
+               RESET resetPhaseX
+               NOTIFY phaseXChanged)
+    Q_PROPERTY(qreal phaseY
+               READ phaseY
+               WRITE setPhaseY
+               RESET resetPhaseY
+               NOTIFY phaseYChanged)
 
     public:
         WaveElement();
         ~WaveElement();
 
-        Q_INVOKABLE qreal amplitude() const;
-        Q_INVOKABLE qreal frequency() const;
-        Q_INVOKABLE qreal phase() const;
-        Q_INVOKABLE QRgb background() const;
+        Q_INVOKABLE qreal amplitudeX() const;
+        Q_INVOKABLE qreal amplitudeY() const;
+        Q_INVOKABLE qreal frequencyX() const;
+        Q_INVOKABLE qreal frequencyY() const;
+        Q_INVOKABLE qreal phaseX() const;
+        Q_INVOKABLE qreal phaseY() const;
 
     private:
         WaveElementPrivate *d;
 
     protected:
-        QString controlInterfaceProvide(const QString &controlId) const;
+        QString controlInterfaceProvide(const QString &controlId) const override;
         void controlInterfaceConfigure(QQmlContext *context,
-                                       const QString &controlId) const;
-        AkPacket iVideoStream(const AkVideoPacket &packet);
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
 
     signals:
-        void amplitudeChanged(qreal amplitude);
-        void frequencyChanged(qreal frequency);
-        void phaseChanged(qreal phase);
-        void backgroundChanged(QRgb background);
-        void frameSizeChanged(const QSize &frameSize);
+        void amplitudeXChanged(qreal amplitudeX);
+        void amplitudeYChanged(qreal amplitudeY);
+        void frequencyXChanged(qreal frequencyX);
+        void frequencyYChanged(qreal frequencyY);
+        void phaseXChanged(qreal phaseX);
+        void phaseYChanged(qreal phaseY);
 
     public slots:
-        void setAmplitude(qreal amplitude);
-        void setFrequency(qreal frequency);
-        void setPhase(qreal phase);
-        void setBackground(QRgb background);
-        void resetAmplitude();
-        void resetFrequency();
-        void resetPhase();
-        void resetBackground();
-
-    private slots:
-        void updateSineMap();
+        void setAmplitudeX(qreal amplitudeX);
+        void setAmplitudeY(qreal amplitudeY);
+        void setFrequencyX(qreal frequencyX);
+        void setFrequencyY(qreal frequencyY);
+        void setPhaseX(qreal phaseX);
+        void setPhaseY(qreal phaseY);
+        void resetAmplitudeX();
+        void resetAmplitudeY();
+        void resetFrequencyX();
+        void resetFrequencyY();
+        void resetPhaseX();
+        void resetPhaseY();
 };
 
 #endif // WAVEELEMENT_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Zoom/CMakeLists.txt
@@ -0,0 +1,67 @@
+# Webcamoid, webcam capture application.
+# Copyright (C) 2022  Gonzalo Exequiel Pedone
+#
+# Webcamoid is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Webcamoid is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+#
+# Web-Site: http://webcamoid.github.io/
+
+cmake_minimum_required(VERSION 3.16)
+
+project(Zoom LANGUAGES CXX)
+
+include(../../cmake/ProjectCommons.cmake)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+
+set(QT_COMPONENTS
+    Gui
+    Qml)
+find_package(QT NAMES Qt${QT_VERSION_MAJOR} COMPONENTS
+             ${QT_COMPONENTS}
+             REQUIRED)
+find_package(Qt${QT_VERSION_MAJOR} ${QT_MINIMUM_VERSION} COMPONENTS
+             ${QT_COMPONENTS}
+             REQUIRED)
+add_library(Zoom SHARED
+            src/zoom.h
+            src/zoomelement.h
+            src/zoom.cpp
+            src/zoomelement.cpp
+            Zoom.qrc
+            pspec.json)
+
+if (WIN32)
+    set_target_properties(Zoom PROPERTIES
+                          RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
+elseif (NOT ANDROID)
+    set_target_properties(Zoom PROPERTIES
+                          LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build/${PLUGINSDIR})
+endif ()
+
+add_dependencies(Zoom avkys)
+target_include_directories(Zoom
+                           PRIVATE ../../Lib/src)
+target_compile_definitions(Zoom PRIVATE AVKYS_PLUGIN_ZOOM)
+list(TRANSFORM QT_COMPONENTS PREPEND Qt${QT_VERSION_MAJOR}:: OUTPUT_VARIABLE QT_LIBS)
+target_link_libraries(Zoom avkys ${QT_LIBS})
+set(QML_IMPORT_PATH ../../Lib/share/qml)
+
+if (WIN32)
+    install(TARGETS Zoom RUNTIME DESTINATION ${PLUGINSDIR})
+elseif (NOT ANDROID)
+    install(TARGETS Zoom DESTINATION ${PLUGINSDIR})
+endif ()
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Zoom/Zoom.qrc
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/Zoom">
+        <file>share/qml/main.qml</file>
+    </qresource>
+</RCC>
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Zoom/pspec.json
@@ -0,0 +1,12 @@
+{
+    "type": "WebcamoidPluginsCollection",
+    "plugins": [
+        {
+            "name": "Zoom",
+            "description": "Zoom",
+            "id": "VideoFilter/Zoom",
+            "implements": ["Element", "VideoFilter"],
+            "type": "qtplugin"
+        }
+    ]
+}
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Zoom/share/qml/main.qml
@@ -0,0 +1,76 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+import QtQuick 2.12
+import QtQuick.Controls 2.5
+import QtQuick.Layouts 1.3
+
+GridLayout {
+    columns: 3
+
+    Connections {
+        target: Zoom
+
+        function onZoomChanged(zoom)
+        {
+            sldZoom.value = zoom
+            spbZoom.value = zoom * spbZoom.multiplier
+        }
+    }
+
+    Label {
+        id: lblZoom
+        text: qsTr("Zoom")
+    }
+    Slider {
+        id: sldZoom
+        value: Zoom.zoom
+        stepSize: 0.1
+        from: 1.0
+        to: 10.0
+        Layout.fillWidth: true
+        Accessible.name: lblZoom.text
+
+        onValueChanged: Zoom.zoom = value
+    }
+    SpinBox {
+        id: spbZoom
+        value: multiplier * Zoom.zoom
+        from: multiplier * sldZoom.from
+        to: multiplier * sldZoom.to
+        stepSize: multiplier * sldZoom.stepSize
+        editable: true
+        Accessible.name: lblZoom.text
+
+        readonly property int decimals: 1
+        readonly property int multiplier: Math.pow(10, decimals)
+
+        validator: DoubleValidator {
+            bottom: Math.min(spbZoom.from, spbZoom.to)
+            top:  Math.max(spbZoom.from, spbZoom.to)
+        }
+        textFromValue: function(value, locale) {
+            return Number(value / multiplier).toLocaleString(locale, 'f', decimals)
+        }
+        valueFromText: function(text, locale) {
+            return Number.fromLocaleString(locale, text) * multiplier
+        }
+        onValueModified: Zoom.zoom = value / multiplier
+    }
+}
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Zoom/src/zoom.cpp
@@ -0,0 +1,36 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include "zoom.h"
+#include "zoomelement.h"
+
+QObject *Zoom::create(const QString &key, const QString &specification)
+{
+    Q_UNUSED(key)
+    Q_UNUSED(specification)
+
+    return new ZoomElement();
+}
+
+QStringList Zoom::keys() const
+{
+    return {};
+}
+
+#include "moc_zoom.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Zoom/src/zoom.h
@@ -0,0 +1,36 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef ZOOM_H
+#define ZOOM_H
+
+#include <akplugin.h>
+
+class Zoom: public QObject, public AkPlugin
+{
+    Q_OBJECT
+    Q_INTERFACES(AkPlugin)
+    Q_PLUGIN_METADATA(IID "org.avkys.plugin" FILE "pspec.json")
+
+    public:
+        QObject *create(const QString &key, const QString &specification) override;
+        QStringList keys() const override;
+};
+
+#endif // ZOOM_H
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Zoom/src/zoomelement.cpp
@@ -0,0 +1,929 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#include <QQmlContext>
+#include <QRect>
+#include <akpacket.h>
+#include <akvideoformatspec.h>
+#include <akvideopacket.h>
+
+#include "zoomelement.h"
+
+#define SCALE_EMULT 8
+
+enum ZoomType
+{
+    ZoomType_1_component,
+    ZoomType_3_components,
+};
+
+enum ZoomDataTypes
+{
+    ZoomDataTypes_8,
+    ZoomDataTypes_16,
+    ZoomDataTypes_32,
+};
+
+class ZoomElementPrivate
+{
+    public:
+        qreal m_zoom {1.0};
+        qreal m_currentZoom {0.0};
+
+        AkVideoCaps m_inputCaps;
+        ZoomType m_zoomType {ZoomType_1_component};
+        ZoomDataTypes m_zoomDataTypes {ZoomDataTypes_8};
+        int m_endianness {Q_BYTE_ORDER};
+
+        int m_inputWidth {0};
+        int m_inputHeight {0};
+
+        int *m_srcWidthOffsetX {nullptr};
+        int *m_srcWidthOffsetY {nullptr};
+        int *m_srcWidthOffsetZ {nullptr};
+        int *m_srcWidthOffsetA {nullptr};
+        int *m_srcHeight {nullptr};
+
+        int *m_srcWidthOffsetX_1 {nullptr};
+        int *m_srcWidthOffsetY_1 {nullptr};
+        int *m_srcWidthOffsetZ_1 {nullptr};
+        int *m_srcWidthOffsetA_1 {nullptr};
+        int *m_srcHeight_1 {nullptr};
+
+        int *m_dstWidthOffsetX {nullptr};
+        int *m_dstWidthOffsetY {nullptr};
+        int *m_dstWidthOffsetZ {nullptr};
+        int *m_dstWidthOffsetA {nullptr};
+
+        qint64 *m_kx {nullptr};
+        qint64 *m_ky {nullptr};
+
+        int m_planeXi {0};
+        int m_planeYi {0};
+        int m_planeZi {0};
+        int m_planeAi {0};
+
+        AkColorComponent m_compXi;
+        AkColorComponent m_compYi;
+        AkColorComponent m_compZi;
+        AkColorComponent m_compAi;
+
+        size_t m_xiOffset {0};
+        size_t m_yiOffset {0};
+        size_t m_ziOffset {0};
+        size_t m_aiOffset {0};
+
+        size_t m_xiShift {0};
+        size_t m_yiShift {0};
+        size_t m_ziShift {0};
+        size_t m_aiShift {0};
+
+        quint64 m_maxXi {0};
+        quint64 m_maxYi {0};
+        quint64 m_maxZi {0};
+        quint64 m_maxAi {0};
+
+        quint64 m_maskXi {0};
+        quint64 m_maskYi {0};
+        quint64 m_maskZi {0};
+        quint64 m_maskAi {0};
+
+        bool m_hasAlpha {false};
+
+        inline void clearBuffers();
+        inline void allocateBuffers(const AkVideoCaps &caps);
+        void configure(const AkVideoCaps &caps);
+        void configureScaling(const AkVideoCaps &caps, qreal zoom);
+
+        /* Color blendig functions
+         *
+         * kx and ky must be in the range of [0, 2^N]
+         */
+
+        template <int N>
+        inline void blend(qint64 a,
+                          qint64 bx, qint64 by,
+                          qint64 kx, qint64 ky,
+                          qint64 *c) const
+        {
+            *c = (kx * (bx - a) + ky * (by - a) + (a << (N + 1))) >> (N + 1);
+        }
+
+        template <int N>
+        inline void blend2(const qint64 *ax,
+                           const qint64 *bx, const qint64 *by,
+                           qint64 kx, qint64 ky,
+                           qint64 *c) const
+        {
+            this->blend<N>(ax[0],
+                           bx[0], by[0],
+                           kx, ky,
+                           c);
+            this->blend<N>(ax[1],
+                           bx[1], by[1],
+                           kx, ky,
+                           c + 1);
+        }
+
+        template <int N>
+        inline void blend3(const qint64 *ax,
+                           const qint64 *bx, const qint64 *by,
+                           qint64 kx, qint64 ky,
+                           qint64 *c) const
+        {
+            this->blend<N>(ax[0],
+                           bx[0], by[0],
+                           kx, ky,
+                           c);
+            this->blend<N>(ax[1],
+                           bx[1], by[1],
+                           kx, ky,
+                           c + 1);
+            this->blend<N>(ax[2],
+                           bx[2], by[2],
+                           kx, ky,
+                           c + 2);
+        }
+
+        template <int N>
+        inline void blend4(const qint64 *ax,
+                           const qint64 *bx, const qint64 *by,
+                           qint64 kx, qint64 ky,
+                           qint64 *c) const
+        {
+            this->blend<N>(ax[0],
+                           bx[0], by[0],
+                           kx, ky,
+                           c);
+            this->blend<N>(ax[1],
+                           bx[1], by[1],
+                           kx, ky,
+                           c + 1);
+            this->blend<N>(ax[2],
+                           bx[2], by[2],
+                           kx, ky,
+                           c + 2);
+            this->blend<N>(ax[3],
+                           bx[3], by[3],
+                           kx, ky,
+                           c + 3);
+        }
+
+        // Endianness conversion functions for color components
+
+        inline quint8 swapBytes(quint8 &&value, int endianness) const
+        {
+            Q_UNUSED(endianness)
+
+            return value;
+        }
+
+        inline quint16 swapBytes(quint16 &&value, int endianness) const
+        {
+            if (endianness == Q_BYTE_ORDER)
+                return value;
+
+            quint16 result;
+            auto pv = reinterpret_cast<quint8 *>(&value);
+            auto pr = reinterpret_cast<quint8 *>(&result);
+            pr[0] = pv[1];
+            pr[1] = pv[0];
+
+            return result;
+        }
+
+        inline quint32 swapBytes(quint32 &&value, int endianness) const
+        {
+            if (endianness == Q_BYTE_ORDER)
+                return value;
+
+            quint32 result;
+            auto pv = reinterpret_cast<quint8 *>(&value);
+            auto pr = reinterpret_cast<quint8 *>(&result);
+            pr[0] = pv[3];
+            pr[1] = pv[2];
+            pr[2] = pv[1];
+            pr[3] = pv[0];
+
+            return result;
+        }
+
+        inline quint64 swapBytes(quint64 &&value, int endianness) const
+        {
+            if (endianness == Q_BYTE_ORDER)
+                return value;
+
+            quint64 result;
+            auto pv = reinterpret_cast<quint8 *>(&value);
+            auto pr = reinterpret_cast<quint8 *>(&result);
+            pr[0] = pv[7];
+            pr[1] = pv[6];
+            pr[2] = pv[5];
+            pr[3] = pv[4];
+            pr[4] = pv[3];
+            pr[5] = pv[2];
+            pr[6] = pv[1];
+            pr[7] = pv[0];
+
+            return result;
+        }
+
+        template <typename DataType>
+        void zoom3A(const AkVideoPacket &src, AkVideoPacket &dst) const
+        {
+            qint64 xyzai[4];
+            qint64 xyzai_x[4];
+            qint64 xyzai_y[4];
+            qint64 xyzaib[4];
+
+            for (int y = 0; y < this->m_inputHeight; ++y) {
+                auto &ys = this->m_srcHeight[y];
+                auto &ys_1 = this->m_srcHeight_1[y];
+
+                auto src_line_x = src.constLine(this->m_planeXi, ys) + this->m_xiOffset;
+                auto src_line_y = src.constLine(this->m_planeYi, ys) + this->m_yiOffset;
+                auto src_line_z = src.constLine(this->m_planeZi, ys) + this->m_ziOffset;
+                auto src_line_a = src.constLine(this->m_planeAi, ys) + this->m_aiOffset;
+
+                auto src_line_x_1 = src.constLine(this->m_planeXi, ys_1) + this->m_xiOffset;
+                auto src_line_y_1 = src.constLine(this->m_planeYi, ys_1) + this->m_yiOffset;
+                auto src_line_z_1 = src.constLine(this->m_planeZi, ys_1) + this->m_ziOffset;
+                auto src_line_a_1 = src.constLine(this->m_planeAi, ys_1) + this->m_aiOffset;
+
+                auto dst_line_x = dst.line(this->m_planeXi, y) + this->m_xiOffset;
+                auto dst_line_y = dst.line(this->m_planeYi, y) + this->m_yiOffset;
+                auto dst_line_z = dst.line(this->m_planeZi, y) + this->m_ziOffset;
+                auto dst_line_a = dst.line(this->m_planeAi, y) + this->m_aiOffset;
+
+                auto &ky = this->m_ky[y];
+
+                for (int x = 0; x < this->m_inputWidth; ++x) {
+                    int &xs_x = this->m_srcWidthOffsetX[x];
+                    int &xs_y = this->m_srcWidthOffsetY[x];
+                    int &xs_z = this->m_srcWidthOffsetZ[x];
+                    int &xs_a = this->m_srcWidthOffsetA[x];
+
+                    int &xs_x_1 = this->m_srcWidthOffsetX_1[x];
+                    int &xs_y_1 = this->m_srcWidthOffsetY_1[x];
+                    int &xs_z_1 = this->m_srcWidthOffsetZ_1[x];
+                    int &xs_a_1 = this->m_srcWidthOffsetA_1[x];
+
+                    xyzai[0] = *reinterpret_cast<const DataType *>(src_line_x + xs_x);
+                    xyzai[1] = *reinterpret_cast<const DataType *>(src_line_y + xs_y);
+                    xyzai[2] = *reinterpret_cast<const DataType *>(src_line_z + xs_z);
+                    xyzai[3] = *reinterpret_cast<const DataType *>(src_line_a + xs_a);
+                    xyzai_x[0] = *reinterpret_cast<const DataType *>(src_line_x + xs_x_1);
+                    xyzai_x[1] = *reinterpret_cast<const DataType *>(src_line_y + xs_y_1);
+                    xyzai_x[2] = *reinterpret_cast<const DataType *>(src_line_z + xs_z_1);
+                    xyzai_x[3] = *reinterpret_cast<const DataType *>(src_line_a + xs_a_1);
+                    xyzai_y[0] = *reinterpret_cast<const DataType *>(src_line_x_1 + xs_x);
+                    xyzai_y[1] = *reinterpret_cast<const DataType *>(src_line_y_1 + xs_y);
+                    xyzai_y[2] = *reinterpret_cast<const DataType *>(src_line_z_1 + xs_z);
+                    xyzai_y[3] = *reinterpret_cast<const DataType *>(src_line_a_1 + xs_a);
+
+                    xyzai[0] = (this->swapBytes(DataType(xyzai[0]), this->m_endianness) >> this->m_xiShift) & this->m_maxXi;
+                    xyzai[1] = (this->swapBytes(DataType(xyzai[1]), this->m_endianness) >> this->m_yiShift) & this->m_maxYi;
+                    xyzai[2] = (this->swapBytes(DataType(xyzai[2]), this->m_endianness) >> this->m_ziShift) & this->m_maxZi;
+                    xyzai[3] = (this->swapBytes(DataType(xyzai[3]), this->m_endianness) >> this->m_aiShift) & this->m_maxAi;
+                    xyzai_x[0] = (this->swapBytes(DataType(xyzai_x[0]), this->m_endianness) >> this->m_xiShift) & this->m_maxXi;
+                    xyzai_x[1] = (this->swapBytes(DataType(xyzai_x[1]), this->m_endianness) >> this->m_yiShift) & this->m_maxYi;
+                    xyzai_x[2] = (this->swapBytes(DataType(xyzai_x[2]), this->m_endianness) >> this->m_ziShift) & this->m_maxZi;
+                    xyzai_x[3] = (this->swapBytes(DataType(xyzai_x[3]), this->m_endianness) >> this->m_aiShift) & this->m_maxAi;
+                    xyzai_y[0] = (this->swapBytes(DataType(xyzai_y[0]), this->m_endianness) >> this->m_xiShift) & this->m_maxXi;
+                    xyzai_y[1] = (this->swapBytes(DataType(xyzai_y[1]), this->m_endianness) >> this->m_yiShift) & this->m_maxYi;
+                    xyzai_y[2] = (this->swapBytes(DataType(xyzai_y[2]), this->m_endianness) >> this->m_ziShift) & this->m_maxZi;
+                    xyzai_y[3] = (this->swapBytes(DataType(xyzai_y[3]), this->m_endianness) >> this->m_aiShift) & this->m_maxAi;
+
+                    this->blend4<SCALE_EMULT>(xyzai,
+                                              xyzai_x, xyzai_y,
+                                              this->m_kx[x], ky,
+                                              xyzaib);
+
+                    int &xd_x = this->m_dstWidthOffsetX[x];
+                    int &xd_y = this->m_dstWidthOffsetY[x];
+                    int &xd_z = this->m_dstWidthOffsetZ[x];
+                    int &xd_a = this->m_dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<DataType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<DataType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<DataType *>(dst_line_z + xd_z);
+                    auto ao = reinterpret_cast<DataType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & DataType(this->m_maskXi)) | (DataType(xyzaib[0]) << this->m_xiShift);
+                    *yo = (*yo & DataType(this->m_maskYi)) | (DataType(xyzaib[1]) << this->m_yiShift);
+                    *zo = (*zo & DataType(this->m_maskZi)) | (DataType(xyzaib[2]) << this->m_ziShift);
+                    *ao = (*ao & DataType(this->m_maskAi)) | (DataType(xyzaib[3]) << this->m_aiShift);
+
+                    auto xot = this->swapBytes(DataType(*xo), this->m_endianness);
+                    auto yot = this->swapBytes(DataType(*yo), this->m_endianness);
+                    auto zot = this->swapBytes(DataType(*zo), this->m_endianness);
+                    auto aot = this->swapBytes(DataType(*ao), this->m_endianness);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        template <typename DataType>
+        void zoom3(const AkVideoPacket &src, AkVideoPacket &dst) const
+        {
+            qint64 xyzi[3];
+            qint64 xyzi_x[3];
+            qint64 xyzi_y[3];
+            qint64 xyzib[3];
+
+            for (int y = 0; y < this->m_inputHeight; ++y) {
+                auto &ys = this->m_srcHeight[y];
+                auto &ys_1 = this->m_srcHeight_1[y];
+
+                auto src_line_x = src.constLine(this->m_planeXi, ys) + this->m_xiOffset;
+                auto src_line_y = src.constLine(this->m_planeYi, ys) + this->m_yiOffset;
+                auto src_line_z = src.constLine(this->m_planeZi, ys) + this->m_ziOffset;
+
+                auto src_line_x_1 = src.constLine(this->m_planeXi, ys_1) + this->m_xiOffset;
+                auto src_line_y_1 = src.constLine(this->m_planeYi, ys_1) + this->m_yiOffset;
+                auto src_line_z_1 = src.constLine(this->m_planeZi, ys_1) + this->m_ziOffset;
+
+                auto dst_line_x = dst.line(this->m_planeXi, y) + this->m_xiOffset;
+                auto dst_line_y = dst.line(this->m_planeYi, y) + this->m_yiOffset;
+                auto dst_line_z = dst.line(this->m_planeZi, y) + this->m_ziOffset;
+
+                auto &ky = this->m_ky[y];
+
+                for (int x = 0; x < this->m_inputWidth; ++x) {
+                    int &xs_x = this->m_srcWidthOffsetX[x];
+                    int &xs_y = this->m_srcWidthOffsetY[x];
+                    int &xs_z = this->m_srcWidthOffsetZ[x];
+
+                    int &xs_x_1 = this->m_srcWidthOffsetX_1[x];
+                    int &xs_y_1 = this->m_srcWidthOffsetY_1[x];
+                    int &xs_z_1 = this->m_srcWidthOffsetZ_1[x];
+
+                    xyzi[0] = *reinterpret_cast<const DataType *>(src_line_x + xs_x);
+                    xyzi[1] = *reinterpret_cast<const DataType *>(src_line_y + xs_y);
+                    xyzi[2] = *reinterpret_cast<const DataType *>(src_line_z + xs_z);
+                    xyzi_x[0] = *reinterpret_cast<const DataType *>(src_line_x + xs_x_1);
+                    xyzi_x[1] = *reinterpret_cast<const DataType *>(src_line_y + xs_y_1);
+                    xyzi_x[2] = *reinterpret_cast<const DataType *>(src_line_z + xs_z_1);
+                    xyzi_y[0] = *reinterpret_cast<const DataType *>(src_line_x_1 + xs_x);
+                    xyzi_y[1] = *reinterpret_cast<const DataType *>(src_line_y_1 + xs_y);
+                    xyzi_y[2] = *reinterpret_cast<const DataType *>(src_line_z_1 + xs_z);
+
+                    xyzi[0] = (this->swapBytes(DataType(xyzi[0]), this->m_endianness) >> this->m_xiShift) & this->m_maxXi;
+                    xyzi[1] = (this->swapBytes(DataType(xyzi[1]), this->m_endianness) >> this->m_yiShift) & this->m_maxYi;
+                    xyzi[2] = (this->swapBytes(DataType(xyzi[2]), this->m_endianness) >> this->m_ziShift) & this->m_maxZi;
+                    xyzi_x[0] = (this->swapBytes(DataType(xyzi_x[0]), this->m_endianness) >> this->m_xiShift) & this->m_maxXi;
+                    xyzi_x[1] = (this->swapBytes(DataType(xyzi_x[1]), this->m_endianness) >> this->m_yiShift) & this->m_maxYi;
+                    xyzi_x[2] = (this->swapBytes(DataType(xyzi_x[2]), this->m_endianness) >> this->m_ziShift) & this->m_maxZi;
+                    xyzi_y[0] = (this->swapBytes(DataType(xyzi_y[0]), this->m_endianness) >> this->m_xiShift) & this->m_maxXi;
+                    xyzi_y[1] = (this->swapBytes(DataType(xyzi_y[1]), this->m_endianness) >> this->m_yiShift) & this->m_maxYi;
+                    xyzi_y[2] = (this->swapBytes(DataType(xyzi_y[2]), this->m_endianness) >> this->m_ziShift) & this->m_maxZi;
+
+                    this->blend3<SCALE_EMULT>(xyzi,
+                                              xyzi_x, xyzi_y,
+                                              this->m_kx[x], ky,
+                                              xyzib);
+
+                    int &xd_x = this->m_dstWidthOffsetX[x];
+                    int &xd_y = this->m_dstWidthOffsetY[x];
+                    int &xd_z = this->m_dstWidthOffsetZ[x];
+
+                    auto xo = reinterpret_cast<DataType *>(dst_line_x + xd_x);
+                    auto yo = reinterpret_cast<DataType *>(dst_line_y + xd_y);
+                    auto zo = reinterpret_cast<DataType *>(dst_line_z + xd_z);
+
+                    *xo = (*xo & DataType(this->m_maskXi)) | (DataType(xyzib[0]) << this->m_xiShift);
+                    *yo = (*yo & DataType(this->m_maskYi)) | (DataType(xyzib[1]) << this->m_yiShift);
+                    *zo = (*zo & DataType(this->m_maskZi)) | (DataType(xyzib[2]) << this->m_ziShift);
+
+                    auto xot = this->swapBytes(DataType(*xo), this->m_endianness);
+                    auto yot = this->swapBytes(DataType(*yo), this->m_endianness);
+                    auto zot = this->swapBytes(DataType(*zo), this->m_endianness);
+
+                    *xo = xot;
+                    *yo = yot;
+                    *zo = zot;
+                }
+            }
+        }
+
+        template <typename DataType>
+        void zoom1A(const AkVideoPacket &src, AkVideoPacket &dst) const
+        {
+            qint64 xai[2];
+            qint64 xai_x[2];
+            qint64 xai_y[2];
+            qint64 xaib[2];
+
+            for (int y = 0; y < this->m_inputHeight; ++y) {
+                auto &ys = this->m_srcHeight[y];
+                auto &ys_1 = this->m_srcHeight_1[y];
+
+                auto src_line_x = src.constLine(this->m_planeXi, ys) + this->m_xiOffset;
+                auto src_line_a = src.constLine(this->m_planeAi, ys) + this->m_aiOffset;
+                auto src_line_x_1 = src.constLine(this->m_planeXi, ys_1) + this->m_xiOffset;
+                auto src_line_a_1 = src.constLine(this->m_planeAi, ys_1) + this->m_aiOffset;
+
+                auto dst_line_x = dst.line(this->m_planeXi, y) + this->m_xiOffset;
+                auto dst_line_a = dst.line(this->m_planeAi, y) + this->m_aiOffset;
+
+                auto &ky = this->m_ky[y];
+
+                for (int x = 0; x < this->m_inputWidth; ++x) {
+                    int &xs_x = this->m_srcWidthOffsetX[x];
+                    int &xs_a = this->m_srcWidthOffsetA[x];
+
+                    int &xs_x_1 = this->m_srcWidthOffsetX_1[x];
+                    int &xs_a_1 = this->m_srcWidthOffsetA_1[x];
+
+                    xai[0] = *reinterpret_cast<const DataType *>(src_line_x + xs_x);
+                    xai[1] = *reinterpret_cast<const DataType *>(src_line_a + xs_a);
+                    xai_x[0] = *reinterpret_cast<const DataType *>(src_line_x + xs_x_1);
+                    xai_x[1] = *reinterpret_cast<const DataType *>(src_line_a + xs_a_1);
+                    xai_y[0] = *reinterpret_cast<const DataType *>(src_line_x_1 + xs_x);
+                    xai_y[1] = *reinterpret_cast<const DataType *>(src_line_a_1 + xs_a);
+
+                    xai[0] = (this->swapBytes(DataType(xai[0]), this->m_endianness) >> this->m_xiShift) & this->m_maxXi;
+                    xai[1] = (this->swapBytes(DataType(xai[1]), this->m_endianness) >> this->m_aiShift) & this->m_maxAi;
+                    xai_x[0] = (this->swapBytes(DataType(xai_x[0]), this->m_endianness) >> this->m_xiShift) & this->m_maxXi;
+                    xai_x[1] = (this->swapBytes(DataType(xai_x[1]), this->m_endianness) >> this->m_aiShift) & this->m_maxAi;
+                    xai_y[0] = (this->swapBytes(DataType(xai_y[0]), this->m_endianness) >> this->m_xiShift) & this->m_maxXi;
+                    xai_y[1] = (this->swapBytes(DataType(xai_y[1]), this->m_endianness) >> this->m_aiShift) & this->m_maxAi;
+
+                    this->blend2<SCALE_EMULT>(xai,
+                                              xai_x, xai_y,
+                                              this->m_kx[x], ky,
+                                              xaib);
+
+                    int &xd_x = this->m_dstWidthOffsetX[x];
+                    int &xd_a = this->m_dstWidthOffsetA[x];
+
+                    auto xo = reinterpret_cast<DataType *>(dst_line_x + xd_x);
+                    auto ao = reinterpret_cast<DataType *>(dst_line_a + xd_a);
+
+                    *xo = (*xo & DataType(this->m_maskXi)) | (DataType(xaib[0]) << this->m_xiShift);
+                    *ao = (*ao & DataType(this->m_maskAi)) | (DataType(xaib[1]) << this->m_aiShift);
+
+                    auto xot = this->swapBytes(DataType(*xo), this->m_endianness);
+                    auto aot = this->swapBytes(DataType(*ao), this->m_endianness);
+
+                    *xo = xot;
+                    *ao = aot;
+                }
+            }
+        }
+
+        template <typename DataType>
+        void zoom1(const AkVideoPacket &src, AkVideoPacket &dst) const
+        {
+            qint64 xib = 0;
+
+            for (int y = 0; y < this->m_inputHeight; ++y) {
+                auto &ys = this->m_srcHeight[y];
+                auto &ys_1 = this->m_srcHeight_1[y];
+
+                auto src_line_x = src.constLine(this->m_planeXi, ys) + this->m_xiOffset;
+                auto src_line_x_1 = src.constLine(this->m_planeXi, ys_1) + this->m_xiOffset;
+
+                auto dst_line_x = dst.line(this->m_planeXi, y) + this->m_xiOffset;
+
+                auto &ky = this->m_ky[y];
+
+                for (int x = 0; x < this->m_inputWidth; ++x) {
+                    int &xs_x = this->m_srcWidthOffsetX[x];
+                    int &xs_x_1 = this->m_srcWidthOffsetX_1[x];
+
+                    auto xi = *reinterpret_cast<const DataType *>(src_line_x + xs_x);
+                    auto xi_x = *reinterpret_cast<const DataType *>(src_line_x + xs_x_1);
+                    auto xi_y = *reinterpret_cast<const DataType *>(src_line_x_1 + xs_x);
+
+                    xi = (this->swapBytes(DataType(xi), this->m_endianness) >> this->m_xiShift) & this->m_maxXi;
+                    xi_x = (this->swapBytes(DataType(xi_x), this->m_endianness) >> this->m_xiShift) & this->m_maxXi;
+                    xi_y = (this->swapBytes(DataType(xi_y), this->m_endianness) >> this->m_xiShift) & this->m_maxXi;
+
+                    this->blend<SCALE_EMULT>(xi,
+                                             xi_x, xi_y,
+                                             this->m_kx[x], ky,
+                                             &xib);
+
+                    int &xd_x = this->m_dstWidthOffsetX[x];
+                    auto xo = reinterpret_cast<DataType *>(dst_line_x + xd_x);
+                    *xo = (*xo & DataType(this->m_maskXi)) | (DataType(xib) << this->m_xiShift);
+                    *xo = this->swapBytes(DataType(*xo), this->m_endianness);
+                }
+            }
+        }
+
+#define ZOOM_FUNC(components) \
+        template <typename DataType> \
+        inline void zoomFrame##components(const AkVideoPacket &src, \
+                                          AkVideoPacket &dst) const \
+        { \
+            if (this->m_hasAlpha) \
+                this->zoom##components##A<DataType>(src, dst); \
+            else \
+                this->zoom##components<DataType>(src, dst); \
+        }
+
+        ZOOM_FUNC(1)
+        ZOOM_FUNC(3)
+
+        template <typename DataType>
+        inline void zoom(const AkVideoPacket &src, AkVideoPacket &dst)
+        {
+            switch (this->m_zoomType) {
+            case ZoomType_1_component:
+                this->zoomFrame1<DataType>(src, dst);
+                break;
+            case ZoomType_3_components:
+                this->zoomFrame3<DataType>(src, dst);
+                break;
+            }
+        }
+};
+
+ZoomElement::ZoomElement(): AkElement()
+{
+    this->d = new ZoomElementPrivate;
+}
+
+ZoomElement::~ZoomElement()
+{
+    this->d->clearBuffers();
+    delete this->d;
+}
+
+qreal ZoomElement::zoom() const
+{
+    return this->d->m_zoom;
+}
+
+QString ZoomElement::controlInterfaceProvide(const QString &controlId) const
+{
+    Q_UNUSED(controlId)
+
+    return QString("qrc:/Zoom/share/qml/main.qml");
+}
+
+void ZoomElement::controlInterfaceConfigure(QQmlContext *context,
+                                                const QString &controlId) const
+{
+    Q_UNUSED(controlId)
+
+    context->setContextProperty("Zoom", const_cast<QObject *>(qobject_cast<const QObject *>(this)));
+    context->setContextProperty("controlId", this->objectName());
+}
+
+#define DEFINE_ZOOM_FUNC(size) \
+    case ZoomDataTypes_##size: \
+        this->d->zoom<quint##size>(packet, dst); \
+        break;
+
+AkPacket ZoomElement::iVideoStream(const AkVideoPacket &packet)
+{
+    if (!packet)
+        return {};
+
+    auto zoom = qMax(this->d->m_zoom, 1.0);
+
+    if (qFuzzyCompare(zoom, 1.0)) {
+        emit this->oStream(packet);
+
+        return packet;
+    }
+
+    AkVideoPacket dst(packet.caps());
+    dst.copyMetadata(packet);
+
+    if (!packet.caps().isSameFormat(this->d->m_inputCaps)
+        || !qFuzzyCompare(zoom, this->d->m_currentZoom)) {
+        this->d->m_inputCaps = packet.caps();
+        this->d->m_currentZoom = zoom;
+        this->d->configure(packet.caps());
+        this->d->configureScaling(packet.caps(), zoom);
+    }
+
+    switch (this->d->m_zoomDataTypes) {
+    DEFINE_ZOOM_FUNC(8)
+    DEFINE_ZOOM_FUNC(16)
+    DEFINE_ZOOM_FUNC(32)
+    }
+
+    if (dst)
+        emit this->oStream(dst);
+
+    return dst;
+}
+
+void ZoomElement::setZoom(qreal zoom)
+{
+    if (qFuzzyCompare(this->d->m_zoom, zoom))
+        return;
+
+    this->d->m_zoom = zoom;
+    emit this->zoomChanged(this->d->m_zoom);
+}
+
+void ZoomElement::resetZoom()
+{
+    this->setZoom(1.0);
+}
+
+void ZoomElementPrivate::clearBuffers()
+{
+    if (this->m_srcWidthOffsetX) {
+        delete [] this->m_srcWidthOffsetX;
+        this->m_srcWidthOffsetX = nullptr;
+    }
+
+    if (this->m_srcWidthOffsetY) {
+        delete [] this->m_srcWidthOffsetY;
+        this->m_srcWidthOffsetY = nullptr;
+    }
+
+    if (this->m_srcWidthOffsetZ) {
+        delete [] this->m_srcWidthOffsetZ;
+        this->m_srcWidthOffsetZ = nullptr;
+    }
+
+    if (this->m_srcWidthOffsetA) {
+        delete [] this->m_srcWidthOffsetA;
+        this->m_srcWidthOffsetA = nullptr;
+    }
+
+    if (this->m_srcHeight) {
+        delete [] this->m_srcHeight;
+        this->m_srcHeight = nullptr;
+    }
+
+    if (this->m_srcWidthOffsetX_1) {
+        delete [] this->m_srcWidthOffsetX_1;
+        this->m_srcWidthOffsetX_1 = nullptr;
+    }
+
+    if (this->m_srcWidthOffsetY_1) {
+        delete [] this->m_srcWidthOffsetY_1;
+        this->m_srcWidthOffsetY_1 = nullptr;
+    }
+
+    if (this->m_srcWidthOffsetZ_1) {
+        delete [] this->m_srcWidthOffsetZ_1;
+        this->m_srcWidthOffsetZ_1 = nullptr;
+    }
+
+    if (this->m_srcWidthOffsetA_1) {
+        delete [] this->m_srcWidthOffsetA_1;
+        this->m_srcWidthOffsetA_1 = nullptr;
+    }
+
+    if (this->m_srcHeight_1) {
+        delete [] this->m_srcHeight_1;
+        this->m_srcHeight_1 = nullptr;
+    }
+
+    if (this->m_dstWidthOffsetX) {
+        delete [] this->m_dstWidthOffsetX;
+        this->m_dstWidthOffsetX = nullptr;
+    }
+
+    if (this->m_dstWidthOffsetY) {
+        delete [] this->m_dstWidthOffsetY;
+        this->m_dstWidthOffsetY = nullptr;
+    }
+
+    if (this->m_dstWidthOffsetZ) {
+        delete [] this->m_dstWidthOffsetZ;
+        this->m_dstWidthOffsetZ = nullptr;
+    }
+
+    if (this->m_dstWidthOffsetA) {
+        delete [] this->m_dstWidthOffsetA;
+        this->m_dstWidthOffsetA = nullptr;
+    }
+
+    if (this->m_kx) {
+        delete [] this->m_kx;
+        this->m_kx = nullptr;
+    }
+
+    if (this->m_ky) {
+        delete [] this->m_ky;
+        this->m_ky = nullptr;
+    }
+}
+
+void ZoomElementPrivate::allocateBuffers(const AkVideoCaps &caps)
+{
+    this->clearBuffers();
+
+    this->m_srcWidthOffsetX = new int [caps.width()];
+    this->m_srcWidthOffsetY = new int [caps.width()];
+    this->m_srcWidthOffsetZ = new int [caps.width()];
+    this->m_srcWidthOffsetA = new int [caps.width()];
+    this->m_srcHeight = new int [caps.height()];
+
+    this->m_srcWidthOffsetX_1 = new int [caps.width()];
+    this->m_srcWidthOffsetY_1 = new int [caps.width()];
+    this->m_srcWidthOffsetZ_1 = new int [caps.width()];
+    this->m_srcWidthOffsetA_1 = new int [caps.width()];
+    this->m_srcHeight_1 = new int [caps.height()];
+
+    this->m_dstWidthOffsetX = new int [caps.width()];
+    this->m_dstWidthOffsetY = new int [caps.width()];
+    this->m_dstWidthOffsetZ = new int [caps.width()];
+    this->m_dstWidthOffsetA = new int [caps.width()];
+
+    this->m_kx = new qint64 [caps.width()];
+    this->m_ky = new qint64 [caps.height()];
+}
+
+void ZoomElementPrivate::configure(const AkVideoCaps &caps)
+{
+    auto specs = AkVideoCaps::formatSpecs(caps.format());
+
+    switch (specs.byteLength()) {
+    case 1:
+        this->m_zoomDataTypes = ZoomDataTypes_8;
+        break;
+    case 2:
+        this->m_zoomDataTypes = ZoomDataTypes_16;
+        break;
+    case 4:
+        this->m_zoomDataTypes = ZoomDataTypes_32;
+        break;
+    default:
+        break;
+    }
+
+    auto components = specs.mainComponents();
+    this->m_zoomType = components == 1?
+                           ZoomType_1_component:
+                           ZoomType_3_components;
+    this->m_endianness = specs.endianness();
+
+    switch (specs.type()) {
+    case AkVideoFormatSpec::VFT_RGB:
+        this->m_planeXi = specs.componentPlane(AkColorComponent::CT_R);
+        this->m_planeYi = specs.componentPlane(AkColorComponent::CT_G);
+        this->m_planeZi = specs.componentPlane(AkColorComponent::CT_B);
+
+        this->m_compXi = specs.component(AkColorComponent::CT_R);
+        this->m_compYi = specs.component(AkColorComponent::CT_G);
+        this->m_compZi = specs.component(AkColorComponent::CT_B);
+
+        break;
+
+    case AkVideoFormatSpec::VFT_YUV:
+        this->m_planeXi = specs.componentPlane(AkColorComponent::CT_Y);
+        this->m_planeYi = specs.componentPlane(AkColorComponent::CT_U);
+        this->m_planeZi = specs.componentPlane(AkColorComponent::CT_V);
+
+        this->m_compXi = specs.component(AkColorComponent::CT_Y);
+        this->m_compYi = specs.component(AkColorComponent::CT_U);
+        this->m_compZi = specs.component(AkColorComponent::CT_V);
+
+        break;
+
+    case AkVideoFormatSpec::VFT_Gray:
+        this->m_planeXi = specs.componentPlane(AkColorComponent::CT_Y);
+        this->m_compXi = specs.component(AkColorComponent::CT_Y);
+
+        break;
+
+    default:
+        break;
+    }
+
+    this->m_planeAi = specs.componentPlane(AkColorComponent::CT_A);
+    this->m_compAi = specs.component(AkColorComponent::CT_A);
+
+    this->m_xiOffset = this->m_compXi.offset();
+    this->m_yiOffset = this->m_compYi.offset();
+    this->m_ziOffset = this->m_compZi.offset();
+    this->m_aiOffset = this->m_compAi.offset();
+
+    this->m_xiShift = this->m_compXi.shift();
+    this->m_yiShift = this->m_compYi.shift();
+    this->m_ziShift = this->m_compZi.shift();
+    this->m_aiShift = this->m_compAi.shift();
+
+    this->m_maxXi = this->m_compXi.max<quint64>();
+    this->m_maxYi = this->m_compYi.max<quint64>();
+    this->m_maxZi = this->m_compZi.max<quint64>();
+    this->m_maxAi = this->m_compAi.max<quint64>();
+
+    this->m_maskXi = ~(this->m_compXi.max<quint64>() << this->m_compXi.shift());
+    this->m_maskYi = ~(this->m_compYi.max<quint64>() << this->m_compYi.shift());
+    this->m_maskZi = ~(this->m_compZi.max<quint64>() << this->m_compZi.shift());
+    quint64 alphaMask = this->m_compAi.max<quint64>() << this->m_compAi.shift();
+    this->m_maskAi = ~alphaMask;
+
+    this->m_hasAlpha = specs.contains(AkColorComponent::CT_A);
+}
+
+void ZoomElementPrivate::configureScaling(const AkVideoCaps &caps, qreal zoom)
+{
+    this->allocateBuffers(caps);
+
+    auto w = qRound(caps.width() / zoom);
+    auto h = qRound(caps.height() / zoom);
+
+    if (w > caps.width())
+        w = caps.width();
+
+    if (h > caps.height())
+        h = caps.height();
+
+    auto x = (caps.width() - w) / 2;
+    auto y = (caps.height() - h) / 2;
+
+    QRect inputRect(x, y, w, h);
+
+    int wi_1 = qMax(1, inputRect.width() - 1);
+    int wo_1 = qMax(1, caps.width() - 1);
+
+    auto xSrcToDst = [&inputRect, &wi_1, &wo_1] (int x) -> int {
+        return (x - inputRect.x()) * wo_1 / wi_1;
+    };
+
+    auto xDstToSrc = [&inputRect, &wi_1, &wo_1] (int x) -> int {
+        return (x * wi_1 + inputRect.x() * wo_1) / wo_1;
+    };
+
+    for (int x = 0; x < caps.width(); ++x) {
+        auto xs = xDstToSrc(x);
+        auto xs_1 = xDstToSrc(qMin(x + 1, caps.width() - 1));
+        auto xmin = xSrcToDst(xs);
+        auto xmax = xSrcToDst(xs + 1);
+
+        this->m_srcWidthOffsetX[x] = (xs >> this->m_compXi.widthDiv()) * this->m_compXi.step();
+        this->m_srcWidthOffsetY[x] = (xs >> this->m_compYi.widthDiv()) * this->m_compYi.step();
+        this->m_srcWidthOffsetZ[x] = (xs >> this->m_compZi.widthDiv()) * this->m_compZi.step();
+        this->m_srcWidthOffsetA[x] = (xs >> this->m_compAi.widthDiv()) * this->m_compAi.step();
+
+        this->m_srcWidthOffsetX_1[x] = (xs_1 >> this->m_compXi.widthDiv()) * this->m_compXi.step();
+        this->m_srcWidthOffsetY_1[x] = (xs_1 >> this->m_compYi.widthDiv()) * this->m_compYi.step();
+        this->m_srcWidthOffsetZ_1[x] = (xs_1 >> this->m_compZi.widthDiv()) * this->m_compZi.step();
+        this->m_srcWidthOffsetA_1[x] = (xs_1 >> this->m_compAi.widthDiv()) * this->m_compAi.step();
+
+        this->m_dstWidthOffsetX[x] = (x >> this->m_compXi.widthDiv()) * this->m_compXi.step();
+        this->m_dstWidthOffsetY[x] = (x >> this->m_compYi.widthDiv()) * this->m_compYi.step();
+        this->m_dstWidthOffsetZ[x] = (x >> this->m_compZi.widthDiv()) * this->m_compZi.step();
+        this->m_dstWidthOffsetA[x] = (x >> this->m_compAi.widthDiv()) * this->m_compAi.step();
+
+        if (xmax > xmin)
+            this->m_kx[x] = SCALE_EMULT * (x - xmin) / (xmax - xmin);
+        else
+            this->m_kx[x] = 0;
+    }
+
+    int hi_1 = qMax(1, inputRect.height() - 1);
+    int ho_1 = qMax(1, caps.height() - 1);
+
+    auto ySrcToDst = [&inputRect, &hi_1, &ho_1] (int y) -> int {
+        return (y - inputRect.y()) * ho_1 / hi_1;
+    };
+
+    auto yDstToSrc = [&inputRect, &hi_1, &ho_1] (int y) -> int {
+        return (y * hi_1 + inputRect.y() * ho_1) / ho_1;
+    };
+
+    for (int y = 0; y < caps.height(); ++y) {
+        auto ys = yDstToSrc(y);
+        auto ys_1 = yDstToSrc(qMin(y + 1, caps.height() - 1));
+        auto ymin = ySrcToDst(ys);
+        auto ymax = ySrcToDst(ys + 1);
+
+        this->m_srcHeight[y] = ys;
+        this->m_srcHeight_1[y] = ys_1;
+
+        if (ymax > ymin)
+            this->m_ky[y] = SCALE_EMULT * (y - ymin) / (ymax - ymin);
+        else
+            this->m_ky[y] = 0;
+    }
+
+    this->m_inputWidth = caps.width();
+    this->m_inputHeight = caps.height();
+}
+
+#include "moc_zoomelement.cpp"
--- /dev/null
+++ webcamoid-9.0.0/libAvKys/Plugins/Zoom/src/zoomelement.h
@@ -0,0 +1,60 @@
+/* Webcamoid, webcam capture application.
+ * Copyright (C) 2022  Gonzalo Exequiel Pedone
+ *
+ * Webcamoid is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Webcamoid is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Web-Site: http://webcamoid.github.io/
+ */
+
+#ifndef ZOOMELEMENT_H
+#define ZOOMELEMENT_H
+
+#include <akelement.h>
+
+class ZoomElementPrivate;
+
+class ZoomElement: public AkElement
+{
+    Q_OBJECT
+    Q_DISABLE_COPY(ZoomElement)
+    Q_PROPERTY(qreal zoom
+               READ zoom
+               WRITE setZoom
+               RESET resetZoom
+               NOTIFY zoomChanged)
+
+    public:
+        ZoomElement();
+        ~ZoomElement();
+
+        Q_INVOKABLE qreal zoom() const;
+
+    private:
+        ZoomElementPrivate *d;
+
+    protected:
+        QString controlInterfaceProvide(const QString &controlId) const override;
+        void controlInterfaceConfigure(QQmlContext *context,
+                                       const QString &controlId) const override;
+        AkPacket iVideoStream(const AkVideoPacket &packet) override;
+
+    signals:
+        void zoomChanged(qreal zoom);
+
+    public slots:
+        void setZoom(qreal zoom);
+        void resetZoom();
+};
+
+#endif // ZOOMELEMENT_H
--- webcamoid-9.0.0.orig/libAvKys/cmake/ProjectCommons.cmake
+++ webcamoid-9.0.0/libAvKys/cmake/ProjectCommons.cmake
@@ -112,7 +112,8 @@ if (GIT_BIN)
     execute_process(COMMAND ${GIT_BIN} rev-parse HEAD
                     WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
                     OUTPUT_VARIABLE GIT_COMMIT_HASH
-                    OUTPUT_STRIP_TRAILING_WHITESPACE)
+                    OUTPUT_STRIP_TRAILING_WHITESPACE
+                    ERROR_QUIET)
 
     if (GIT_COMMIT_HASH)
         add_definitions(-DGIT_COMMIT_HASH="${GIT_COMMIT_HASH}")
@@ -120,7 +121,7 @@ if (GIT_BIN)
 endif ()
 
 set(ANDROID_JAVA_VERSION 1.6 CACHE STRING "Mimimum Java version to use in Android")
-set(ANDROID_JAR_DIRECTORY ${ANDROID_SDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL} CACHE INTERNAL "")
+set(ANDROID_JAR_DIRECTORY ${ANDROID_SDK_ROOT}/platforms/android-${ANDROID_NATIVE_API_LEVEL} CACHE INTERNAL "")
 
 # Force prefix and suffix. This fix broken MinGW builds in CI environments.
 if (WIN32 AND NOT MSVC)
@@ -156,3 +157,4 @@ set(GST_PLUGINS_SCANNER_PATH "${GST_PLUG
 # Sudoer tool search directory
 
 set(EXTRA_SUDOER_TOOL_DIR "" CACHE PATH "Additional sudoer tool search directory")
+set(QML_IMPORT_PATH "${CMAKE_SOURCE_DIR}/libAvKys/Lib/share/qml" CACHE STRING "additional libraries" FORCE)
--- webcamoid-9.0.0.orig/ports/ci/android/build.sh
+++ webcamoid-9.0.0/ports/ci/android/build.sh
@@ -61,7 +61,7 @@ for arch_ in $(echo "${TARGET_ARCH}" | t
         -DANDROID_ABI="${arch_}" \
         -DANDROID_STL=c++_shared \
         -DCMAKE_FIND_ROOT_PATH="$(qmake -query QT_INSTALL_PREFIX)" \
-        -DANDROID_SDK="${ANDROID_HOME}" \
+        -DANDROID_SDK_ROOT="${ANDROID_HOME}" \
         ${EXTRA_PARAMS} \
         -DDAILY_BUILD="${DAILY_BUILD}"
     cmake --build "${buildDir}" --parallel "${NJOBS}"
--- webcamoid-9.0.0.orig/ports/ci/appveyor/install_deps.sh
+++ webcamoid-9.0.0/ports/ci/appveyor/install_deps.sh
@@ -21,7 +21,7 @@
 [ -f environment.sh ] && source environment.sh
 
 pacman --noconfirm -Syyu \
-    --ignore filesystem,mintty,msys2-runtime,msys2-runtime-devel,pacman,pacman-mirrors
+    --ignore bash,filesystem,mintty,msys2-runtime,msys2-runtime-devel,pacman,pacman-mirrors
 pacman --noconfirm --needed -S \
     ccache \
     clang \
--- /dev/null
+++ webcamoid-9.0.0/ports/ci/flatpak/build.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+
+# Webcamoid, webcam capture application.
+# Copyright (C) 2022  Gonzalo Exequiel Pedone
+#
+# Webcamoid is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Webcamoid is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+#
+# Web-Site: http://webcamoid.github.io/
+
+appId=io.github.webcamoid.Webcamoid
+manifestFile=${appId}.yml
+
+cat << EOF > "${manifestFile}"
+app-id: ${appId}
+runtime: org.kde.Platform
+runtime-version: '${RUNTIME_VERSION}'
+sdk: org.kde.Sdk
+command: webcamoid
+rename-icon: webcamoid
+rename-appdata-file: ${appId}.metainfo.xml
+rename-desktop-file: webcamoid.desktop
+finish-args:
+  - --share=ipc
+  - --share=network
+  - --socket=fallback-x11
+  - --socket=wayland
+  - --socket=pulseaudio
+  - --filesystem=xdg-pictures
+  - --filesystem=xdg-videos
+  - --device=all
+modules:
+  - name: webcamoid
+    buildsystem: cmake-ninja
+    config-opts:
+      - -LA
+      - -DCMAKE_BUILD_TYPE=Release
+      - -DDAILY_BUILD="${DAILY_BUILD}"
+    sources:
+      - type: git
+        url: https://github.com/webcamoid/webcamoid.git
+        branch: ${GITHUB_REF##*/}
+        commit: ${GITHUB_SHA}
+EOF
+
+flatpak-builder --user --install webcamoid-build --force-clean "${manifestFile}"
--- /dev/null
+++ webcamoid-9.0.0/ports/ci/flatpak/deploy.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+# Webcamoid, webcam capture application.
+# Copyright (C) 2022  Gonzalo Exequiel Pedone
+#
+# Webcamoid is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Webcamoid is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+#
+# Web-Site: http://webcamoid.github.io/
+
+appId=io.github.webcamoid.Webcamoid
+export PACKAGES_DIR=${PWD}/webcamoid-packages/linux
+
+if [ "${DAILY_BUILD}" = 1 ]; then
+    version=daily-$(basename ${GITHUB_REF})-$(git rev-list --count HEAD)
+else
+    version=$(flatpak run "${appId}" -v | awk '{print $2}')
+fi
+
+package=webcamoid-installer-linux-${version}-x86_64.flatpak
+packagePath=${PACKAGES_DIR}/${package}
+
+echo "Running packaging"
+echo
+echo "Formats: Flatpak"
+
+mkdir -p "${PACKAGES_DIR}"
+flatpak build-bundle \
+    -v \
+    ~/.local/share/flatpak/repo \
+    "${packagePath}" \
+    "${appId}"
+
+if [ -e "${packagePath}" ]; then
+    fileSize=$(stat --format="%s" "${packagePath}" | numfmt --to=iec-i --suffix=B --format='%.2f')
+    md5=$(md5sum "${packagePath}" | awk '{print $1}')
+
+    echo
+    echo "Packages created:"
+    echo "    ${package} ${fileSize}"
+    echo "        md5sum: ${md5}"
+fi
--- /dev/null
+++ webcamoid-9.0.0/ports/ci/flatpak/install_deps.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+# Webcamoid, webcam capture application.
+# Copyright (C) 2022  Gonzalo Exequiel Pedone
+#
+# Webcamoid is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Webcamoid is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Webcamoid. If not, see <http://www.gnu.org/licenses/>.
+#
+# Web-Site: http://webcamoid.github.io/
+
+sudo add-apt-repository ppa:flatpak/stable
+sudo apt-get -qq -y update
+sudo apt-get -qq -y upgrade
+sudo apt-get -y install \
+    flatpak \
+    flatpak-builder
+
+flatpak --user remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
+flatpak --user -y install \
+    "org.kde.Platform//${RUNTIME_VERSION}" \
+    "org.kde.Sdk//${RUNTIME_VERSION}"
--- webcamoid-9.0.0.orig/ports/ci/linux-arch/install_deps.sh
+++ webcamoid-9.0.0/ports/ci/linux-arch/install_deps.sh
@@ -48,7 +48,11 @@ pacman --noconfirm --needed -S \
     libxkbcommon \
     libxkbcommon-x11 \
     libxrender \
-    wget
+    wget \
+    xcb-util-image \
+    xcb-util-keysyms \
+    xcb-util-renderutil \
+    xcb-util-wm
 
 mkdir -p .local/bin
 
--- webcamoid-9.0.0.orig/ports/ci/linux-debian/install_deps.sh
+++ webcamoid-9.0.0/ports/ci/linux-debian/install_deps.sh
@@ -52,6 +52,13 @@ apt-get -qq -y install \
     libgl1 \
     libx11-xcb1 \
     libxcb-glx0 \
+    libxcb-icccm4 \
+    libxcb-image0 \
+    libxcb-keysyms1 \
+    libxcb-randr0 \
+    libxcb-render-util0 \
+    libxcb-shape0 \
+    libxcb-xinerama0 \
     libxext6 \
     libxkbcommon-x11-0 \
     libxrender1 \
@@ -128,6 +135,7 @@ apt-get -y install \
     patchelf \
     pkg-config \
     qml-module-qt-labs-folderlistmodel \
+    qml-module-qt-labs-platform \
     qml-module-qt-labs-settings \
     qml-module-qtqml-models2 \
     qml-module-qtquick-controls2 \
--- webcamoid-9.0.0.orig/ports/ci/linux-fedora/install_deps.sh
+++ webcamoid-9.0.0/ports/ci/linux-fedora/install_deps.sh
@@ -38,7 +38,11 @@ dnf -y install \
     libxcb \
     libxkbcommon \
     libxkbcommon-x11 \
-    wget
+    wget \
+    xcb-util-wm \
+    xcb-util-image \
+    xcb-util-keysyms \
+    xcb-util-renderutil
 
 mkdir -p .local/bin
 
--- webcamoid-9.0.0.orig/ports/ci/linux-mageia/install_deps.sh
+++ webcamoid-9.0.0/ports/ci/linux-mageia/install_deps.sh
@@ -39,6 +39,12 @@ dnf -y install \
     lib64gl1 \
     lib64x11-xcb1 \
     lib64xcb-glx0 \
+    lib64xcb-icccm4 \
+    lib64xcb-shape0 \
+    lib64xcb-util-image0 \
+    lib64xcb-util-keysyms1 \
+    lib64xcb-util-renderutil0 \
+    lib64xcb-xinerama0 \
     lib64xext6\
     lib64xkbcommon0 \
     lib64xrender1 \
--- webcamoid-9.0.0.orig/ports/ci/linux-opensuse/install_deps.sh
+++ webcamoid-9.0.0/ports/ci/linux-opensuse/install_deps.sh
@@ -40,6 +40,13 @@ zypper -n in \
     libdbus-1-3 \
     libglvnd \
     libxcb-glx0 \
+    libxcb-icccm4 \
+    libxcb-image0 \
+    libxcb-keysyms1 \
+    libxcb-randr0 \
+    libxcb-render-util0 \
+    libxcb-shape0 \
+    libxcb-xinerama0 \
     libxkbcommon-x11-0 \
     wget
 
--- webcamoid-9.0.0.orig/ports/ci/linux-ubuntu/install_deps.sh
+++ webcamoid-9.0.0/ports/ci/linux-ubuntu/install_deps.sh
@@ -59,6 +59,13 @@ apt-get -qq -y install \
     libgl1 \
     libx11-xcb1 \
     libxcb-glx0 \
+    libxcb-icccm4 \
+    libxcb-image0 \
+    libxcb-keysyms1 \
+    libxcb-randr0 \
+    libxcb-render-util0 \
+    libxcb-shape0 \
+    libxcb-xinerama0 \
     libxext6 \
     libxkbcommon-x11-0 \
     libxrender1 \
@@ -149,6 +156,7 @@ else
         libqt5opengl5-dev \
         libqt5svg5-dev \
         qml-module-qt-labs-folderlistmodel \
+        qml-module-qt-labs-platform \
         qml-module-qt-labs-settings \
         qml-module-qtqml-models2 \
         qml-module-qtquick-controls2 \
--- webcamoid-9.0.0.orig/ports/ci/mac/build.sh
+++ webcamoid-9.0.0/ports/ci/mac/build.sh
@@ -31,6 +31,7 @@ export PATH="/usr/local/opt/qt@5/bin:$PA
 export LDFLAGS="$LDFLAGS -L/usr/local/opt/qt@5/lib"
 export CPPFLAGS="$CPPFLAGS -I/usr/local/opt/qt@5/include"
 export PKG_CONFIG_PATH="/usr/local/opt/qt@5/lib/pkgconfig:$PKG_CONFIG_PATH"
+export MACOSX_DEPLOYMENT_TARGET="10.14"
 INSTALL_PREFIX=${PWD}/webcamoid-data
 
 mkdir build
--- webcamoid-9.0.0.orig/webcamoid.metainfo.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<component type="desktop">
-  <id>webcamoid.desktop</id>
-  <name>Webcamoid</name>
-  <summary>Take photos and record videos with your webcam</summary>
-  <summary xml:lang="ca">Fer fotos i gravar vídeos amb la seva webcam</summary>
-  <summary xml:lang="de">Maak foto's en video's opnemen met uw webcam</summary>
-  <summary xml:lang="el">Τραβήξτε φωτογραφίες και εγγραφή βίντεο με την κάμερα σας</summary>
-  <summary xml:lang="es">Tome fotos y grabe videos con su cámara web</summary>
-  <summary xml:lang="fr">Prenez des photos et enregistrer des vidéos avec votre webcam</summary>
-  <summary xml:lang="gl">Facer fotos e gravar vídeos coa súa cámara web</summary>
-  <summary xml:lang="it">Scatta foto e registrare video con la tua webcam</summary>
-  <summary xml:lang="ja">ウェブカメラで写真や記録ビデオを撮影</summary>
-  <summary xml:lang="ko">웹캠으로 사진과 기록 비디오를 촬영</summary>
-  <summary xml:lang="pt">Tirar fotos e gravar vídeos com sua webcam</summary>
-  <summary xml:lang="ru">Возьмите фотографии и записывать видео с веб-камеры</summary>
-  <summary xml:lang="zh_CN">拍摄照片和录制视频与您的摄像头</summary>
-  <summary xml:lang="zh_TW">拍攝照片和錄製視頻與您的攝像頭</summary>
-  <developer_name>Gonzalo Exequiel Pedone</developer_name>
-  <description>
-  <p>
-   Webcamoid is a full featured and multiplatform webcam suite.
-  </p>
-  <ul>
-    <li>Cross-platform (GNU/Linux, Mac, Windows)</li>
-    <li>Take pictures and record videos with the webcam</li>
-    <li>Manages multiple webcams</li>
-    <li>Written in C++ and Qt</li>
-    <li>Custom controls for each webcam</li>
-    <li>Add funny effects to the webcam</li>
-    <li>+60 effects available</li>
-    <li>Translated to many languages.</li>
-    <li>Use custom network and local files as capture devices</li>
-    <li>Capture from desktop</li>
-    <li>Many recording formats</li>
-    <li>Virtual webcam support for feeding other programs</li>
-  </ul>
-</description>
-  <keywords>
-    <keyword>webcam</keyword>
-    <keyword>desktop</keyword>
-    <keyword>record</keyword>
-    <keyword>capture</keyword>
-  </keywords>
-  <metadata_license>CC0-1.0</metadata_license>
-  <project_license>GPL-3.0+</project_license>
-  <url type="bugtracker">https://github.com/webcamoid/webcamoid/issues</url>
-  <url type="donation">https://github.com/webcamoid/webcamoid/#donations</url>
-  <url type="help">https://github.com/webcamoid/webcamoid/wiki</url>
-  <url type="homepage">https://webcamoid.github.io/</url>
-  <translation type="qt">Webcamoid</translation>
-  <project_group>none</project_group>
-  <screenshots>
-    <screenshot type="default">
-      <caption>Simple and intuitive</caption>
-      <image>https://webcamoid.github.io/theme/images/screenshots/Main.png</image>
-    </screenshot>
-    <screenshot>
-      <caption>Take pictures and record videos</caption>
-      <image>https://webcamoid.github.io/theme/images/screenshots/Recording.png</image>
-    </screenshot>
-    <screenshot>
-      <caption>Apply funny effects</caption>
-      <image>https://webcamoid.github.io/theme/images/screenshots/Effects.png</image>
-    </screenshot>
-    <screenshot>
-      <caption>Capture from desktop</caption>
-      <image>https://webcamoid.github.io/theme/images/screenshots/DesktopCapture.png</image>
-    </screenshot>
-    <screenshot>
-      <caption>Create a virtual webcam</caption>
-      <image>https://webcamoid.github.io/theme/images/screenshots/VirtualCamera.png</image>
-    </screenshot>
-  </screenshots>
-  <update_contact>hipersayan.x_AT_gmail_com</update_contact>
-  <releases>
-    <release version="8.8.0" date="2021-02-16" />
-    <release version="8.7.1" date="2019-10-22" />
-    <release version="8.7.0" date="2019-10-01" />
-    <release version="8.6.1" date="2019-03-26" />
-    <release version="8.6.0" date="2019-03-20" />
-    <release version="8.5.0" date="2019-01-22" />
-  </releases>
-  <content_rating type="oars-1.1">
-    <content_attribute id="violence-cartoon">none</content_attribute>
-    <content_attribute id="violence-fantasy">none</content_attribute>
-    <content_attribute id="violence-realistic">none</content_attribute>
-    <content_attribute id="violence-bloodshed">none</content_attribute>
-    <content_attribute id="violence-sexual">none</content_attribute>
-    <content_attribute id="violence-desecration">none</content_attribute>
-    <content_attribute id="violence-slavery">none</content_attribute>
-    <content_attribute id="violence-worship">none</content_attribute>
-    <content_attribute id="drugs-alcohol">none</content_attribute>
-    <content_attribute id="drugs-narcotics">none</content_attribute>
-    <content_attribute id="drugs-tobacco">none</content_attribute>
-    <content_attribute id="sex-nudity">none</content_attribute>
-    <content_attribute id="sex-themes">none</content_attribute>
-    <content_attribute id="sex-prostitution">none</content_attribute>
-    <content_attribute id="sex-adultery">none</content_attribute>
-    <content_attribute id="sex-appearance">none</content_attribute>
-    <content_attribute id="language-profanity">none</content_attribute>
-    <content_attribute id="language-humor">none</content_attribute>
-    <content_attribute id="language-discrimination">none</content_attribute>
-    <content_attribute id="social-chat">none</content_attribute>
-    <content_attribute id="social-info">none</content_attribute>
-    <content_attribute id="social-audio">none</content_attribute>
-    <content_attribute id="social-location">none</content_attribute>
-    <content_attribute id="social-contacts">none</content_attribute>
-    <content_attribute id="money-purchasing">none</content_attribute>
-    <content_attribute id="money-gambling">none</content_attribute>
-  </content_rating>
-</component>
